PGDMP  0 n openbravo8.3.98.3.9_.00ENCODINGENCODINGSET client_encoding = 'UTF8'; false`.00 STDSTRINGS STDSTRINGS)SET standard_conforming_strings = 'off'; falsea.126236343 openbravoDATABASEGCREATE DATABASE openbravo WITH TEMPLATE = template0 ENCODING = 'UTF8'; DROP DATABASE openbravo; tadfalse26152200publicSCHEMACREATE SCHEMA public; DROP SCHEMA public; postgresfalseb.00 SCHEMA publicCOMMENT6COMMENT ON SCHEMA public IS 'standard public schema'; postgresfalse6c.00publicACLREVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; postgresfalse6% 261236349plpgsqlPROCEDURAL LANGUAGE$CREATE PROCEDURAL LANGUAGE plpgsql; "DROP PROCEDURAL LANGUAGE plpgsql; tadfalse@125536350)a_amortization_process(character varying)FUNCTIONCREATE FUNCTION a_amortization_process(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32):='0'; --OBTG:VARCHAR2-- v_PROCESSED VARCHAR(60):='N'; --OBTG:VARCHAR2-- v_POSTED VARCHAR(60):='Y'; --OBTG:VARCHAR2-- v_is_included NUMERIC:=0; v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_date TIMESTAMP; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; FINISH_PROCESS BOOLEAN DEFAULT FALSE; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; BEGIN RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter SELECT PROCESSED, POSTED, AD_Org_ID, DateAcct INTO v_PROCESSED, v_POSTED, v_AD_Org_ID, v_date FROM A_AMORTIZATION WHERE A_AMORTIZATION_ID=V_Record_ID; IF(v_PROCESSED='Y' AND v_POSTED='N') THEN --UnProcess amortization v_ResultStr:='ProcessAmortization'; UPDATE A_Amortization SET Processed='N', TotalAmortization= (SELECT sum(C_Currency_Convert(AmortizationAmt, C_Currency_ID, A_Amortization.C_Currency_ID, TO_DATE(NOW()), 'S')) FROM A_AmortizationLine WHERE A_Amortization_ID=A_Amortization.A_Amortization_ID ) WHERE A_Amortization_ID=V_Record_ID; ELSIF(v_PROCESSED='N') THEN -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM A_Amortization, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=A_Amortization.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND A_Amortization.A_Amortization_ID=V_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; -- Check the document does not have elements of different business unit or legal entities. SELECT AD_ORG_CHK_DOCUMENTS('A_AMORTIZATION', 'A_AMORTIZATIONLINE', V_Record_ID, 'A_AMORTIZATION_ID', 'A_AMORTIZATION_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('A_AMORTIZATION', V_Record_ID, 'A_AMORTIZATION_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_date, 'AMZ', NULL) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; --Process amortization v_ResultStr:='ProcessAmortization'; UPDATE A_Amortization SET Processed='Y', TotalAmortization= (SELECT sum(C_Currency_Convert(AmortizationAmt, C_Currency_ID, A_Amortization.C_Currency_ID, TO_DATE(NOW()), 'S')) FROM A_AmortizationLine WHERE A_Amortization_ID=A_Amortization.A_Amortization_ID ) WHERE A_Amortization_ID=V_Record_ID; ELSIF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@AmortizationDocumentPosted@' ; --OBTG:-20000-- END IF; IF(FINISH_PROCESS=false) THEN --Calculating Depreciated value v_ResultStr:='CalculatingDepreciatedValue'; UPDATE a_asset SET DepreciatedValue= (SELECT sum(AMORTIZATIONAMT) FROM a_amortizationline al, a_amortization am WHERE a_asset.a_asset_id=al.a_asset_id AND al.A_Amortization_ID=am.A_Amortization_ID AND coalesce(am.processed, 'N')='Y' ) WHERE exists (SELECT 1 FROM a_amortizationline al, a_amortization am WHERE a_asset.a_asset_id=al.a_asset_id AND al.A_Amortization_ID=am.A_Amortization_ID AND am.A_Amortization_ID=V_Record_ID); UPDATE a_asset SET IsFullyDepreciated='Y' WHERE COALESCE(AmortizationValueAmt, -1)=COALESCE(DepreciatedValue, -2) ; END IF; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','Finished ' || v_Message ; END IF; -- Commented by cromero 19102006 -- COMMIT; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; -- RAISE EXCEPTION '%', v_ResultStr ; --OBTG:-20100-- -- RETURN; END ; $$ LANGUAGE plpgsql; ODROP FUNCTION public.a_amortization_process(p_pinstance_id character varying); publictadfalse23416125595347a_amortization_trg()FUNCTION. CREATE FUNCTION a_amortization_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Check in tg_op = 'DELETE', invoice not processed ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('31-12-9999','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- If invoice is processed, is not allowed to change C_BPartner IF TG_OP = 'UPDATE' THEN if((OLD.Processed='Y' OR OLD.Posted='Y') AND ( COALESCE(old.NAME, '')!=COALESCE(new.NAME, '') OR COALESCE(old.DESCRIPTION, '')!=COALESCE(new.DESCRIPTION, '') OR COALESCE(old.DATEACCT, v_DateNull)!=COALESCE(new.DATEACCT, v_DateNull) OR COALESCE(old.STARTDATE, v_DateNull)!=COALESCE(new.STARTDATE, v_DateNull) OR COALESCE(old.ENDDATE, v_DateNull)!=COALESCE(new.ENDDATE, v_DateNull) OR COALESCE(old.C_PROJECT_ID, '0')!=COALESCE(new.C_PROJECT_ID, '0') OR COALESCE(old.C_CAMPAIGN_ID, '0')!=COALESCE(new.C_CAMPAIGN_ID, '0') OR COALESCE(old.C_ACTIVITY_ID, '0')!=COALESCE(new.C_ACTIVITY_ID, '0') OR COALESCE(old.USER1_ID, '0')!=COALESCE(new.USER1_ID, '0') OR COALESCE(old.USER2_ID, '0')!=COALESCE(new.USER2_ID, '0') OR COALESCE(old.C_CURRENCY_ID, '0')!=COALESCE(new.C_CURRENCY_ID, '0') OR COALESCE(old.TOTALAMORTIZATION, 0)!=COALESCE(new.TOTALAMORTIZATION, 0) OR COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0') OR COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0') )) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- end if; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.PROCESSED='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(old.PROCESSED='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.a_amortization_trg(); publictadfalse23416125595343a_amortizationline_trg()FUNCTION CREATE FUNCTION a_amortizationline_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; --OBTG:varchar2-- v_Posted VARCHAR(60) ; --OBTG:varchar2-- v_AmortizationID VARCHAR(32); --OBTG:varchar2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- ReadOnly Check IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_AmortizationID := NEW.A_Amortization_ID; ELSE v_AmortizationID := OLD.A_Amortization_ID; END IF; begin SELECT processed, POSTED INTO v_Processed, v_Posted FROM A_Amortization WHERE A_Amortization.A_Amortization_ID=v_AmortizationID; exception when others then v_processed:=null; end; if(TG_OP = 'UPDATE') THEN IF coalesce(v_Processed, 'N')='Y' and( COALESCE(old.A_AMORTIZATIONLINE_ID, '0') <> COALESCE(new.A_AMORTIZATIONLINE_ID, '0') or COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0') or COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0') or COALESCE(old.ISACTIVE, '') <> COALESCE(new.ISACTIVE, '') or COALESCE(old.A_AMORTIZATION_ID, '0') <> COALESCE(new.A_AMORTIZATION_ID, '0') or COALESCE(old.LINE, 0) <> COALESCE(new.LINE, 0) or COALESCE(old.A_ASSET_ID, '0') <> COALESCE(new.A_ASSET_ID, '0') or COALESCE(old.AMORTIZATION_PERCENTAGE, 0) <> COALESCE(new.AMORTIZATION_PERCENTAGE, 0) or COALESCE(old.AMORTIZATIONAMT, 0) <> COALESCE(new.AMORTIZATIONAMT, 0) or COALESCE(old.C_CURRENCY_ID, '0') <> COALESCE(new.C_CURRENCY_ID, '0')) then RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- end if; end if; if (TG_OP = 'INSERT' OR TG_OP = 'DELETE') THEN IF(coalesce(v_Processed, 'N')='Y' or coalesce(v_posted, 'N')='Y') then RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- end if; end if; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.a_amortizationline_trg(); publictadfalse23416125595345a_amortizationline_trg2()FUNCTION2CREATE FUNCTION a_amortizationline_trg2() RETURNS trigger AS $$ DECLARE BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; null; /* mutating table update a_asset set DepreciatedPlan=(select sum(AmortizationAmt) from A_AmortizationLine where A_AmortizationLine_ID=new.A_AmortizationLine_ID) where a_Asset_ID=new.A_Asset_ID: exception when others then null; */ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 0DROP FUNCTION public.a_amortizationline_trg2(); publictadfalse23416A1255363554a_asset_create(character varying, character varying)FUNCTIONCREATE FUNCTION a_asset_create(p_pinstance_id character varying, p_inoutline_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: A_Asset_Create.sql,v 1.6 2003/05/26 22:31:16 jjanke Exp $ *** * Title: Create Asset and Delivery * Description: * Open Issues: * - Reversal or Negative Delivery * - Guarantee Extension ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- Create from ShipmentLine Cur_ShipLine RECORD; -- v_A_Asset_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_A_Asset_Delivery_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(40) ; --OBTG:VARCHAR2-- v_Value VARCHAR(60) ; --OBTG:VARCHAR2-- v_Name VARCHAR(80) ; --OBTG:VARCHAR2-- v_count NUMERIC:=0; BEGIN -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','A_Asset_Create - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; -- IF (p.ParameterName = 'xx') THEN -- p_xx := p.P_String; -- DBMS_OUTPUT.PUT_LINE(' xx=' || p_xx); -- ELSE -- DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || p.ParameterName); -- END IF; END LOOP; -- Get Parameter END IF; BEGIN --BODY -- DBMS_OUTPUT.PUT_LINE(' Record_ID=' || v_Record_ID || ', InOutLine_ID=' || p_InOutLine_ID); -- Create From Shipment Line IF(p_InOutLine_ID IS NOT NULL) THEN FOR Cur_ShipLine IN (SELECT s.AD_Client_ID, s.AD_Org_ID, s.DocumentNo, s.MovementDate, s.C_BPartner_ID, s.C_BPartner_Location_ID, s.AD_User_ID, bp.Value AS BP_Value, bp.Name AS BP_Name, p.Value, p.Name, p.Description, p.Help, p.VersionNo, pc.A_Asset_Group_ID, CASE WHEN p.GuaranteeDays IS NOT NULL THEN s.MovementDate+p.GuaranteeDays ELSE NULL END AS GuaranteeDate, sl.M_Product_ID, sl.Description AS LineDescription, sl.MovementQty FROM M_InOut s INNER JOIN M_InOutLine sl ON(s.M_InOut_ID=sl.M_InOut_ID) INNER JOIN M_Product p ON(sl.M_Product_ID=p.M_Product_ID) INNER JOIN M_Product_Category pc ON(p.M_Product_Category_ID=pc.M_Product_Category_ID) INNER JOIN C_BPartner bp ON(s.C_BPartner_ID=bp.C_BPartner_ID) WHERE pc.A_Asset_Group_ID IS NOT NULL AND sl.M_InOutLine_ID=p_InOutLine_ID AND sl.MovementQty>0 ) LOOP FOR i IN 1 .. Cur_Shipline.MovementQty LOOP v_ResultStr:='InsertingAsset'; SELECT * INTO v_A_Asset_ID FROM AD_Sequence_Next('A_Asset', Cur_Shipline.AD_Client_ID) ; v_DocumentNo:='_' || Cur_Shipline.DocumentNo; IF(Cur_Shipline.MovementQty>1) THEN v_DocumentNo:=v_DocumentNo || '_' || i; END IF; v_Value:='_' || Cur_Shipline.Value || v_DocumentNo; v_Name:='_' || Cur_Shipline.Name || v_DocumentNo; -- INSERT INTO A_Asset ( A_Asset_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Value, Name, Description, Help, A_Asset_Group_ID, M_Product_ID, VersionNo, GuaranteeDate, AssetServiceDate, IsOwned, IsDepreciated, AssetDepreciationDate, IsInPosession, LocationComment, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID ) VALUES (v_A_Asset_ID, Cur_Shipline.AD_Client_ID, Cur_Shipline.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', SUBSTR(Cur_Shipline.BP_Value, 1, 40-LENGTH(v_Value)) || v_Value, SUBSTR(Cur_Shipline.BP_Name, 1, 60-LENGTH(v_Name)) || v_Name, SUBSTR(Cur_Shipline.Description || ' ' || Cur_Shipline.LineDescription, 1, 255), Cur_Shipline.Help, Cur_Shipline.A_Asset_Group_ID, Cur_Shipline.M_Product_ID, Cur_Shipline.VersionNo, Cur_Shipline.GuaranteeDate, Cur_Shipline.MovementDate, 'N', 'N', null, 'N', v_DocumentNo, Cur_Shipline.C_BPartner_ID, Cur_Shipline.C_BPartner_Location_ID, Cur_Shipline.AD_User_ID) ; RAISE NOTICE '%','A_Asset_ID=' || v_A_Asset_ID || ' - ' || Cur_Shipline.Value||v_DocumentNo ; END LOOP; v_count:=v_count + 1; v_Message:='@Created@: ' || v_count; END LOOP; END IF; RAISE NOTICE '%','Assets Created=' || v_count ; ---- <> RAISE NOTICE '%','A_Asset_Create - Finished ' || v_Message ; -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; RETURN; END ; $_$ LANGUAGE plpgsql; iDROP FUNCTION public.a_asset_create(p_pinstance_id character varying, p_inoutline_id character varying); publictadfalse23416B125536357*a_asset_group_acct_copy(character varying)FUNCTIONCREATE FUNCTION a_asset_group_acct_copy(pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- v_A_Asset_Group_ID VARCHAR(32); --OBTG:VARCHAR2-- Cur_Acct RECORD; -- v_Updated NUMERIC:=0; v_Created NUMERIC:=0; v_Updated_Total NUMERIC:=0; v_Created_Total NUMERIC:=0; rowcount NUMERIC; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='A_Asset_Group_ID') THEN v_A_Asset_Group_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' A_Asset_Group_ID=' || v_A_Asset_Group_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; /** * For all Accounting Schema of the Category */ FOR Cur_Acct IN (SELECT * FROM A_Asset_Group_Acct WHERE A_Asset_Group_ID=v_A_Asset_Group_ID) LOOP -- Update existing Assets UPDATE A_Asset_Acct SET A_DEPRECIATION_ACCT=Cur_Acct.A_DEPRECIATION_ACCT, A_ACCUMDEPRECIATION_ACCT=Cur_Acct.A_ACCUMDEPRECIATION_ACCT, A_DISPOSAL_LOSS=Cur_Acct.A_DISPOSAL_LOSS, A_DISPOSAL_GAIN=Cur_Acct.A_DISPOSAL_GAIN, updated=TO_DATE(NOW()), UpdatedBy='0' WHERE A_Asset_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND exists (SELECT 1 FROM A_Asset a WHERE a.A_Asset_ID=A_Asset_Acct.A_Asset_ID AND a.A_Asset_Group_ID=Cur_Acct.A_Asset_Group_ID ) ; GET DIAGNOSTICS rowcount:=ROW_COUNT; v_Updated:=rowcount; -- Insert new Assets INSERT INTO A_Asset_Acct ( A_ASSET_ACCT_ID, A_ASSET_ID, C_ACCTSCHEMA_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, A_DEPRECIATION_ACCT, A_ACCUMDEPRECIATION_ACCT, A_DISPOSAL_LOSS, A_DISPOSAL_GAIN ) SELECT GET_UUID(), a.A_ASSET_ID, Cur_Acct.C_ACCTSCHEMA_ID, a.AD_CLIENT_ID, a.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.A_DEPRECIATION_ACCT, Cur_Acct.A_ACCUMDEPRECIATION_ACCT, Cur_Acct.A_DISPOSAL_LOSS, Cur_Acct.A_DISPOSAL_GAIN FROM A_Asset a WHERE a.A_Asset_Group_ID=Cur_Acct.A_Asset_Group_ID AND NOT EXISTS (SELECT 1 FROM a_Asset_Acct aa WHERE aa.A_Asset_ID=a.A_Asset_Id AND aa.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) AND EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE (AD_IsOrgIncluded(AD_Org_ID, a.AD_ORG_ID, a.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(a.AD_ORG_ID, AD_Org_ID, a.AD_Client_ID)<>-1) AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS rowcount:=ROW_COUNT; v_Created:=rowcount; RAISE NOTICE '%','Asset = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; END LOOP; v_Message:='@Created@=' || v_Created_Total || ', @Updated@=' || v_Updated_Total; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.a_asset_group_acct_copy(pinstance_id character varying); publictadfalse23416125595349a_asset_group_trg()FUNCTION CREATE FUNCTION a_asset_group_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE (AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(new.AD_ORG_ID, AD_Org_ID, new.AD_Client_ID)<>-1) AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) AND d.AD_CLIENT_ID = new.AD_Client_ID ) LOOP INSERT INTO A_Asset_Group_Acct ( A_Asset_Group_Acct_ID, A_ASSET_GROUP_ID, C_ACCTSCHEMA_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, A_DEPRECIATION_ACCT, A_ACCUMDEPRECIATION_ACCT, A_DISPOSAL_LOSS, A_DISPOSAL_GAIN ) VALUES ( get_uuid(), new.A_Asset_Group_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.A_DEPRECIATION_ACCT, Cur_Defaults.A_ACCUMDEPRECIATION_ACCT, Cur_Defaults.A_DISPOSAL_LOSS, Cur_Defaults.A_DISPOSAL_GAIN ) ; END LOOP; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.a_asset_group_trg(); publictadfalse23416125595351a_asset_group_trg2()FUNCTIONCREATE FUNCTION a_asset_group_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; DELETE FROM A_Asset_Group_Acct WHERE A_Asset_Group_ID=old.A_Asset_Group_ID; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.a_asset_group_trg2(); publictadfalse23416C1255363612a_asset_post(character varying, character varying)FUNCTIONBWCREATE FUNCTION a_asset_post(p_pinstance_id character varying, p_asset_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- Success -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Record Info v_count NUMERIC; v_UpdatedBy A_ASSET.UpdatedBy%TYPE; v_Processing A_ASSET.Processing%TYPE; v_Processed A_ASSET.Processed%TYPE; v_DateAcct TIMESTAMP; v_DocumentNo A_ASSET.DocumentNo%TYPE; BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ACCTVALUEAMT NUMERIC; v_AD_CLIENT_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_ORG_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_USER_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AMORTIZATIONENDDATE TIMESTAMP; v_AMORTIZATIONSTARTDATE TIMESTAMP; v_AMORTIZATIONTYPE VARCHAR(60) ; --OBTG:VARCHAR2-- v_AMORTIZATIONVALUEAMT NUMERIC; v_AMORTIZATIONPERCENTAGE NUMERIC; v_ASSETDEPRECIATIONDATE TIMESTAMP; v_ASSETVALUEAMT NUMERIC; v_C_CURRENCY_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CREATEDBY VARCHAR(32); --OBTG:varchar2-- v_ISDEPRECIATED CHAR(1) ; v_RESIDUALASSETVALUEAMT NUMERIC; v_USELIFEMONTHS NUMERIC; V_MONTHS NUMERIC; v_USELIFEYEARS NUMERIC; v_ASSETSCHEDULE VARCHAR(60) ; --OBTG:VARCHAR2-- v_TOTAL_DAYS NUMERIC; v_THIS_YEAR_DAYS NUMERIC; v_BEGINING_DATE TIMESTAMP; v_ENDING_DATE TIMESTAMP; v_AUXAMT NUMERIC; v_AMORTIZATIONAMT NUMERIC; v_NEW_AMORTIZATION VARCHAR(32); --OBTG:VARCHAR2-- v_LINE NUMERIC; v_AMORTIZATIONLINE VARCHAR(32); --OBTG:varchar2-- v_FIRST_DAY_DATE TIMESTAMP; v_LAST_DAY_DATE TIMESTAMP; v_PERCENTAGE NUMERIC; v_AMOUNT NUMERIC; v_CURRENCY_ID VARCHAR(32); --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=false; v_DepreciatedLines NUMERIC; v_DepreciatedPlan NUMERIC; v_depreciatedValue NUMERIC; v_Period NUMERIC; v_DEPRECIATEDPREVIOUSAMT NUMERIC; v_AMORTIZATIONCALCTYPE VARCHAR(60) ; --OBTG:VARCHAR2-- v_PercentageGeneral NUMERIC; v_TotalAmt NUMERIC; v_Currency_Pre NUMERIC:= 0; v_Inserted NUMERIC:= 0; finish boolean; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' v_Record_ID=' || v_Record_ID ; ELSE RAISE NOTICE '%','--<>' ; v_Record_ID:=p_Asset_ID; END IF; BEGIN --BODY /** * Read Asset */ v_ResultStr:='ReadingAsset'; --Updating DepreciatedPlan UPDATE a_asset SET DepreciatedPlan= (SELECT coalesce(sum(AmortizationAmt), 0) FROM A_AmortizationLine WHERE A_asset_ID=v_Record_ID ) WHERE a_Asset_ID=v_Record_ID; SELECT ACCTVALUEAMT, AD_CLIENT_ID, AD_ORG_ID, AD_USER_ID, AMORTIZATIONENDDATE, AMORTIZATIONSTARTDATE, AMORTIZATIONTYPE, AMORTIZATIONVALUEAMT, ANNUALAMORTIZATIONPERCENTAGE, ASSETDEPRECIATIONDATE, ASSETVALUEAMT, C_CURRENCY_ID, CREATEDBY, ISDEPRECIATED, PROCESSING, RESIDUALASSETVALUEAMT, USELIFEMONTHS, USELIFEYEARS, ASSETSCHEDULE, PROCESSED, C_CURRENCY_ID, depreciatedPlan, COALESCE(depreciatedValue,0), COALESCE(DEPRECIATEDPREVIOUSAMT,0), AMORTIZATIONCALCTYPE INTO v_ACCTVALUEAMT, v_AD_CLIENT_ID, v_AD_ORG_ID, v_AD_USER_ID, v_AMORTIZATIONENDDATE, v_AMORTIZATIONSTARTDATE, v_AMORTIZATIONTYPE, v_AMORTIZATIONVALUEAMT, v_AMORTIZATIONPERCENTAGE, v_ASSETDEPRECIATIONDATE, v_ASSETVALUEAMT, v_C_CURRENCY_ID, v_CREATEDBY, v_ISDEPRECIATED, v_PROCESSING, v_RESIDUALASSETVALUEAMT, v_USELIFEMONTHS, v_USELIFEYEARS, v_ASSETSCHEDULE, v_PROCESSED, v_CURRENCY_ID, v_DepreciatedPlan, v_depreciatedValue, v_DEPRECIATEDPREVIOUSAMT, v_AMORTIZATIONCALCTYPE FROM A_ASSET WHERE A_ASSET_ID=v_Record_ID; RAISE NOTICE '%','A_Asset_ID=' || v_Record_ID || ' - AMORTIZATIONTYPE=' || v_AMORTIZATIONTYPE ; -- Restrictions... IF COALESCE(v_AMORTIZATIONVALUEAMT, 0)<=0 THEN RAISE EXCEPTION '%', '@AmountNotDefined@' ; --OBTG:-20000-- END IF; IF v_AMORTIZATIONCALCTYPE='PE' AND v_AMORTIZATIONPERCENTAGE IS NULL THEN RAISE EXCEPTION '%', '@PercentageNotDefined@' ; --OBTG:-20000-- END IF; IF v_AMORTIZATIONCALCTYPE!='PE' AND((v_ASSETSCHEDULE!='YE' AND v_USELIFEMONTHS IS NULL) OR(v_ASSETSCHEDULE='YE' AND v_USELIFEYEARS IS NULL)) THEN RAISE EXCEPTION '%', '@PeriodNotDefined@' ; --OBTG:-20000-- END IF; IF v_AMORTIZATIONSTARTDATE IS NULL THEN RAISE EXCEPTION '%', '@StartDateNotDefined@' ; --OBTG:-20000-- END IF; IF(v_Processing='Y') THEN RAISE EXCEPTION '%', '@OtherProcessActive@' ; --OBTG:-20000-- END IF; IF (v_C_CURRENCY_ID IS NULL) THEN RAISE EXCEPTION '%', '@"C_CURRENCY_ID" IS NOT NULL@' ; --OBTG:-20000-- END IF; /************************************************************************** * Start Processing ------------------------------------------------------ *************************************************************************/ IF(NOT FINISH_PROCESS) THEN v_ResultStr:='LockingAsset'; UPDATE A_ASSET SET Processing='Y' WHERE A_ASSET_ID=v_Record_ID; --we calculate the already completed number of cycles SELECT count(*) INTO v_DepreciatedLines FROM A_AmortizationLine al, A_Amortization am WHERE A_Asset_ID=V_Record_ID AND am.A_Amortization_ID=al.A_Amortization_ID; --we get the standard precision for the selected currency SELECT STDPRECISION INTO v_Currency_Pre FROM C_CURRENCY WHERE C_CURRENCY_ID = v_C_CURRENCY_ID; IF(v_AMORTIZATIONTYPE='LI') THEN IF(v_ASSETSCHEDULE='YE' OR v_AMORTIZATIONCALCTYPE='PE') THEN if v_USELIFEYEARS=v_DepreciatedLines then FINISH_PROCESS:=true; end if; IF(NOT FINISH_PROCESS) THEN if v_DepreciatedLines>0 then SELECT to_number(to_char(max(startdate), 'YYYY')) - to_number(to_char(min(endDate), 'YYYY')) INTO v_Period FROM a_amortization am, a_amortizationline al WHERE al.a_amortization_id=am.a_amortization_id AND al.a_asset_id=V_Record_ID; if(v_DepreciatedLines<>v_Period) and(v_DepreciatedLines<>(v_Period+1)) then RAISE EXCEPTION '%', '@PeriodsDontMatch@' ; --OBTG:-20000-- end if; end if; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN if v_AMORTIZATIONCALCTYPE='PE' then v_PercentageGeneral:=v_AMORTIZATIONPERCENTAGE; v_UseLifeYears:=trunc(100/v_PercentageGeneral) ; else -- v_PercentageGeneral := 100 / v_USELIFEYEARS; v_PercentageGeneral:=((v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT-v_depreciatedPlan) *100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS-v_DepreciatedLines) ; SELECT to_number(TO_DATE(ADD_MONTHS(v_AMORTIZATIONSTARTDATE, 12*v_USELIFEYEARS)) - v_AMORTIZATIONSTARTDATE) INTO v_TOTAL_DAYS FROM DUAL; end if; v_AMORTIZATIONVALUEAMT:=v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT; v_Count:=coalesce(v_depreciatedLines, 0) +1; v_BEGINING_DATE:=v_AMORTIZATIONSTARTDATE; v_FIRST_DAY_DATE:=TO_DATE('01-01-' || TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ; v_LAST_DAY_DATE:=TO_DATE('31-12-' || TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ; if v_Count>1 then v_BEGINING_DATE:=TO_DATE('31-12-' || to_char(TO_number(to_char(v_BEGINING_DATE, 'yyyy')) +v_Count-1), 'DD-MM-YYYY') ; v_USELIFEYEARS:=v_USELIFEYEARS+1; end if; v_AUXAMT:=0; v_PERCENTAGE:=0; v_TotalAmt:=coalesce(v_DepreciatedPlan, 0) ; finish:=false; WHILE not finish LOOP IF(v_COUNT=1 AND to_number(v_BEGINING_DATE-v_FIRST_DAY_DATE)<>0) THEN v_Percentage:=to_number(to_number(TO_DATE('31-12-'||to_char(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') -v_AMORTIZATIONSTARTDATE) /(TO_DATE('31-12-'||to_char(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') -TO_DATE('01-01-'||to_char(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY'))) * v_PercentageGeneral; v_USELIFEYEARS:=v_USELIFEYEARS+1; ELSE v_Percentage:=v_PercentageGeneral; END IF; v_COUNT:=v_COUNT + 1; v_ENDING_DATE:=TO_DATE('31-12-' ||TO_CHAR(v_BEGINING_DATE, 'YYYY'), 'DD-MM-YYYY') ; SELECT COALESCE(MAX(A_AMORTIZATION_ID), '-1') INTO v_NEW_AMORTIZATION FROM A_AMORTIZATION WHERE STARTDATE<=v_ENDING_DATE AND ENDDATE>=v_ENDING_DATE AND AD_CLIENT_ID=v_AD_CLIENT_ID AND PROCESSED='N' AND AD_Org_ID=v_AD_ORG_ID; IF(v_NEW_AMORTIZATION='-1') THEN SELECT * INTO v_NEW_AMORTIZATION FROM Ad_Sequence_Next('A_Amortization', '1000000') ; INSERT INTO A_AMORTIZATION ( A_AMORTIZATION_ID, DATEACCT, AD_CLIENT_ID, AD_ORG_ID, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ENDDATE, ISACTIVE, NAME, POSTED, PROCESSED, PROCESSING, STARTDATE, C_CURRENCY_ID ) VALUES (v_NEW_AMORTIZATION, v_ENDING_DATE, v_AD_CLIENT_ID, v_AD_ORG_ID, TO_DATE(NOW()), v_CREATEDBY, TO_DATE(NOW()), v_CREATEDBY, LAST_DAY(TO_DATE('01-' || TO_CHAR(v_ENDING_DATE, 'MM') || '-'|| TO_CHAR(v_ENDING_DATE, 'YYYY'),'DD-MM-YYYY')), 'Y', TO_CHAR(TO_DATE(LAST_DAY(TO_DATE('01-'|| TO_CHAR(v_ENDING_DATE, 'MM') || '-' || TO_CHAR(v_ENDING_DATE, 'YYYY'))))), 'N', 'N', 'N', TO_DATE('01-' || TO_CHAR(v_ENDING_DATE, 'MM') || '-' || TO_CHAR(v_ENDING_DATE, 'YYYY'),'DD-MM-YYYY'), v_CURRENCY_ID); END IF; SELECT COALESCE(MAX(LINE), 0) +10 INTO v_LINE FROM A_AMORTIZATIONLINE WHERE A_AMORTIZATION_ID=v_NEW_AMORTIZATION; IF((((v_AMORTIZATIONVALUEAMT+v_DEPRECIATEDPREVIOUSAMT) *v_PERCENTAGE/100)>(v_AMORTIZATIONVALUEAMT -v_TotalAmt))OR(v_Inserted+1>=v_USELIFEYEARS)) THEN SELECT COALESCE(SUM(AMORTIZATIONAMT),0), COALESCE(SUM(AMORTIZATION_PERCENTAGE),0) INTO v_AMOUNT, v_PERCENTAGE FROM A_AMORTIZATIONLINE WHERE A_ASSET_ID=v_Record_ID; v_AMOUNT:=v_AMORTIZATIONVALUEAMT - v_AMOUNT; v_PERCENTAGE:=v_AMOUNT*100/(v_AMORTIZATIONVALUEAMT+v_DEPRECIATEDPREVIOUSAMT) ; finish:=true; ELSE v_AMOUNT:=(v_AMORTIZATIONVALUEAMT+ v_DEPRECIATEDPREVIOUSAMT) *v_PERCENTAGE/100; END IF; if v_percentage>0 then SELECT * INTO v_AMORTIZATIONLINE FROM Ad_Sequence_Next('A_Amortizationline', '1000000') ; INSERT INTO A_AMORTIZATIONLINE ( A_AMORTIZATION_ID, A_AMORTIZATIONLINE_ID, A_ASSET_ID, AD_CLIENT_ID, AD_ORG_ID, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AMORTIZATION_PERCENTAGE, AMORTIZATIONAMT, C_CURRENCY_ID, ISACTIVE, LINE ) VALUES (v_NEW_AMORTIZATION, v_AMORTIZATIONLINE, v_Record_ID, v_AD_CLIENT_ID, v_AD_ORG_ID, TO_DATE(NOW()), v_CREATEDBY, TO_DATE(NOW()), v_CREATEDBY, ROUND(v_PERCENTAGE,v_Currency_Pre), ROUND(v_AMOUNT,v_Currency_Pre), v_C_CURRENCY_ID, 'Y', v_LINE) ; v_Inserted := v_Inserted +1; end if; v_BEGINING_DATE:=TO_DATE('31-12-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 'DD-MM-YYYY') + 1; v_TotalAmt:=v_TotalAmt + v_Amount; END LOOP; FINISH_process:=TRUE; END IF; --FINISH_PROCESS END IF; IF(NOT FINISH_PROCESS) THEN IF(v_ASSETSCHEDULE='MO') THEN if v_USELIFEMonths=v_DepreciatedLines then FINISH_PROCESS:=true; end if; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN if v_DepreciatedLines>0 then SELECT trunc(months_Between(max(startdate), min(endDate))) +1 INTO v_Period FROM a_amortization am, a_amortizationline al WHERE al.a_amortization_id=am.a_amortization_id AND al.a_asset_id=V_Record_ID; if(v_DepreciatedLines<>v_Period) and(v_DepreciatedLines<>(v_Period+1)) then RAISE EXCEPTION '%', '@PeriodsDontMatch@' ; --OBTG:-20000-- end if; end if; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_AMORTIZATIONVALUEAMT:=v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT; if v_AMORTIZATIONCALCTYPE='PE' then v_PercentageGeneral:=v_AMORTIZATIONPERCENTAGE/12; v_UseLifeMonths:=trunc(100/v_AMORTIZATIONPERCENTAGE*12) ; else -- v_PercentageGeneral := 100 / v_USELIFEYEARS; v_UseLifeYears:=v_UseLifeMonths/12; if (v_assetschedule = 'MO') then v_PercentageGeneral:=(((v_AMORTIZATIONVALUEAMT-v_depreciatedPlan) *100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS*12-v_DepreciatedLines)); else v_PercentageGeneral:=(((v_AMORTIZATIONVALUEAMT-v_depreciatedPlan) *100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS-v_DepreciatedLines)) /12; end if; SELECT to_number(TO_DATE(ADD_MONTHS(v_AMORTIZATIONSTARTDATE, 12*v_USELIFEYEARS)) - TO_DATE(v_AMORTIZATIONSTARTDATE)) INTO v_TOTAL_DAYS FROM DUAL; end if; v_Count:=coalesce(v_depreciatedLines, 0) +1; v_BEGINING_DATE:=v_AMORTIZATIONSTARTDATE; v_FIRST_DAY_DATE:=TO_DATE('01-'|| TO_CHAR(v_AMORTIZATIONSTARTDATE, 'MM') || '-' || TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ; v_LAST_DAY_DATE:=TO_DATE('31-12-'|| TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ; if v_Count>1 then v_BEGINING_DATE:=TO_DATE(ADD_MONTHS(LAST_DAY(TO_DATE('01-' || TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 'DD-MM-YYYY')), v_DepreciatedLines)) ; v_USELIFEMonths:=v_USELIFEMonths+1; end if; v_AUXAMT:=0; v_PERCENTAGE:=0; v_TotalAmt:=coalesce(v_DepreciatedPlan, 0) ; finish:=false; while not finish loop IF(v_COUNT=1 AND to_number(v_BEGINING_DATE-v_FIRST_DAY_DATE)<>0) THEN v_Percentage:=to_number(to_number(last_day(v_BEGINING_DATE) -v_BEGINING_DATE)) / (trunc((last_day(v_BEGINING_DATE) -(TO_DATE('01-'||to_char(TO_DATE(v_BEGINING_DATE), 'MM-YYYY'), 'DD-MM-YYYY')))) +1) * v_PercentageGeneral; v_USELIFEMONTHS:=v_USELIFEMONTHS+1; ELSE v_Percentage:=v_PercentageGeneral; END IF; v_COUNT:=v_COUNT + 1; SELECT COALESCE(MAX(A_AMORTIZATION_ID), '-1') INTO v_NEW_AMORTIZATION FROM A_AMORTIZATION WHERE STARTDATE<=v_BEGINING_DATE AND ENDDATE>=v_BEGINING_DATE AND AD_CLIENT_ID=v_AD_CLIENT_ID AND PROCESSED='N' AND AD_Org_ID=v_AD_ORG_ID; v_ENDING_DATE:= LAST_DAY(TO_DATE('01-' || TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 'DD-MM-YYYY')) ; IF(v_NEW_AMORTIZATION='-1') THEN SELECT * INTO v_NEW_AMORTIZATION FROM Ad_Sequence_Next('A_Amortization', '1000000') ; INSERT INTO A_AMORTIZATION ( A_AMORTIZATION_ID, DATEACCT, AD_CLIENT_ID, AD_ORG_ID, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ENDDATE, ISACTIVE, NAME, POSTED, PROCESSED, PROCESSING, STARTDATE, C_Currency_ID ) VALUES (v_NEW_AMORTIZATION, v_ENDING_DATE, v_AD_CLIENT_ID, v_AD_ORG_ID, TO_DATE(NOW()), v_CREATEDBY, TO_DATE(NOW()), v_CREATEDBY, LAST_DAY(TO_DATE('01-' || TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 'DD-MM-YYYY')), 'Y', TO_CHAR(TO_DATE(LAST_DAY(TO_DATE('01-' || TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'YYYY'), 'DD-MM-YYYY')))), 'N', 'N', 'N', TO_DATE('01-' || TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 'DD-MM-YYYY'), v_CURRENCY_ID) ; END IF; SELECT COALESCE(MAX(LINE), 0) +10 INTO v_LINE FROM A_AMORTIZATIONLINE WHERE A_AMORTIZATION_ID=v_NEW_AMORTIZATION; SELECT COALESCE(COUNT(A_AMORTIZATIONLINE_ID),0), COALESCE(MAX(A_ASSET.USELIFEMONTHS),1) INTO v_Inserted, V_MONTHS FROM A_AMORTIZATIONLINE, A_ASSET WHERE A_AMORTIZATIONLINE.A_ASSET_ID = A_ASSET.A_ASSET_ID AND A_ASSET.A_ASSET_ID=v_Record_ID; IF(((v_AMORTIZATIONVALUEAMT*v_PERCENTAGE/100)>(v_AMORTIZATIONVALUEAMT-v_TotalAmt))OR(v_Inserted+1>=v_USELIFEMONTHS) OR(v_Inserted>0 AND mod(v_Inserted+1,V_MONTHS)=0 AND TO_NUMBER(TO_CHAR(v_AMORTIZATIONSTARTDATE,'DD'))=1)) THEN SELECT COALESCE(SUM(AMORTIZATIONAMT),0), COALESCE(SUM(AMORTIZATION_PERCENTAGE),0) INTO v_AMOUNT, v_PERCENTAGE FROM A_AMORTIZATIONLINE WHERE A_ASSET_ID=v_Record_ID; v_AMOUNT := v_AMORTIZATIONVALUEAMT - v_AMOUNT; v_PERCENTAGE:=100 - v_PERCENTAGE; finish:=true; ELSE v_AMOUNT:=v_AMORTIZATIONVALUEAMT*v_PERCENTAGE/100; end if; IF(v_AMOUNT>0) THEN SELECT * INTO v_AMORTIZATIONLINE FROM Ad_Sequence_Next('A_Amortizationline', '1000000'); INSERT INTO A_AMORTIZATIONLINE ( A_AMORTIZATION_ID, A_AMORTIZATIONLINE_ID, A_ASSET_ID, AD_CLIENT_ID, AD_ORG_ID, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AMORTIZATION_PERCENTAGE, AMORTIZATIONAMT, C_CURRENCY_ID, ISACTIVE, LINE ) VALUES (v_NEW_AMORTIZATION, v_AMORTIZATIONLINE, v_Record_ID, v_AD_CLIENT_ID, v_AD_ORG_ID, TO_DATE(NOW()), v_CREATEDBY, TO_DATE(NOW()), v_CREATEDBY, ROUND(v_PERCENTAGE,v_Currency_Pre), ROUND(v_AMOUNT,v_Currency_Pre), v_C_CURRENCY_ID, 'Y', v_LINE) ; v_Inserted := v_Inserted +1; v_BEGINING_DATE:=TO_DATE(ADD_MONTHS(LAST_DAY(TO_DATE('01-' || TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 'DD-MM-YYYY')), 1) ); v_TotalAmt:=v_TotalAmt + v_Amount; END IF; END LOOP; END IF; --FINISH_PROCESS END IF; END IF; END IF; --FINISH_PROCESS IF(FINISH_PROCESS) THEN UPDATE A_ASSET SET PROCESSED='Y', PROCESSING='N' WHERE A_ASSET_ID=v_Record_ID; --Updating DepreciatedPlan UPDATE a_asset SET DepreciatedPlan= (SELECT sum(AmortizationAmt) FROM A_AmortizationLine WHERE A_asset_ID=v_Record_ID ) WHERE a_Asset_ID=v_Record_ID; END IF; --FINISH_PROCESS ---- <> v_ResultStr:='UnLockingAsset'; UPDATE A_ASSET SET Processing='N', Updated=TO_DATE(NOW()), UpdatedBy=v_CREATEDBY WHERE A_Asset_ID=v_Record_ID; -- Commented by cromero 19102006 IF(p_PInstance_ID IS NOT NULL) THEN -- Commented by cromero 19102006 -- COMMIT; -- Commented by cromero 19102006 END IF; IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_CREATEDBY, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','--<> ' || v_Message ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RAISE EXCEPTION '%', v_ResultStr ; --OBTG:-20100-- -- Commented by cromero 19102006 RETURN; END ; $$ LANGUAGE plpgsql; cDROP FUNCTION public.a_asset_post(p_pinstance_id character varying, p_asset_id character varying); publictadfalse23416D125536363 a_asset_post0(character varying)FUNCTIONCREATE FUNCTION a_asset_post0(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN PERFORM A_ASSET_POST(p_PInstance_ID, NULL); END ; $$ LANGUAGE plpgsql; FDROP FUNCTION public.a_asset_post0(p_pinstance_id character varying); publictadfalse23416125595353 a_asset_trg()FUNCTIONCREATE FUNCTION a_asset_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; v_Acct_ID VARCHAR(32); --OBTG:VARCHAR2-- Cur_Defaults RECORD; v_AttrSetValueType M_Product.AttrSetValueType%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Default Accounts for all AcctSchema IF(TG_OP = 'INSERT') THEN FOR Cur_Defaults IN (SELECT * FROM A_Asset_Group_Acct d1 WHERE d1.A_Asset_Group_ID=new.A_Asset_Group_ID AND EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE (AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(new.AD_ORG_ID, AD_Org_ID, new.AD_Client_ID)<>-1) AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d1.C_AcctSchema_ID ) AND d1.AD_CLIENT_ID = new.AD_Client_ID ) LOOP SELECT * INTO v_Acct_ID FROM Ad_Sequence_Next('A_Asset_Acct', Cur_Defaults.AD_Client_ID) ; INSERT INTO A_ASSET_ACCT ( A_ASSET_ACCT_ID, A_ASSET_ID, C_ACCTSCHEMA_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, A_DEPRECIATION_ACCT, A_ACCUMDEPRECIATION_ACCT, A_DISPOSAL_LOSS, A_DISPOSAL_GAIN ) VALUES ( get_uuid(), new.A_Asset_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.A_DEPRECIATION_ACCT, Cur_Defaults.A_ACCUMDEPRECIATION_ACCT, Cur_Defaults.A_DISPOSAL_LOSS, Cur_Defaults.A_DISPOSAL_LOSS ) ; END LOOP; ELSIF (TG_OP = 'UPDATE') THEN UPDATE A_ASSET_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE A_ASSET_ID = new.A_ASSET_ID; END IF; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN --Does not allow to change the attribute set value -- for products which attribute set value type is Fixed IF (NEW.M_PRODUCT_ID IS NOT NULL AND COALESCE(new.M_AttributeSetInstance_ID,'0')!='0') THEN SELECT ATTRSETVALUETYPE INTO v_AttrSetValueType FROM M_PRODUCT WHERE M_PRODUCT_ID=NEW.M_PRODUCT_ID; IF (v_AttrSetValueType='F') THEN RAISE EXCEPTION '%', '@AttrSetValueFixed@'; --OBTG:-20000-- END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'The asset group for this asset has no accounts' ; --OBTG:-20008-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; $DROP FUNCTION public.a_asset_trg(); publictadfalse23416125595355a_asset_trg2()FUNCTIONFCREATE FUNCTION a_asset_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; DELETE FROM A_Asset_Acct WHERE A_Asset_ID=old.A_Asset_ID; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.a_asset_trg2(); publictadfalse23416125595160ad_accountingrpt_element_trg()FUNCTIONCREATE FUNCTION ad_accountingrpt_element_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_xTree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xParent_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Menu Trigger -- for Translation -- and TreeNode IF TG_OP = 'INSERT' THEN -- Create TreeNode -- -- get AD_Tree_ID + ParentID --SELECT c.AD_Tree_Menu_ID, n.Node_ID -- INTO v_xTree_ID, v_xParent_ID -- FROM AD_CLIENTINFO c, AD_TREENODE n -- AD_TreeNodeMM n -- WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID -- AND n.Parent_ID IS NULL --AND c.AD_Client_ID=:NEW.AD_Client_ID; SELECT AD_TREE_ID, '0' INTO v_xTree_ID, v_xParent_ID FROM AD_TREE WHERE treetype='AR' AND AD_Client_ID=NEW.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||' Node='||:new.AD_Menu_ID||' Parent='||v_xParent_ID); -- Insert into TreeNode INSERT INTO AD_TREENODE -- AD_TreeNodeMM ( AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_UUID(), NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, v_xTree_ID, NEW.AD_Accountingrpt_Element_ID, v_xParent_ID,( CASE NEW.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; -- Summary Nodes first END IF; -- Inserting -- AD_Ref_List update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF((COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.'))) THEN IF(OLD.IsActive!=NEW.IsActive) THEN -- get AD_Tree_ID + ParentID --SELECT c.AD_Tree_Menu_ID, n.Node_ID --INTO v_xTree_ID, v_xParent_ID --FROM AD_CLIENTINFO c, AD_TREENODE n -- AD_TreeNodeMM n --WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID -- AND n.Parent_ID IS NULL --AND c.AD_Client_ID=:NEW.AD_Client_ID; -- Update UPDATE AD_TREENODE -- AD_TreeNodeMM SET IsActive=NEW.IsActive WHERE AD_Tree_ID=v_xTree_ID AND Node_ID=NEW.AD_Accountingrpt_Element_ID; END IF; END IF; END IF; -- Updating /*EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'AD_AccountingRpt_Element InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20002-- */ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 5DROP FUNCTION public.ad_accountingrpt_element_trg(); publictadfalse23416125595162ad_alertrecipient_trg()FUNCTIONCREATE FUNCTION ad_alertrecipient_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ n NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' or TG_OP = 'UPDATE' THEN select count(*) into n from ad_user_roles where ad_user_id = new.ad_user_id and ad_role_id = new.ad_role_id; IF new.AD_USER_ID is not null and n=0 then RAISE EXCEPTION '%', 'User not in role' ; --OBTG:-20515-- end if; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_alertrecipient_trg(); publictadfalse23416125595164ad_alertrule_trg()FUNCTION CREATE FUNCTION ad_alertrule_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Role RECORD; recipient_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- insert translations INSERT INTO AD_AlertRule_Trl ( AD_AlertRule_Trl_ID, AD_AlertRule_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, IsTranslated ) SELECT get_uuid(), new.AD_AlertRule_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; --insert permissions FOR Cur_Role in (SELECT DISTINCT AD_Role_ID, AD_CLIENT_ID, AD_ORG_ID FROM AD_Role WHERE isManual='N') loop SELECT * INTO recipient_id FROM Ad_Sequence_Next('AD_AlertRecipient', Cur_Role.AD_Org_Id) ; INSERT INTO AD_AlertRecipient (AD_AlertRule_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_AlertRecipient_ID ) values (new.AD_AlertRule_ID, Cur_Role.AD_Role_ID, Cur_Role.AD_CLIENT_ID, Cur_Role.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', recipient_id); END LOOP; END IF; IF TG_OP = 'UPDATE' THEN IF (COALESCE(old.Name, '.') <> COALESCE(new.Name,'.')) THEN UPDATE AD_AlertRule_Trl SET IsTranslated='N' WHERE AD_AlertRule_ID=new.AD_AlertRule_ID; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.ad_alertrule_trg(); publictadfalse23416125595166ad_auxiliarinput_mod_trg()FUNCTION CREATE FUNCTION ad_auxiliarinput_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.Ad_Auxiliarinput_Id; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.Ad_Auxiliarinput_Id; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Tab_ID , '.') != COALESCE(OLD.AD_Tab_ID , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Code , '.') != COALESCE(OLD.Code , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 1DROP FUNCTION public.ad_auxiliarinput_mod_trg(); publictadfalse23416125595168ad_auxiliarinput_trg()FUNCTIONmCREATE FUNCTION ad_auxiliarinput_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF new.AD_Module_ID != '0' THEN SELECT COUNT(*) INTO v_Aux FROM AD_MODULE_DBPREFIX WHERE AD_MODULE_ID = new.AD_Module_ID AND instr(upper(new.NAME), upper(name)||'_') = 1; IF v_Aux = 0 THEN RAISE EXCEPTION '%', 'Messages must start with its module DB prefix' ; --OBTG:-20536-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.ad_auxiliarinput_trg(); publictadfalse23416125595170ad_callout_mod_trg()FUNCTION CREATE FUNCTION ad_callout_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Callout_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Callout_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_callout_mod_trg(); publictadfalse23416125595172ad_callout_trg()FUNCTIONCREATE FUNCTION ad_callout_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ClassName VARCHAR(60) ; --OBTG:VARCHAR2-- v_dir VARCHAR(200); --OBTG:VARCHAR2-- v_package VARCHAR(200); --OBTG:VARCHAR2-- v_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF(NOT(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.'))) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; IF(TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN IF OLD.ISACTIVE='Y' THEN DELETE FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_CALLOUT_ID=old.AD_CALLOUT_ID AND ACTION='C' ) ; DELETE FROM AD_MODEL_OBJECT WHERE ACTION='C' AND AD_MODEL_OBJECT.AD_CALLOUT_ID=OLD.AD_CALLOUT_ID; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN IF NEW.ISACTIVE='Y' THEN IF NEW.AD_MODULE_ID != '0' THEN SELECT JavaPackage INTO v_package FROM AD_MODULE WHERE AD_MODULE_ID = NEW.AD_MODULE_ID; v_dir := v_package||'.ad_callouts'; ELSE v_package := 'org.openbravo.erpCommon.ad_callouts'; v_dir := 'ad_callouts'; END IF; v_ClassName:=AD_MAPPING_FORMAT(TO_CHAR(new.NAME)) ; v_ID := get_uuid(); INSERT INTO AD_MODEL_OBJECT ( AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_CALLOUT_ID, CLASSNAME, ISDEFAULT ) VALUES ( v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'C', new.AD_CALLOUT_ID, v_package || '.' || v_ClassName, 'Y' ) ; INSERT INTO AD_MODEL_OBJECT_MAPPING ( AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT ) VALUES ( get_uuid(), new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, ('/' || v_dir || '/' || v_ClassName || '.html'), 'Y' ) ; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_callout_trg(); publictadfalse23416125595176ad_client_trg()FUNCTION CREATE FUNCTION ad_client_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Client_Trg.sql,v 1.2 2002/05/29 04:25:38 jjanke Exp $ *** * Title: AD_Client * Description: * Add DocumentNo Sequences for the new Client ************************************************************************/ --TYPE RECORD IS REFCURSOR; CUR_DSequence RECORD; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- See also: AD_Sequence_Check FOR CUR_DSequence IN ( SELECT TableName FROM AD_Table t WHERE IsActive='Y' -- Get all Tables with DocumentNo or Value AND AD_Table_ID IN ( SELECT AD_Table_ID FROM AD_Column WHERE ColumnName='DocumentNo' OR ColumnName='Value' ) AND NOT EXISTS (SELECT 1 FROM AD_Sequence s WHERE s.Name = 'DocumentNo_' || t.TableName AND s.AD_Client_ID=NEW.AD_Client_ID) ) LOOP -- DBMS_OUTPUT.PUT_LINE(' ' || :new.AD_Client_ID || ' - ' || CUR_DSequence.TableName); -- SELECT * INTO v_NextNo FROM Ad_Sequence_Next('AD_Sequence', NEW.AD_Client_ID) ; INSERT INTO AD_Sequence ( AD_Sequence_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, VFormat, IsAutoSequence, IncrementNo, StartNo, CurrentNext, CurrentNextSys, IsTableID, Prefix, Suffix, StartNewYear ) VALUES ( v_NextNo, NEW.AD_Client_ID, 0, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'DocumentNo_' || CUR_DSequence.TableName, 'DocumentNo/Value for Table ' || CUR_DSequence.TableName, NULL, 'Y', 1, 10000000, 10000000, 10000000, 'N', NULL, NULL, 'N' ) ; END LOOP; -- Sequences IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; &DROP FUNCTION public.ad_client_trg(); publictadfalse23416125595174ad_clientinfo_trg()FUNCTION=CREATE FUNCTION ad_clientinfo_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ExistsNegativeStock NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (OLD.ALLOWNEGATIVESTOCK='Y' AND NEW.ALLOWNEGATIVESTOCK='N') THEN SELECT COUNT(*) INTO v_ExistsNegativeStock FROM ( SELECT ROUND(COALESCE(QTYONHAND, 0), 2) AS QTY, ROUND(COALESCE(QTYORDERONHAND, 0), 2) AS QTYORDER FROM M_STORAGE_DETAIL WHERE AD_CLIENT_ID=NEW.AD_Client_ID ) A WHERE QTY<0 OR QTYORDER<0; IF v_ExistsNegativeStock<>0 THEN RAISE EXCEPTION '%', '@NegativeStockCheck@'; --OBTG:-20000-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_clientinfo_trg(); publictadfalse23416E125536375Mad_column_identifier(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_column_identifier(p_tablename character varying, p_record_id character varying, p_language character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Display VARCHAR(4000) ; --OBTG:VARCHAR2-- v_SQL VARCHAR(4000):=''; --OBTG:VARCHAR2-- BEGIN SELECT REPLACE(REPLACE(SQL_RECORD_IDENTIFIER, ':c_language', '''' || p_Language || ''''), ':c_ID', p_Record_ID) INTO v_SQL FROM AD_TABLE WHERE UPPER(TABLENAME)=UPPER(p_TableName) ; EXECUTE v_SQL INTO v_Display; /* IF (p_Language=NULL OR p_Language='' ) THEN v_Display:='**'; END IF;*/ -- -- << END_PROCESS >> RETURN v_Display; EXCEPTION WHEN OTHERS THEN RETURN '**'; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_column_identifier(p_tablename character varying, p_record_id character varying, p_language character varying); publictadfalse23416F125536376{ad_column_identifier_ref_sql(character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_column_identifier_ref_sql(p_tableref character varying, p_tablename character varying, p_columnname character varying, p_reference_id character varying, p_reference_value_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_SQL VARCHAR(4000):=''; --OBTG:VARCHAR2-- v_TableDir VARCHAR(50) ; --OBTG:VARCHAR2-- v_FieldValue VARCHAR(50) ; --OBTG:VARCHAR2-- v_FieldDisplay VARCHAR(50) ; --OBTG:VARCHAR2-- v_DisplayValue CHAR(1):='N'; v_IsTranslated CHAR(1):='N'; v_NewTableName VARCHAR(60) ; --OBTG:VARCHAR2-- v_NewColumnName VARCHAR(60) ; --OBTG:VARCHAR2-- v_NewReference VARCHAR(32); --OBTG:VARCHAR2-- v_NewReferenceValue VARCHAR(32); --OBTG:VARCHAR2-- v_KeyReference VARCHAR(32); --OBTG:VARCHAR2-- v_firstColumn BOOLEAN:=TRUE; END_PROCESS BOOLEAN:=FALSE; BEGIN IF p_Reference_ID='17' THEN -- LIST v_SQL:='coalesce ((SELECT NAME FROM AD_REF_LIST_V '; v_SQL:=v_SQL || 'WHERE AD_Language=L.AD_LANGUAGE '; v_SQL:=v_SQL || 'AND Value=' || p_TableRef||'.'|| p_ColumnName || ' '; v_SQL:=v_SQL || 'AND AD_Reference_ID=''' || p_Reference_Value_ID || '''), '''')'; ELSIF p_Reference_ID='18' THEN -- TABLE SELECT ad_table.tablename, c1.columnname as keyName, c1.ad_reference_id, c2.columnname as displayName, isvaluedisplayed, c2.AD_REFERENCE_ID, c2.AD_REFERENCE_VALUE_ID INTO v_TableDir, v_FieldValue, v_KeyReference, v_FieldDisplay, v_DisplayValue, v_NewReference, v_NewReferenceValue FROM ad_ref_table, ad_table, ad_column c1, ad_column c2 WHERE ad_ref_table.ad_table_id=ad_table.ad_table_id AND ad_ref_table.ad_key=c1.ad_column_id AND ad_ref_table.ad_display=c2.ad_column_id AND ad_ref_table.ad_reference_id=p_Reference_Value_ID; v_SQL:='coalesce ((SELECT '; IF v_DisplayValue='Y' THEN v_SQL:=v_SQL || 'VALUE || '' - '' || '; END IF; v_SQL:=v_SQL || AD_COLUMN_IDENTIFIER_REF_SQL(p_TableRef||'T', v_TableDir, v_FieldDisplay, v_NewReference, v_NewReferenceValue) ; v_SQL:=v_SQL || ' FROM ' || v_TableDir || ' '||p_TableRef||'T WHERE '||p_TableRef||'T.' || v_FieldValue || '='|| p_TableRef||'.'|| p_ColumnName||'),'''') '; ELSIF p_Reference_ID IN('19', '30', '31', '35', '25', '800011', '32') THEN -- SEARCHS IF p_Reference_ID='25' THEN v_TableDir:='C_ValidCombination'; ELSIF p_Reference_ID='31' THEN v_TableDir:='M_Locator'; ELSIF p_Reference_ID='800011' THEN v_TableDir:='M_Product'; ELSIF p_Reference_ID='32' THEN v_TableDir:='AD_Image'; ELSE v_TableDir:=SUBSTR(p_ColumnName, 1, LENGTH(p_ColumnName) -3) ; END IF; ELSE SELECT c.ISTRANSLATED INTO v_IsTranslated FROM AD_COLUMN c, AD_TABLE t WHERE c.AD_TABLE_ID=t.AD_TABLE_ID AND UPPER(t.TABLENAME)=UPPER(p_TableName) AND UPPER(c.COLUMNNAME)=UPPER(p_ColumnName) ; IF v_IsTranslated='Y' THEN SELECT MAX(TableName) INTO v_NewTableName FROM AD_TABLE WHERE UPPER(TableName)=UPPER(p_TableName) || '_TRL'; IF v_NewTableName IS NOT NULL THEN SELECT MAX(c.COLUMNNAME) INTO v_NewColumnName FROM AD_COLUMN c, AD_TABLE t WHERE c.AD_TABLE_ID=t.AD_TABLE_ID AND UPPER(t.TABLENAME)=UPPER(v_NewTableName) AND UPPER(c.COLUMNNAME)=UPPER(p_ColumnName) ; IF v_NewColumnName IS NOT NULL THEN SELECT MAX(COLUMNNAME) INTO v_FieldValue FROM AD_COLUMN c, AD_TABLE t WHERE c.AD_TABLE_ID=t.AD_TABLE_ID AND UPPER(t.TABLENAME)=UPPER(p_TableName) AND(c.ISKEY='Y' OR c.ISSECONDARYKEY='Y') AND UPPER(c.COLUMNNAME) <> 'AD_LANGUAGE'; v_SQL:='coalesce ((SELECT COALESCE(TO_CHAR(MAX(' || p_TableRef || 'T.' || v_NewColumnName || ')), TO_CHAR(' || p_TableRef || '.' || p_ColumnName || ')) FROM ' || v_NewTableName || ' ' || p_TableRef || 'T WHERE '|| p_TableRef||'T.' || v_FieldValue || '='|| p_TableRef||'.'|| v_FieldValue || ' AND ' || p_TableRef || 'T.AD_LANGUAGE=L.AD_LANGUAGE), '''') '; END IF; END IF; END IF; IF v_SQL IS NULL OR v_SQL='' THEN v_SQL:='TO_CHAR(COALESCE(TO_CHAR('||p_TableRef||'.'|| p_ColumnName||'),''''))'; END IF; END IF; IF p_Reference_ID IN('19', '32', '30', '31', '35', '25', '800011') THEN DECLARE v_PartialDisplay VARCHAR(2000) ; --OBTG:VARCHAR2-- v_KeyName VARCHAR(50) ; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Columns RECORD; Cur_KeyName RECORD; BEGIN FOR Cur_KeyName IN (SELECT c.ColumnName FROM AD_Column c, AD_Table t WHERE c.AD_Table_ID=t.AD_Table_ID AND UPPER(t.TableName)=UPPER(v_TableDir) AND c.isKey='Y' ) LOOP v_KeyName:=Cur_KeyName.ColumnName; EXIT; END LOOP; IF v_KeyName IS NULL THEN v_SQL:='--No key found'; END_PROCESS:=true; END IF; IF(NOT END_PROCESS) THEN FOR Cur_Columns IN (SELECT c.ColumnName, c.AD_Reference_ID, c.AD_Reference_Value_ID, t.TableName FROM AD_Column c, AD_Table t WHERE c.AD_Table_ID=t.AD_Table_ID AND UPPER(t.TableName)=UPPER(v_TableDir) AND c.isIdentifier='Y' ORDER BY c.seqno ) LOOP IF v_firstColumn THEN v_firstColumn:=FALSE; ELSE v_SQL:=v_SQL || '||'' - ''||'; END IF; v_SQL:=v_SQL || AD_COLUMN_IDENTIFIER_REF_SQL(p_TableRef||'T', v_TableDir, Cur_Columns.ColumnName, Cur_Columns.AD_Reference_ID, Cur_Columns.AD_Reference_Value_ID) ; END LOOP; v_SQL:='coalesce ((SELECT ' || v_SQL || ' FROM '|| v_TableDir || ' '||p_TableRef||'T WHERE '||p_TableRef||'T.' || v_KeyName || '='|| p_TableRef||'.'|| p_ColumnName||'), '''') '; END IF; --END_PROCESS END; END IF; ---- <> RETURN v_SQL; /*EXCEPTION WHEN OTHERS THEN RETURN '**'; */ END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_column_identifier_ref_sql(p_tableref character varying, p_tablename character varying, p_columnname character varying, p_reference_id character varying, p_reference_value_id character varying); publictadfalse23416G125536378+ad_column_identifier_sql(character varying)FUNCTION CREATE FUNCTION ad_column_identifier_sql(p_tablename character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_KeyName VARCHAR(50) ; --OBTG:VARCHAR2-- v_Value VARCHAR(4000) ; --OBTG:VARCHAR2-- v_SQL VARCHAR(4000):=''; --OBTG:VARCHAR2-- v_firstColumn BOOLEAN:=TRUE; --TYPE RECORD IS REFCURSOR; Cur_Columns RECORD; Cur_KeyName RECORD; BEGIN IF p_TableName IS NULL THEN RETURN ''; END IF; FOR Cur_KeyName IN (SELECT c.ColumnName FROM AD_Column c, AD_Table t WHERE c.AD_Table_ID=t.AD_Table_ID AND UPPER(t.TableName)=UPPER(p_TableName) AND c.isKey='Y' ) LOOP v_KeyName:=Cur_KeyName.ColumnName; EXIT; END LOOP; IF v_KeyName IS NOT NULL THEN FOR Cur_Columns IN (SELECT c.ColumnName, c.AD_Reference_ID, c.AD_Reference_Value_ID, t.TableName FROM AD_Column c, AD_Table t WHERE c.AD_Table_ID=t.AD_Table_ID AND UPPER(t.TableName)=UPPER(p_TableName) AND c.isIdentifier='Y' ORDER BY c.seqno ) LOOP IF v_firstColumn THEN v_firstColumn:=FALSE; ELSE v_SQL:=v_SQL || '||'' - ''||'; END IF; v_SQL:=v_SQL || AD_COLUMN_IDENTIFIER_REF_SQL('T', p_TableName, Cur_Columns.ColumnName, Cur_Columns.AD_Reference_ID, Cur_Columns.AD_Reference_Value_ID) ; END LOOP; v_SQL:='SELECT ' || v_SQL || ' AS COLUMN_IDENTIFIER FROM (SELECT AD_LANGUAGE FROM AD_LANGUAGE WHERE AD_LANGUAGE=:c_language) L, '|| p_TableName || ' T WHERE ' || v_KeyName || '='||''':c_ID'''; ELSE v_SQL:='**No key found'; END IF; -- -- << END_PROCESS >> RETURN v_SQL; EXCEPTION WHEN OTHERS THEN RETURN '**'; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.ad_column_identifier_sql(p_tablename character varying); publictadfalse23416H125536379>ad_column_identifier_std(character varying, character varying)FUNCTIONCREATE FUNCTION ad_column_identifier_std(p_tablename character varying, p_record_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Display VARCHAR(4000) ; --OBTG:VARCHAR2-- v_Language VARCHAR(6):=''; --OBTG:VARCHAR2-- BEGIN SELECT coalesce(ad_language,'en_US') INTO v_Language FROM AD_CLIENT WHERE ad_client_id='0' ; SELECT AD_COLUMN_IDENTIFIER(p_TableName, p_Record_ID, v_Language ) INTO v_Display FROM DUAL; RETURN v_Display; EXCEPTION WHEN OTHERS THEN RETURN '**'; END ; $$ LANGUAGE plpgsql; mDROP FUNCTION public.ad_column_identifier_std(p_tablename character varying, p_record_id character varying); publictadfalse23416125595178ad_column_mod_trg()FUNCTIONCREATE FUNCTION ad_column_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Column_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Column_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.ColumnName , '.') != COALESCE(OLD.ColumnName , '.') OR COALESCE(NEW.AD_Table_ID , '.') != COALESCE(OLD.AD_Table_ID , '.') OR COALESCE(NEW.AD_Reference_ID , '.') != COALESCE(OLD.AD_Reference_ID , '.') OR COALESCE(NEW.AD_Reference_Value_ID , '.') != COALESCE(OLD.AD_Reference_Value_ID , '.') OR COALESCE(NEW.AD_Val_Rule_ID , '.') != COALESCE(OLD.AD_Val_Rule_ID , '.') OR COALESCE(NEW.FieldLength , 0) != COALESCE(OLD.FieldLength , 0) OR COALESCE(NEW.DefaultValue , '.') != COALESCE(OLD.DefaultValue , '.') OR COALESCE(NEW.IsKey , '.') != COALESCE(OLD.IsKey , '.') OR COALESCE(NEW.IsParent , '.') != COALESCE(OLD.IsParent , '.') OR COALESCE(NEW.IsMandatory , '.') != COALESCE(OLD.IsMandatory , '.') OR COALESCE(NEW.IsUpdateable , '.') != COALESCE(OLD.IsUpdateable , '.') OR COALESCE(NEW.ReadOnlyLogic , '.') != COALESCE(OLD.ReadOnlyLogic , '.') OR COALESCE(NEW.IsIdentifier , '.') != COALESCE(OLD.IsIdentifier , '.') OR COALESCE(NEW.SeqNo , 0) != COALESCE(OLD.SeqNo , 0) OR COALESCE(NEW.IsTranslated , '.') != COALESCE(OLD.IsTranslated , '.') OR COALESCE(NEW.IsEncrypted , '.') != COALESCE(OLD.IsEncrypted , '.') OR COALESCE(NEW.Callout , '.') != COALESCE(OLD.Callout , '.') OR COALESCE(NEW.VFormat , '.') != COALESCE(OLD.VFormat , '.') OR COALESCE(NEW.ValueMin , '.') != COALESCE(OLD.ValueMin , '.') OR COALESCE(NEW.ValueMax , '.') != COALESCE(OLD.ValueMax , '.') OR COALESCE(NEW.IsSelectionColumn , '.') != COALESCE(OLD.IsSelectionColumn , '.') OR COALESCE(NEW.AD_Element_ID , '.') != COALESCE(OLD.AD_Element_ID , '.') OR COALESCE(NEW.AD_Process_ID , '.') != COALESCE(OLD.AD_Process_ID , '.') OR COALESCE(NEW.IsSessionAttr , '.') != COALESCE(OLD.IsSessionAttr , '.') OR COALESCE(NEW.IsSecondaryKey , '.') != COALESCE(OLD.IsSecondaryKey , '.') OR COALESCE(NEW.IsDesencryptable , '.') != COALESCE(OLD.IsDesencryptable , '.') OR COALESCE(NEW.AD_Callout_ID , '.') != COALESCE(OLD.AD_Callout_ID , '.') OR COALESCE(NEW.Developmentstatus , '.') != COALESCE(OLD.Developmentstatus , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR COALESCE(NEW.Position , 0) != COALESCE(OLD.Position , 0) OR COALESCE(NEW.IsTransient , '.') != COALESCE(OLD.IsTransient , '.') OR COALESCE(NEW.isTransientCondition , '.') != COALESCE(OLD.isTransientCondition , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_column_mod_trg(); publictadfalse23416125595181ad_column_trg()FUNCTION5 CREATE FUNCTION ad_column_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Column_Trg.sql,v 1.6 2002/10/21 04:49:46 jjanke Exp $ *** * Title: Column After Update * Description: * Syncronize Name, .. with Field, if centrally maintained ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; /** * Sync Names * - Buttons are updated directly */ IF TG_OP = 'UPDATE' THEN IF((COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) AND NEW.AD_Reference_ID <> '28') THEN UPDATE AD_Field SET Name=new.Name, Description=new.Description, Help=new.Help -- Updated=SysDate WHERE AD_Column_ID=new.AD_Column_ID AND IsCentrallyMaintained='Y'; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; &DROP FUNCTION public.ad_column_trg(); publictadfalse23416125595183ad_column_trg2()FUNCTIONCREATE FUNCTION ad_column_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; CUR_Clients RECORD; v_TableName VARCHAR(40); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_Aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT count(*) INTO v_Aux FROM AD_TABLE T, AD_PACKAGE M WHERE T.AD_TABLE_ID = new.AD_Table_ID AND M.AD_PACKAGE_ID = T.AD_PACKAGE_ID AND M.AD_MODULE_ID != new.AD_Module_ID AND NOT EXISTS (SELECT 1 FROM AD_MODULE_DBPREFIX P WHERE P.AD_MODULE_ID = new.AD_Module_ID AND instr(upper(new.columnname), 'EM_'||upper(P.name)||'_') = 1 AND instr(upper(new.name), 'EM_'||upper(P.name)||'_') = 1) AND NOT EXISTS( SELECT 1 FROM AD_EXCEPTIONS, ad_table t WHERE TYPE='COLUMN' AND t.AD_Table_ID = new.AD_Table_ID AND UPPER(NAME2)=UPPER(T.Tablename) AND UPPER(NAME1)=UPPER(new.Columnname)); IF v_Aux != 0 THEN RAISE EXCEPTION '%', '@ColumnDBPrefix@' ; --OBTG:-20000-- END IF; IF AD_IsJavaWord(new.Name)='Y' THEN RAISE EXCEPTION '%', '@NotAllowedColumnName@ "'||new.name||'" @ReservedJavaWord@' ; --OBTG:-20000-- END IF; /** * Create Sequence for DocumentNo and Value columns */ IF (new.ColumnName = 'DocumentNo' OR new.ColumnName = 'Value') THEN SELECT TableName INTO v_TableName FROM ad_table WHERE ad_table.ad_table_id = new.ad_table_id; FOR CUR_Clients IN ( SELECT ad_client_id FROM ad_client WHERE NOT EXISTS (SELECT 1 FROM ad_sequence WHERE name = 'DocumentNo_' || v_tablename) AND ad_client_id <> '0' ) LOOP SELECT * INTO v_NextNo FROM Ad_Sequence_Next('AD_Sequence', CUR_Clients.ad_client_id) ; INSERT INTO AD_Sequence ( AD_Sequence_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, VFormat, IsAutoSequence, IncrementNo, StartNo, CurrentNext, CurrentNextSys, IsTableID, Prefix, Suffix, StartNewYear ) VALUES ( v_NextNo, CUR_Clients.ad_client_id, '0', 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'DocumentNo_' || v_TableName, 'DocumentNo/Value for Table ' || v_TableName, NULL, 'Y', 1, 10000000, 10000000, 10000000, 'N', NULL, NULL, 'N' ); END LOOP; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_column_trg2(); publictadfalse23416125569213+ad_create_audit_triggers(character varying)FUNCTION CREATE FUNCTION ad_create_audit_triggers(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ code TEXT ; cur_triggers RECORD; cur_tables RECORD; cur_cols RECORD; triggerName VARCHAR(30); recordIdName VARCHAR(30); datatype VARCHAR(30); clientinfo NUMERIC; deleted NUMERIC :=0; created NUMERIC :=0; v_message VARCHAR(500); v_isObps NUMERIC; BEGIN select count(*) into v_isObps from ad_system where Instance_key is not null and activation_key is not null; if v_isObps = 0 then RAISE EXCEPTION '%', '@OBPSNeededForAudit@' ; --OBTG:-20000-- end if; for cur_triggers in (select * from user_triggers where trigger_name like 'au_%') loop execute 'DROP TRIGGER '||cur_triggers.trigger_name||' ON '||cur_triggers.table_name; execute 'DROP FUNCTION '||cur_triggers.trigger_name||'()'; raise notice 'deleting %', cur_triggers.trigger_name; deleted := deleted + 1; end loop; for cur_tables in (select * from ad_table where isfullyaudited = 'Y' AND ISVIEW='N' order by tablename) loop triggerName := 'AU_'||SUBSTR(cur_tables.tablename,1,23)||'_TRG'; raise notice '%', triggerName; select count(*) into clientinfo from dual where exists (select 1 from ad_column where ad_table_id = cur_tables.ad_table_id and lower(columnname)='ad_client_id') and exists (select 1 from ad_column where ad_table_id = cur_tables.ad_table_id and lower(columnname)='ad_org_id'); select columnname into recordIdName from ad_column where ad_table_id = cur_tables.ad_table_id and iskey='Y'; code := 'create or replace FUNCTION '||triggerName||'() RETURNS trigger AS $BODY$ DECLARE V_USER_ID VARCHAR(32); V_PROCESS_TYPE VARCHAR(60); V_PROCESS_ID VARCHAR(32); V_RECORD_ID VARCHAR(32); V_RECORD_REV NUMERIC; V_ACTION CHAR(1); V_NEW_CHAR VARCHAR(4000) := NULL; V_OLD_CHAR VARCHAR(4000) := NULL; V_NEW_NCHAR VARCHAR(2000) := NULL; V_OLD_NCHAR VARCHAR(2000) := NULL; V_OLD_NUMBER NUMERIC := NULL; V_NEW_NUMBER NUMERIC := NULL; V_OLD_DATE TIMESTAMP := NULL; V_NEW_DATE TIMESTAMP := NULL; V_TIME TIMESTAMP; V_ORG VARCHAR(32); V_CLIENT VARCHAR(32); V_CHANGE BOOLEAN; V_ISAUDITED CHAR(1); BEGIN '; if (cur_tables.ad_table_id != '100') then code := code || ' SELECT ISFULLYAUDITED INTO V_ISAUDITED FROM AD_TABLE WHERE AD_TABLE_ID = '''||cur_tables.ad_table_id||'''; IF V_ISAUDITED = ''N'' THEN IF TG_OP = ''DELETE'' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; '; end if; code := code || ' BEGIN SELECT AD_USER_ID, PROCESSTYPE, PROCESSID INTO V_USER_ID, V_PROCESS_TYPE, V_PROCESS_ID FROM AD_CONTEXT_INFO; EXCEPTION WHEN OTHERS THEN NULL; END; V_TIME := TO_DATE(NOW()); IF TG_OP = ''UPDATE'' THEN V_RECORD_ID := new.'||recordIdName||'; V_ACTION := ''U'';'; if (clientinfo!=0) then code := code ||' V_CLIENT := new.AD_CLIENT_ID; V_ORG := new.AD_ORG_ID;'; end if; code := code ||' ELSIF TG_OP = ''INSERT'' THEN V_RECORD_ID := new.'||recordIdName||'; V_ACTION := ''I'';'; if (clientinfo!=0) then code := code ||' V_CLIENT := new.AD_CLIENT_ID; V_ORG := new.AD_ORG_ID;'; end if; code := code ||' ELSE V_RECORD_ID := old.'||recordIdName||'; V_ACTION := ''D'';'; if (clientinfo!=0) then code := code ||' V_CLIENT := old.AD_CLIENT_ID; V_ORG := old.AD_ORG_ID;'; end if; code := code ||' END IF; SELECT COALESCE(MAX(RECORD_REVISION),0)+1 INTO V_RECORD_REV FROM AD_AUDIT_TRAIL WHERE AD_TABLE_ID='''|| cur_tables.ad_table_id||''' AND RECORD_ID=V_RECORD_ID; '; for cur_cols in (select * from user_tab_columns u, aD_column c where table_name = upper(cur_tables.tablename) AND c.ad_table_id = cur_tables.ad_table_id and upper(c.columnname) = u.column_name AND u.data_type != 'BYTEA' and upper(c.columnname) not in ('CREATED','CREATEDBY','UPDATED', 'UPDATEDBY') order by c.position) loop code := code || ' V_Change := false;'; if (cur_cols.data_type in ('VARCHAR', 'BPCHAR', 'TEXT')) then datatype := 'CHAR'; code := code || ' IF TG_OP = ''UPDATE'' THEN V_CHANGE = (COALESCE(new.'||cur_cols.COLUMN_NAME||',''.'') != COALESCE(old.'||cur_cols.COLUMN_NAME||',''.'') OR (new.'||cur_cols.COLUMN_NAME||' IS NULL AND old.'||cur_cols.COLUMN_NAME||'=''.'') OR (old.'||cur_cols.COLUMN_NAME||' IS NULL AND new.'||cur_cols.COLUMN_NAME||'=''.'') ); END IF;'; elsif (cur_cols.data_type in ('TIMESTAMP')) then datatype := 'DATE'; code := code || ' IF TG_OP = ''UPDATE'' THEN V_CHANGE = COALESCE(new.'||cur_cols.COLUMN_NAME||', now()) != COALESCE(old.'||cur_cols.COLUMN_NAME||', now()); END IF;'; else datatype := 'NUMBER'; code := code || ' IF TG_OP = ''UPDATE'' THEN V_CHANGE = COALESCE(new.'||cur_cols.COLUMN_NAME||', -1) != COALESCE(old.'||cur_cols.COLUMN_NAME||', -1); END IF; '; end if; code := code || ' V_CHANGE := V_CHANGE OR (TG_OP = ''DELETE'') OR (TG_OP = ''INSERT''); IF (V_CHANGE) THEN IF (TG_OP in (''UPDATE'', ''INSERT'')) THEN V_NEW_'||datatype||' := new.'||cur_cols.COLUMN_NAME||'; END IF; IF (TG_OP in (''UPDATE'', ''DELETE'')) THEN V_OLD_'||datatype||' := old.'||cur_cols.COLUMN_NAME||'; END IF; INSERT INTO AD_AUDIT_TRAIL (AD_AUDIT_TRAIL_ID, AD_USER_ID, AD_TABLE_ID, AD_COLUMN_ID, PROCESSTYPE, PROCESS_ID, RECORD_ID, RECORD_REVISION, ACTION, EVENT_TIME, OLD_'||datatype||', NEW_'||datatype||', AD_CLIENT_ID, AD_ORG_ID) VALUES (GET_UUID(), V_USER_ID, '''|| cur_tables.ad_table_id||''', '''||cur_cols.ad_column_id||''', v_process_type, v_process_id, v_record_id, v_record_rev, v_action, v_time, v_old_'||datatype||', v_new_'||datatype||', V_CLIENT, V_ORG); END IF; '; end loop; code := code || 'IF TG_OP = ''DELETE'' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $BODY$ LANGUAGE ''plpgsql'' VOLATILE'; EXECUTE(code); code := 'CREATE TRIGGER '||triggerName||' BEFORE INSERT OR UPDATE OR DELETE ON '||cur_cols.table_name||' FOR EACH ROW EXECUTE PROCEDURE '||triggerName||'()'; execute(code); created := created + 1; end loop; v_Message := '@Deleted@: '||deleted||' @Created@: '||created; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; EXCEPTION WHEN OTHERS THEN v_Message:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_Message ; IF (p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_Message) ; END IF; RETURN; END ; $_$ LANGUAGE plpgsql; QDROP FUNCTION public.ad_create_audit_triggers(p_pinstance_id character varying); publictadfalse23416125595186ad_dataset_column_mod_trg()FUNCTIONa CREATE FUNCTION ad_dataset_column_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Dataset_Column_ID; cuerrentModuleID := new.AD_Dataset_Table_ID; ELSE cuerrentID := old.AD_Dataset_Column_ID; cuerrentModuleID := old.AD_Dataset_Table_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_DATASET T, AD_DATASET_TABLE T1 WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T1.AD_DATASET_ID = T.AD_DATASET_ID AND T1.AD_DATASET_TABLE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Dataset_Table_ID , '.') != COALESCE(OLD.AD_Dataset_Table_ID , '.') OR COALESCE(NEW.AD_Column_ID , '.') != COALESCE(OLD.AD_Column_ID , '.') OR COALESCE(NEW.IsExcluded , '.') != COALESCE(OLD.IsExcluded , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.ad_dataset_column_mod_trg(); publictadfalse23416125595188ad_dataset_mod_trg()FUNCTION' CREATE FUNCTION ad_dataset_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Dataset_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Dataset_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Value , '.') != COALESCE(OLD.Value , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR COALESCE(NEW.Export , '.') != COALESCE(OLD.Export , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_dataset_mod_trg(); publictadfalse23416125595190ad_dataset_table_mod_trg()FUNCTION CREATE FUNCTION ad_dataset_table_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Dataset_Table_ID; cuerrentModuleID := new.AD_Dataset_ID; ELSE cuerrentID := old.AD_Dataset_Table_ID; cuerrentModuleID := old.AD_Dataset_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_DATASET T WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_DATASET_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Dataset_ID , '.') != COALESCE(OLD.AD_Dataset_ID , '.') OR COALESCE(NEW.AD_Table_ID , '.') != COALESCE(OLD.AD_Table_ID , '.') OR COALESCE(NEW.IncludeAllColumns , '.') != COALESCE(OLD.IncludeAllColumns , '.') OR COALESCE(NEW.WhereClause , '.') != COALESCE(OLD.WhereClause , '.') OR COALESCE(NEW.excludeAuditInfo , '.') != COALESCE(OLD.excludeAuditInfo , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 1DROP FUNCTION public.ad_dataset_table_mod_trg(); publictadfalse23416I125536388ad_db_modified(character)FUNCTION%CREATE FUNCTION ad_db_modified(p_update character) RETURNS character AS $$ /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ declare proc_name varchar(50000); c numeric; v_md5 varchar(32); i record; j record; aux varchar(32); aux_char char[]; aux_text text[]; v_Modified char(1); begin v_md5 = ''; --Checksum for PL functions for i in ( select upper(proname) as proname, p.proname as realname, pronargs, oidvectortypes(p.proargtypes) from pg_proc p, pg_namespace n where pronamespace = n.oid and n.nspname=current_schema() and p.oid not in (select tgfoid from pg_trigger) and p.proname not in ('temp_findinarray', 'ad_db_modified', 'dateformat') order by 1,2,3,4) loop --note that for overloaded functions more than one line will be obtained --name v_md5 := md5(v_md5||i.proname); --body select md5(p.prosrc) into aux from pg_proc p where p.proname = i.realname and p.pronargs = i.pronargs and p.proargtypes = i.proargtypes; v_md5 := md5(v_md5||aux); --parameters SELECT pg_proc.proargmodes, pg_proc.proargnames into aux_char, aux_text FROM pg_catalog.pg_proc JOIN pg_catalog.pg_namespace ON (pg_proc.pronamespace = pg_namespace.oid) WHERE pg_proc.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype AND (pg_proc.proargtypes[0] IS NULL OR pg_proc.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype) AND NOT pg_proc.proisagg AND pg_catalog.pg_function_is_visible(pg_proc.oid) AND pg_proc.proname = i.realname and pg_proc.pronargs = i.pronargs and pg_proc.proargtypes = i.proargtypes and (pg_proc.proargmodes is not null or pg_proc.proargnames is not null) ORDER BY 1,2; c := array_lower(aux_char, 1); while (c <= array_upper(aux_char, 1)) loop v_md5 := md5(v_md5||coalesce(aux_char[c],'.')||coalesce(aux_text[c],'.')); c := c +1; end loop; end loop; --triggers for i in ( SELECT md5(upper(trg.tgname)||upper(tbl.relname)||( CASE trg.tgtype & cast(3 as int2) WHEN 0 THEN 'AFTER EACH STATEMENT' WHEN 1 THEN 'AFTER EACH ROW' WHEN 2 THEN 'BEFORE EACH STATEMENT' WHEN 3 THEN 'BEFORE EACH ROW' END) || ( CASE trg.tgtype & cast(28 as int2) WHEN 16 THEN 'UPDATE' WHEN 8 THEN 'DELETE' WHEN 4 THEN 'INSERT' WHEN 20 THEN 'INSERT, UPDATE' WHEN 28 THEN 'INSERT, UPDATE, DELETE' WHEN 24 THEN 'UPDATE, DELETE' WHEN 12 THEN 'INSERT, DELETE' END)||p.prosrc) AS trg_md5 FROM pg_trigger trg, pg_class tbl, pg_proc p WHERE trg.tgrelid = tbl.oid AND trg.tgfoid = p.oid AND tbl.relname !~ '^pg_' AND trg.tgname !~ '^RI' AND UPPER(trg.tgname) NOT LIKE 'AU_%' order by trg.tgname) loop v_md5 := md5(v_md5||i.trg_md5); end loop; --views for i in (SELECT md5(upper(viewname)||pg_get_viewdef(viewname, true)) as v FROM pg_views WHERE SCHEMANAME = CURRENT_SCHEMA() AND viewname !~ '^pg_' order by upper(viewname)) loop v_md5 := md5(v_md5||i.v); end loop; --tables for i in (SELECT UPPER(TABLENAME) as tablename, t.tablename as realname FROM PG_TABLES t WHERE SCHEMANAME = CURRENT_SCHEMA() ORDER BY 1) loop v_md5 := md5(v_md5||i.tablename); --pk for j in (SELECT md5(upper(PG_CONSTRAINT.CONNAME)||upper(pg_attribute.attname::text)) as pk FROM pg_attribute, pg_constraint JOIN PG_CLASS ON PG_CLASS.OID = PG_CONSTRAINT.CONRELID WHERE pg_constraint.conrelid = pg_class.oid AND pg_attribute.attrelid = pg_constraint.conrelid AND (pg_attribute.attnum = ANY (pg_constraint.conkey)) and PG_CONSTRAINT.CONTYPE::TEXT = 'p' AND PG_CLASS.RELNAME = i.realname ORDER BY PG_CONSTRAINT.CONNAME, pg_attribute.attnum::integer) loop v_md5 := md5(v_md5||j.pk); end loop; --columns for j in (SELECT MD5(UPPER(PG_ATTRIBUTE.ATTNAME::TEXT)|| COALESCE(UPPER(PG_TYPE.TYPNAME::TEXT),'.')|| COALESCE(TO_CHAR(CASE PG_TYPE.TYPNAME WHEN 'varchar'::name THEN pg_attribute.atttypmod - 4 WHEN 'bpchar'::name THEN pg_attribute.atttypmod - 4 ELSE NULL::integer END),'.')|| COALESCE(TO_CHAR(CASE PG_TYPE.TYPNAME WHEN 'bytea'::name THEN 4000 WHEN 'text'::name THEN 4000 WHEN 'oid'::name THEN 4000 ELSE CASE PG_ATTRIBUTE.ATTLEN WHEN -1 THEN PG_ATTRIBUTE.ATTTYPMOD - 4 ELSE PG_ATTRIBUTE.ATTLEN END END),'.') || COALESCE(TO_CHAR( CASE pg_type.typname WHEN 'bytea'::name THEN 4000 WHEN 'text'::name THEN 4000 WHEN 'oid'::name THEN 4000 ELSE CASE atttypmod WHEN -1 THEN 0 ELSE 10 END END),'.')|| (not pg_attribute.attnotnull)::TEXT|| COALESCE( (CASE pg_attribute.atthasdef WHEN true THEN ( SELECT pg_attrdef.adsrc FROM pg_attrdef WHERE pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = pg_attribute.attnum) ELSE NULL::text END),'.')) as cl FROM pg_class, pg_namespace, pg_attribute, pg_type WHERE pg_attribute.attrelid = pg_class.oid AND pg_attribute.atttypid = pg_type.oid AND pg_class.relnamespace = pg_namespace.oid AND pg_namespace.nspname = current_schema() AND pg_attribute.attnum > 0 AND pg_class.relname = i.realname ORDER BY pg_attribute.attnum) loop v_md5 := md5(v_md5||j.cl); end loop; --checks for j in (SELECT md5(upper(pg_constraint.conname::text)|| pg_constraint.consrc) as ck FROM pg_constraint JOIN pg_class ON pg_class.oid = pg_constraint.conrelid WHERE pg_constraint.contype::text = 'c' and pg_class.relname = i.realname ORDER BY upper(pg_constraint.conname::text)) loop v_md5 := md5(v_md5||j.ck); end loop; --fk for j in (SELECT md5(upper(pc.conname::text)|| upper(fk_table.relname::text)|| upper(pc.confdeltype::text)|| upper(pa1.attname)|| upper(pa2.attname)) as ck FROM pg_class pc1, pg_attribute pa1, pg_class pc2, pg_attribute pa2, pg_constraint pc JOIN pg_class ON pg_class.oid = pc.conrelid LEFT JOIN pg_class fk_table ON fk_table.oid = pc.confrelid WHERE pc.contype::text = 'f' and pg_class.relname = i.realname AND pc.conrelid= pc1.oid and upper(pc.conname) = upper(pc.conname) and pa1.attrelid = pc1.oid and pa1.attnum = ANY(pc.conkey) and pc.confrelid = pc2.oid and pa2.attrelid = pc2.oid and pa2.attnum = ANY(pc.confkey) ORDER BY upper(pc.conname::text), upper(pa1.attname), upper(pa2.attname)) loop v_md5 := md5(v_md5||j.ck); end loop; --indexes for j in ( SELECT md5(upper(pg_attribute.attname::text)||UPPER(PG_CLASS.RELNAME)||(CASE PG_INDEX.indisunique WHEN true THEN 'UNIQUE' ELSE 'NONUNIQUE' END)) as ck FROM PG_INDEX, PG_CLASS, PG_CLASS PG_CLASS1, PG_NAMESPACE, pg_attribute WHERE PG_INDEX.indexrelid = PG_CLASS.OID AND PG_INDEX.indrelid = PG_CLASS1.OID AND PG_CLASS.RELNAMESPACE = PG_NAMESPACE.OID AND PG_CLASS1.RELNAMESPACE = PG_NAMESPACE.OID AND PG_NAMESPACE.NSPNAME = CURRENT_SCHEMA() AND PG_INDEX.INDISPRIMARY ='f' AND pg_attribute.attrelid = pg_index.indrelid AND pg_attribute.attnum = ANY (indkey) AND PG_CLASS1.RELNAME = i.realname ORDER BY UPPER(PG_CLASS.RELNAME), upper(pg_attribute.attname::text)) loop v_md5 := md5(v_md5||j.ck); end loop; end loop; select db_checksum into aux from ad_system_info; if ((aux is null) or (aux = v_md5)) then v_Modified = 'N'; else v_Modified = 'Y'; end if; if p_Update = 'Y' then update ad_system_info set LAST_DBUPDATE = NOW(), DB_CHECKSUM = v_md5; end if; return v_Modified; EXCEPTION WHEN OTHERS THEN RETURN 'N'; end;$$ LANGUAGE plpgsql; 9DROP FUNCTION public.ad_db_modified(p_update character); publictadfalse23416J125536390/ad_dba_user_const_searchcond(character varying)FUNCTIONCREATE FUNCTION ad_dba_user_const_searchcond(p_constraintname character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_varchar2 VARCHAR(32767) ; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; cur_searchCond RECORD; BEGIN FOR cur_searchCond IN (SELECT SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME=p_constraintName ) LOOP v_varchar2 := cur_searchCond.SEARCH_CONDITION; v_varchar2 := TRIM(SUBSTR(v_varchar2, 1, 4000)) ; EXIT; END LOOP; RETURN(v_varchar2) ; END ; $$ LANGUAGE plpgsql; WDROP FUNCTION public.ad_dba_user_const_searchcond(p_constraintname character varying); publictadfalse23416K1255363916ad_delete_client(character varying, character varying)FUNCTIONCREATE FUNCTION ad_delete_client(p_pinstance_id character varying, p_ad_client_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Delete client * Description: * Delete data (for every table in TAD schema) from the client selected ************************************************************************/ -- Logistice v_ResultStr VARCHAR(4000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(4000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AD_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- p_NewClientValue VARCHAR(80) ; --OBTG:VARCHAR2-- -- Cur_Triggers RECORD; Cur_Constraints RECORD; Cur_ConstraintsEnable RECORD; Cur_Tables RECORD; Cur_Script RECORD; -- v_seqNo NUMERIC:=0; v_NextNo VARCHAR(32):='1000000'; --OBTG:VARCHAR2-- v_prev_const NUMERIC:=0; v_prev_trig NUMERIC:=0; v_post_const NUMERIC:=0; v_post_trig NUMERIC:=0; v_count NUMERIC:=0; v_ID_Column VARCHAR(30) ; --OBTG:VARCHAR2-- v_minID VARCHAR(32) ; --OBTG:varchar2-- v_maxID VARCHAR(32) ; --OBTG:varchar2-- v_nextID VARCHAR(32) ; --OBTG:varchar2-- v_strTemp VARCHAR(4000):=''; --OBTG:VARCHAR2-- v_strSql VARCHAR(4000):=''; --OBTG:VARCHAR2-- v_tableActual VARCHAR(30) ; --OBTG:VARCHAR2-- BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT p.ParameterName, p.P_String, p.P_Number FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP IF(Cur_Parameter.ParameterName='AD_Client_ID') THEN v_AD_Client_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Client_ID=' || v_AD_Client_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter ELSE v_AD_Client_ID:=p_AD_Client_ID; --v_Message := '@ADPinstanceIsNull@'; --GOTO END_PROCESS; END IF; BEGIN --BODY IF (v_AD_Client_ID = '0') THEN RAISE EXCEPTION '%', '@DeletingSystemClient@' ; --OBTG:-20000-- END IF; --Count ENABLED constraints and triggers before the process select count(*) into v_prev_const from user_constraints where status='ENABLED'; select count(*) into v_prev_trig from user_triggers where status='ENABLED'; DELETE FROM AD_SCRIPT_SQL; v_ResultStr := 'Disabling triggers'; v_seqNo := ad_script_disable_triggers(v_seqNo); v_ResultStr:='Disabling constraints'; v_seqNo := ad_script_disable_constraints(v_seqNo); SELECT * INTO v_NextNo FROM AD_Sequence_Next('AD_Client', '1000000') ; FOR Cur_Tables IN (SELECT AD_Table_ID, UPPER(TableName) AS NAME FROM AD_Table WHERE IsView='N' AND UPPER(TableName)<>'AD_CLIENT' AND EXISTS (SELECT 1 FROM AD_Column WHERE AD_Table_ID=AD_Table.AD_Table_ID AND UPPER(ColumnName)='AD_CLIENT_ID' ) ORDER BY TableName) LOOP v_seqNo:=v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'DELETE FROM '||Cur_Tables.NAME||' WHERE AD_Client_ID = '''||v_AD_Client_ID||''''); END LOOP; v_seqNo:=v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'DELETE FROM AD_Client WHERE AD_Client_ID = '''||v_AD_Client_ID||'''') ; -- Deal with users that have defaults set to the deleted client v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'UPDATE AD_USER SET DEFAULT_AD_CLIENT_ID=null where DEFAULT_AD_CLIENT_ID NOT IN (SELECT AD_Client_ID from AD_Client)'); v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'UPDATE AD_USER SET DEFAULT_AD_ORG_ID=null where DEFAULT_AD_ORG_ID NOT IN (SELECT AD_Org_ID from AD_Org)'); v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'UPDATE AD_USER SET DEFAULT_AD_ROLE_ID=null where DEFAULT_AD_ROLE_ID NOT IN (SELECT AD_Role_ID from AD_Role)'); v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'UPDATE AD_USER SET DEFAULT_M_WAREHOUSE_ID=null where DEFAULT_M_WAREHOUSE_ID NOT IN (SELECT M_Warehouse_ID from M_Warehouse)'); -- make sure Openbravo user can logon v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'UPDATE AD_USER SET DEFAULT_AD_CLIENT_ID=''0'', DEFAULT_AD_ORG_ID=''0'', DEFAULT_AD_ROLE_ID=''0'' where AD_USER_ID=''100'' AND DEFAULT_AD_CLIENT_ID is null and DEFAULT_AD_ORG_ID is null and DEFAULT_AD_ROLE_ID is null'); v_ResultStr:='Enabling constraints'; v_seqNo := ad_script_enable_constraints(v_seqNo); v_ResultStr := 'Enabling triggers'; v_seqNo := ad_script_enable_triggers(v_seqNo); -- Update sequence values v_ResultStr:='Updating sequences'; v_ResultStr:='Executing'; v_ResultStr := ad_script_execute(v_ResultStr); select count(*) into v_count from user_constraints where status!='ENABLED'; if v_count>0 then v_Result:=0; v_Message:=substr(v_Message||'

@ProcessLeft@ '||v_count||' @DisabledConstraints@',1,2000); else select count(*) into v_post_const from user_constraints where status='ENABLED'; if (v_prev_const-v_post_const)>0 then v_Result:=0; v_Message:=substr(v_Message||'

@ProcessLeft@ '||(v_prev_const-v_post_const)||' @DisabledConstraints@',1,2000); end if; end if; select count(*) into v_count from user_triggers where status!='ENABLED'; if v_count>0 then v_Result:=0; v_Message:=substr(v_Message||'

@ProcessLeft@ '||v_count||' @DisabledTriggers@',1,2000); else select count(*) into v_post_trig from user_triggers where status='ENABLED'; if (v_prev_trig-v_post_trig)>0 then v_Result:=0; v_Message:=substr(v_Message||'

@ProcessLeft@ '||(v_prev_trig-v_post_trig)||' @DisabledTriggers@',1,2000); end if; end if; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance if (coalesce(length(v_Message),0)>=1997) then v_Message:=substr(v_Message,1,1997)||'...'; end if; RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','Finished ' || v_Message ; END IF; -- Commented by cromero 19102006 -- COMMIT; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; -- RETURN; END ; $$ LANGUAGE plpgsql; kDROP FUNCTION public.ad_delete_client(p_pinstance_id character varying, p_ad_client_id character varying); publictadfalse23416L125536393$ad_delete_client0(character varying)FUNCTIONCREATE FUNCTION ad_delete_client0(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Delete client0 * Description: * Delete data (for every table in TAD schema) from the instance selected ************************************************************************/ BEGIN PERFORM AD_DELETE_CLIENT(p_PInstance_ID, NULL); END ; $$ LANGUAGE plpgsql; JDROP FUNCTION public.ad_delete_client0(p_pinstance_id character varying); publictadfalse23416M125536394Had_display_list(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_display_list(p_referencevalue_id character varying, p_value character varying, p_ad_language character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. * Title: Get RefList Name translated ************************************************************************/ v_Display VARCHAR(120) ; --OBTG:NVARCHAR2-- BEGIN IF(p_AD_Language='en_US') THEN SELECT RL.NAME INTO v_Display FROM AD_REF_LIST RL WHERE RL.AD_REFERENCE_ID=p_ReferenceValue_ID AND RL.VALUE=p_Value; ELSE SELECT RLT.NAME INTO v_Display FROM AD_REF_LIST RL, AD_REF_LIST_TRL RLT WHERE RL.AD_REF_LIST_ID=RLT.AD_REF_LIST_ID AND RLT.AD_LANGUAGE=p_AD_Language AND RL.AD_REFERENCE_ID=p_ReferenceValue_ID AND RL.VALUE=p_Value; END IF; RETURN v_Display; EXCEPTION WHEN OTHERS THEN RETURN 'Not found!!!'; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_display_list(p_referencevalue_id character varying, p_value character varying, p_ad_language character varying); publictadfalse23416d.00{FUNCTION ad_display_list(p_referencevalue_id character varying, p_value character varying, p_ad_language character varying)COMMENTCOMMENT ON FUNCTION ad_display_list(p_referencevalue_id character varying, p_value character varying, p_ad_language character varying) IS '--OBTG:AD_DISPLAY_LISTfunc=NVARCHAR,p_value=NVARCHAR--'; publictadfalse77125595192ad_element_mod_trg()FUNCTIONCREATE FUNCTION ad_element_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Element_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Element_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.ColumnName , '.') != COALESCE(OLD.ColumnName , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.PrintName , '.') != COALESCE(OLD.PrintName , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.PO_Name , '.') != COALESCE(OLD.PO_Name , '.') OR COALESCE(NEW.PO_PrintName , '.') != COALESCE(OLD.PO_PrintName , '.') OR COALESCE(NEW.PO_Description , '.') != COALESCE(OLD.PO_Description , '.') OR COALESCE(NEW.PO_Help , '.') != COALESCE(OLD.PO_Help , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_element_mod_trg(); publictadfalse23416125595194ad_element_trg()FUNCTION_CREATE FUNCTION ad_element_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert AD_Element Trigger * for Translation * Update AD_Element Trigger * synchronize Column * synchronize PrintInfo * reset Translation flag ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Element Trigger IF TG_OP = 'INSERT' THEN INSERT INTO AD_Element_Trl ( AD_Element_Trl_ID, AD_Element_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, PrintName, Description, Help, PO_Name, PO_PrintName, PO_Description, PO_Help, IsTranslated ) SELECT get_uuid(), new.AD_Element_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.PrintName, new.Description, new.Help, new.PO_Name, new.PO_PrintName, new.PO_Description, new.PO_Help, 'N' FROM AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' AND M.AD_Module_ID = new.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; END IF; -- INSERTING -- Update AD_Element Trigger IF TG_OP = 'UPDATE' THEN -- synchronize Column UPDATE AD_Column SET Description=new.Description, Help=new.Help WHERE AD_Element_ID=new.AD_Element_ID AND exists (select 1 from ad_module m, ad_module m1 where m.ad_module_id = ad_column.ad_module_id and m1.ad_module_id = New.AD_Module_id and m.ad_language = m1.ad_language); --Translations for columns in other languages must be managed in ad_element_trl trg -- reset Translation flag IF(COALESCE(old.Name,'.') <> COALESCE(new.Name,'.') OR COALESCE(old.PO_Name,'.') <> COALESCE(new.PO_Name,'.') OR COALESCE(old.PrintName,'.') <> COALESCE(new.PrintName,'.') OR COALESCE(old.PO_PrintName,'.') <> COALESCE(new.PO_PrintName,'.') OR COALESCE(old.Description,'.') <> COALESCE(new.Description,'.') OR COALESCE(old.PO_Description,'.') <> COALESCE(new.PO_Description,'.') OR COALESCE(old.Help,'.') <> COALESCE(new.Help,'.') OR COALESCE(old.PO_Help,'.') <> COALESCE(new.PO_Help,'.')) THEN UPDATE AD_Element_Trl SET IsTranslated='N' WHERE AD_Element_ID=new.AD_Element_ID; END IF; -- synchronize Process Fields UPDATE AD_Process_Para SET Name=new.Name, Description=new.Description, Help=new.Help, ColumnName=new.ColumnName WHERE UPPER(ColumnName)=UPPER(new.ColumnName) AND IsCentrallyMaintained='Y' AND exists (select 1 from ad_module m, ad_module m1, ad_process p where m.ad_module_id = p.ad_module_id and p.ad_process_id = AD_Process_Para.ad_process_id and m1.ad_module_id = New.AD_Module_id and m.ad_language = m1.ad_language); UPDATE AD_Process_Para_trl SET Name=new.Name, Description=new.Description, Help=new.Help, isTranslated = 'N' WHERE exists (select 1 from ad_module m, ad_module m1, ad_process p, AD_Process_Para where m.ad_module_id = p.ad_module_id and p.ad_process_id = AD_Process_Para.ad_process_id and AD_Process_Para.AD_Process_Para_id = AD_Process_Para_trl.AD_Process_Para_ID and AD_Process_Para.IsCentrallyMaintained='Y' and UPPER(ColumnName)=UPPER(new.ColumnName) and m1.ad_module_id = New.AD_Module_id and m.ad_language != m1.ad_language and AD_Process_Para_trl.ad_language = m.ad_language); END IF; -- UPDATING IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_element_trg(); publictadfalse23416125595196ad_element_trl_trg()FUNCTIONsCREATE FUNCTION ad_element_trl_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Element_Trl_Trg.sql,v 1.4 2002/11/08 05:42:01 jjanke Exp $ *** * Title: AD_Element_Trl update trigger * Description: * Synchronize name,... with Field if centrally maintained ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF ( COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') OR COALESCE (OLD.Description, '.') <> COALESCE (NEW.Description, '.') OR COALESCE (OLD.HELP, '.') <> COALESCE (NEW.HELP, '.') OR COALESCE (OLD.PrintName, '.') <> COALESCE (NEW.PrintName, '.') OR COALESCE (OLD.IsTranslated, '.') <> COALESCE (NEW.IsTranslated, '.') ) THEN -- Field UPDATE AD_Field_Trl SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, IsTranslated = NEW.IsTranslated WHERE AD_Language = NEW.AD_Language AND AD_Field_ID IN ( SELECT F.AD_Field_ID FROM AD_Field F, AD_Column C, AD_Module M WHERE F.AD_Column_ID = C.AD_Column_ID AND C.AD_Element_ID = NEW.AD_Element_ID AND F.IsCentrallyMaintained = 'Y' AND M.aD_Module_id = f.ad_module_id and m.AD_Language != new.AD_Language); UPDATE AD_Field SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP WHERE AD_Field_ID IN ( SELECT F.AD_Field_ID FROM AD_Field F, AD_Column C, AD_Module M WHERE F.AD_Column_ID = C.AD_Column_ID AND C.AD_Element_ID = NEW.AD_Element_ID AND F.IsCentrallyMaintained = 'Y' AND M.aD_Module_id = f.ad_module_id and m.AD_Language = new.AD_Language) AND exists (SELECT 1 from ad_module m where m.ad_module_id=ad_field.ad_module_id and m.isindevelopment='Y'); UPDATE AD_Column SET Name=new.Name, Description=new.Description, Help=new.Help WHERE AD_Element_ID=new.AD_Element_ID AND exists (select 1 from ad_module m where m.ad_module_id = ad_column.ad_module_id and m.ad_language = new.ad_language) AND exists (SELECT 1 from ad_module m where m.ad_module_id=ad_column.ad_module_id and m.isindevelopment='Y'); -- Parameter UPDATE AD_Process_Para_Trl SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, IsTranslated = NEW.IsTranslated WHERE AD_Language = NEW.AD_Language AND AD_Process_Para_ID IN ( SELECT f.AD_Process_Para_ID FROM AD_Process_Para f, AD_Process p, ad_module m WHERE f.AD_Element_ID = NEW.AD_Element_ID AND f.IsCentrallyMaintained = 'Y' and p.ad_process_id = f.ad_process_id and m.ad_module_id = p.ad_module_id and m.ad_language != NEW.AD_Language); UPDATE AD_Process_Para SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP WHERE AD_Process_Para_ID IN ( SELECT f.AD_Process_Para_ID FROM AD_Process_Para f, AD_Process p, ad_module m WHERE f.AD_Element_ID = NEW.AD_Element_ID AND f.IsCentrallyMaintained = 'Y' and p.ad_process_id = f.ad_process_id and m.ad_module_id = p.ad_module_id and m.ad_language = NEW.AD_Language) AND exists (SELECT 1 from ad_module m, ad_process p where m.ad_module_id=p.ad_module_id and p.ad_process_id = ad_process_para.ad_process_id and m.isindevelopment='Y'); END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_element_trl_trg(); publictadfalse23416N125536398ad_ep_instance_para_insert(character varying, character varying, character varying, character varying, character varying, numeric, numeric, timestamp without time zone, timestamp without time zone, character varying)FUNCTIONCREATE FUNCTION ad_ep_instance_para_insert(p_ad_ep_instance_id character varying, p_ad_ep_extension_points_id character varying, p_parametername character varying, p_p_string character varying, p_p_string_to character varying, p_p_number numeric, p_p_number_to numeric, p_p_date timestamp without time zone, p_p_date_to timestamp without time zone, p_p_text character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN INSERT INTO ad_ep_instance_para ( AD_EP_INSTANCE_PARA_ID, AD_EP_INSTANCE_ID, AD_EXTENSION_POINTS_ID, PARAMETERNAME, P_STRING, P_STRING_TO, P_NUMBER, P_NUMBER_TO, P_DATE, P_DATE_TO, P_TEXT) VALUES (get_uuid(), p_AD_EP_INSTANCE_ID, p_AD_EP_EXTENSION_POINTS_ID, p_PARAMETERNAME, p_P_STRING, p_P_STRING_TO, p_P_NUMBER, p_P_NUMBER_TO, p_P_DATE, p_P_DATE_TO, p_P_TEXT); EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%','AD_EP_INSTANCE_PARA_INSERT exception' ; RAISE EXCEPTION '%', SQLERRM; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_ep_instance_para_insert(p_ad_ep_instance_id character varying, p_ad_ep_extension_points_id character varying, p_parametername character varying, p_p_string character varying, p_p_string_to character varying, p_p_number numeric, p_p_number_to numeric, p_p_date timestamp without time zone, p_p_date_to timestamp without time zone, p_p_text character varying); publictadfalse23416e.00qFUNCTION ad_ep_instance_para_insert(p_ad_ep_instance_id character varying, p_ad_ep_extension_points_id character varying, p_parametername character varying, p_p_string character varying, p_p_string_to character varying, p_p_number numeric, p_p_number_to numeric, p_p_date timestamp without time zone, p_p_date_to timestamp without time zone, p_p_text character varying)COMMENTCOMMENT ON FUNCTION ad_ep_instance_para_insert(p_ad_ep_instance_id character varying, p_ad_ep_extension_points_id character varying, p_parametername character varying, p_p_string character varying, p_p_string_to character varying, p_p_number numeric, p_p_number_to numeric, p_p_date timestamp without time zone, p_p_date_to timestamp without time zone, p_p_text character varying) IS '--OBTG:p_parametername=NVARCHAR,p_p_string=NVARCHAR,p_p_string_to=NVARCHAR,p_p_text=NVARCHAR--'; publictadfalse78O125536399@ad_extension_point_handler(character varying, character varying)FUNCTIONZCREATE FUNCTION ad_extension_point_handler(p_ep_instance_id character varying, p_extension_point_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Sql VARCHAR(2000); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Procedures RECORD; BEGIN FOR Cur_Procedures IN ( SELECT lower(PROCEDURENAME) AS procedurename FROM ad_ep_procedures WHERE ad_extension_points_id = p_extension_point_id AND isactive = 'Y') LOOP IF (AD_GET_RDBMS() = 'ORACLE') THEN v_Sql := 'CALL ' || Cur_Procedures.procedurename || '('''||p_ep_instance_id||''')'; ELSE v_Sql := 'SELECT ' || Cur_Procedures.procedurename || '('''||p_ep_instance_id||''') FROM DUAL'; END IF; RAISE NOTICE '%', v_Sql; EXECUTE v_Sql; END LOOP; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%','AD_EXTENSION_POINT_HANDLER exception' ; RAISE EXCEPTION '%', SQLERRM; END ; $$ LANGUAGE plpgsql; }DROP FUNCTION public.ad_extension_point_handler(p_ep_instance_id character varying, p_extension_point_id character varying); publictadfalse23416125595202ad_field_mod_trg()FUNCTIONTCREATE FUNCTION ad_field_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Field_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Field_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.IsCentrallyMaintained , '.') != COALESCE(OLD.IsCentrallyMaintained , '.') OR COALESCE(NEW.AD_Tab_ID , '.') != COALESCE(OLD.AD_Tab_ID , '.') OR COALESCE(NEW.AD_Column_ID , '.') != COALESCE(OLD.AD_Column_ID , '.') OR COALESCE(NEW.AD_FieldGroup_ID , '.') != COALESCE(OLD.AD_FieldGroup_ID , '.') OR COALESCE(NEW.IsDisplayed , '.') != COALESCE(OLD.IsDisplayed , '.') OR COALESCE(NEW.DisplayLogic , '.') != COALESCE(OLD.DisplayLogic , '.') OR COALESCE(NEW.DisplayLength , 0) != COALESCE(OLD.DisplayLength , 0) OR COALESCE(NEW.IsReadOnly , '.') != COALESCE(OLD.IsReadOnly , '.') OR COALESCE(NEW.SeqNo , 0) != COALESCE(OLD.SeqNo , 0) OR COALESCE(NEW.SortNo , 0) != COALESCE(OLD.SortNo , 0) OR COALESCE(NEW.IsSameLine , '.') != COALESCE(OLD.IsSameLine , '.') OR COALESCE(NEW.IsFieldOnly , '.') != COALESCE(OLD.IsFieldOnly , '.') OR COALESCE(NEW.IsEncrypted , '.') != COALESCE(OLD.IsEncrypted , '.') OR COALESCE(NEW.ShowInRelation , '.') != COALESCE(OLD.ShowInRelation , '.') OR COALESCE(NEW.Isfirstfocusedfield , '.') != COALESCE(OLD.Isfirstfocusedfield , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; IF (NEW.IsCentrallyMaintained = 'N' AND (COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.'))) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.ad_field_mod_trg(); publictadfalse23416125595204ad_field_trg()FUNCTION CREATE FUNCTION ad_field_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert AD_Field Trigger * for Translation */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN INSERT INTO AD_Field_Trl ( AD_Field_Trl_ID, AD_Field_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsTranslated ) SELECT get_uuid(), new.AD_Field_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.Help, 'N' FROM AD_Language, ad_module m WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' and m.ad_module_id = new.ad_module_id and m.ad_language != AD_Language.AD_Language; END IF; -- Inserting -- AD_Field update trigger -- synchronize name,... with Field if not centrally maintained IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) AND NEW.IsCentrallyMaintained='N' THEN UPDATE AD_Field_Trl SET IsTranslated='N' -- Updated=SysDate WHERE AD_Field_ID=new.AD_Field_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.ad_field_trg(); publictadfalse23416125595198ad_fieldgroup_mod_trg()FUNCTION\ CREATE FUNCTION ad_fieldgroup_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_FieldGroup_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_FieldGroup_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_fieldgroup_mod_trg(); publictadfalse23416125595200ad_fieldgroup_trg()FUNCTION CREATE FUNCTION ad_fieldgroup_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert AD_Menu Trigger * for Translation */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_FieldGroup_Trl ( AD_FieldGroup_Trl_ID, AD_FieldGroup_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, IsTranslated ) SELECT get_uuid(), new.AD_FieldGroup_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, 'N' FROM AD_Language, ad_module m WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' and m.ad_module_id = new.ad_module_id and m.ad_language != AD_Language.AD_Language; END IF; IF TG_OP = 'UPDATE' THEN IF(COALESCE(OLD.Name, '.') <> COALESCE(NEW.Name, '.')) THEN UPDATE AD_FieldGroup_Trl SET IsTranslated='N' -- Updated=SysDate WHERE AD_FieldGroup_ID=new.AD_FieldGroup_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_fieldgroup_trg(); publictadfalse23416125595206ad_form_mod_trg()FUNCTIONu CREATE FUNCTION ad_form_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Form_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Form_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.AccessLevel , '.') != COALESCE(OLD.AccessLevel , '.') OR COALESCE(NEW.Classname , '.') != COALESCE(OLD.Classname , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; (DROP FUNCTION public.ad_form_mod_trg(); publictadfalse23416125595208 ad_form_trg()FUNCTION. CREATE FUNCTION ad_form_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert AD_Form Trigger * for Translation * Access */ aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN INSERT INTO AD_Form_Trl ( AD_Form_Trl_ID, AD_Form_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsTranslated ) SELECT get_uuid(), new.AD_Form_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.Help, 'N' FROM AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' and m.ad_module_id = new.ad_module_id and m.ad_language != AD_Language.AD_Language; -- Access for all INSERT INTO AD_Form_Access ( AD_Form_Access_ID, AD_Form_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite ) SELECT get_uuid(), new.AD_Form_ID, r.AD_Role_ID, r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_Role r where ismanual = 'N'; END IF; -- Inserting -- AD_Form update trigger -- synchronize name,... with Field if not centrally maintained IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.'))) THEN UPDATE AD_Form_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Form_ID=new.AD_Form_ID; END IF; END IF; select count(*) into aux from ad_module where ad_module_id = new.ad_module_id and new.classname like javapackage||'.%'; if aux = 0 then RAISE EXCEPTION '%', '@JavaClassNotInModulePackage@'; --OBTG:-20000-- end if; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; $DROP FUNCTION public.ad_form_trg(); publictadfalse23416125595210ad_form_trg2()FUNCTIONCREATE FUNCTION ad_form_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_WindowName VARCHAR(60):='ad_forms'; --OBTG:VARCHAR2-- v_ClassName AD_MODEL_OBJECT.classname%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF NOT(COALESCE(old.NAME, '.') <> COALESCE(NEW.NAME, '.') OR COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.') OR COALESCE(old.CLASSNAME, '.') <> COALESCE(NEW.CLASSNAME, '.')) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; IF (TG_OP = 'UPDATE') THEN UPDATE AD_MODEL_OBJECT_MAPPING SET ISACTIVE = new.isactive WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_FORM_ID=old.AD_FORM_ID AND ACTION='X' ); UPDATE AD_MODEL_OBJECT SET ISACTIVE = new.isactive WHERE ACTION='X' AND AD_MODEL_OBJECT.AD_FORM_ID=OLD.AD_FORM_ID; END IF; IF(TG_OP = 'DELETE') THEN DELETE FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_FORM_ID=old.AD_FORM_ID AND ACTION='X' ) ; DELETE FROM AD_MODEL_OBJECT WHERE ACTION='X' AND AD_MODEL_OBJECT.AD_FORM_ID=OLD.AD_FORM_ID; END IF; IF(TG_OP = 'INSERT') THEN v_ClassName:=new.CLASSNAME; --Calculate mapping name IF new.AD_Module_ID != '0' THEN SELECT javapackage||'.'||v_WindowName INTO v_WindowName FROM AD_MODULE WHERE AD_Module_ID = new.AD_Module_ID; END IF; v_ID := get_uuid(); INSERT INTO AD_MODEL_OBJECT ( AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_FORM_ID, CLASSNAME, ISDEFAULT ) VALUES ( v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, new.ISACTIVE, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'X', new.AD_FORM_ID, v_ClassName, 'Y' ) ; INSERT INTO AD_MODEL_OBJECT_MAPPING ( AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT ) VALUES ( get_uuid(), new.AD_CLIENT_ID, new.AD_ORG_ID, new.ISACTIVE, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, ('/' || v_WindowName || '/' || AD_MAPPING_FORMAT(NEW.NAME) || '.html'), 'Y' ) ; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.ad_form_trg2(); publictadfalse23416125536407\ad_get_doc_le_bu(character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_get_doc_le_bu(p_header_table character varying, p_document_id character varying, p_header_column_id character varying, p_type character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_org_header_id ad_org.ad_org_id%TYPE; v_isbusinessunit ad_orgtype.isbusinessunit%TYPE; v_islegalentity ad_orgtype.islegalentity%TYPE; BEGIN -- Gets the organization and the organization type of the document's header EXECUTE 'SELECT ad_org.ad_org_id, ad_orgtype.isbusinessunit, ad_orgtype.islegalentity FROM '||p_header_table||', ad_org, ad_orgtype WHERE '||p_header_table||'.'||p_header_column_id||'='||''''||p_document_id||''''||' AND ad_org.ad_orgtype_id = ad_orgtype.ad_orgtype_id AND '||p_header_table||'.ad_org_id=ad_org.ad_org_id' INTO v_org_header_id, v_isbusinessunit, v_islegalentity; -- Gets recursively the organization parent until finding a Business Unit or a Legal Entity IF (p_type IS NULL) THEN WHILE (v_isbusinessunit='N' AND v_islegalentity='N') LOOP SELECT hh.parent_id, ad_orgtype.isbusinessunit, ad_orgtype.islegalentity INTO v_org_header_id, v_isbusinessunit, v_islegalentity FROM ad_org, ad_orgtype, ad_treenode pp, ad_treenode hh WHERE pp.node_id = hh.parent_id AND hh.ad_tree_id = pp.ad_tree_id AND pp.node_id=ad_org.ad_org_id AND hh.node_id=v_org_header_id AND ad_org.ad_orgtype_id=ad_orgtype.ad_orgtype_id AND ad_org.isready='Y' AND EXISTS (SELECT 1 FROM ad_tree WHERE ad_tree.treetype='OO' AND hh.ad_tree_id=ad_tree.ad_tree_id and hh.ad_client_id=ad_tree.ad_client_id); END LOOP; -- Gets recursively the organization parent until finding a Legal Entity ELSIF (p_type='LE') THEN WHILE (v_islegalentity='N') LOOP SELECT hh.parent_id, ad_orgtype.islegalentity INTO v_org_header_id, v_islegalentity FROM ad_org, ad_orgtype, ad_treenode pp, ad_treenode hh WHERE pp.node_id = hh.parent_id AND hh.ad_tree_id = pp.ad_tree_id AND pp.node_id=ad_org.ad_org_id AND hh.node_id=v_org_header_id AND ad_org.ad_orgtype_id=ad_orgtype.ad_orgtype_id AND ad_org.isready='Y' AND EXISTS (SELECT 1 FROM ad_tree WHERE ad_tree.treetype='OO' AND hh.ad_tree_id=ad_tree.ad_tree_id and hh.ad_client_id=ad_tree.ad_client_id); END LOOP; -- Gets recursively the organization parent until finding a Business Unit ELSIF (p_type='BU') THEN WHILE (v_isbusinessunit='N' AND v_org_header_id<>'0') LOOP SELECT hh.parent_id, ad_orgtype.isbusinessunit INTO v_org_header_id, v_isbusinessunit FROM ad_org, ad_orgtype, ad_treenode pp, ad_treenode hh WHERE pp.node_id = hh.parent_id AND hh.ad_tree_id = pp.ad_tree_id AND pp.node_id=ad_org.ad_org_id AND hh.node_id=v_org_header_id AND ad_org.ad_orgtype_id=ad_orgtype.ad_orgtype_id AND ad_org.isready='Y' AND EXISTS (SELECT 1 FROM ad_tree WHERE ad_tree.treetype='OO' AND hh.ad_tree_id=ad_tree.ad_tree_id and hh.ad_client_id=ad_tree.ad_client_id); END LOOP; RETURN NULL; END IF; RETURN v_org_header_id; END; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_get_doc_le_bu(p_header_table character varying, p_document_id character varying, p_header_column_id character varying, p_type character varying); publictadfalse23416P125536408Rad_get_doctype(character varying, character varying, character varying, character)FUNCTION7CREATE FUNCTION ad_get_doctype(p_clientid character varying, p_orgid character varying, p_docbasetype character varying, p_docsubtypeso character) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DocTypeId VARCHAR(32) ; --OBTG:varchar2-- --TYPE RECORD IS REFCURSOR; Cur_DocType RECORD; BEGIN FOR Cur_DocType IN (SELECT C_DocType_ID FROM C_DOCTYPE WHERE DOCBASETYPE=p_DocBaseType AND ISACTIVE='Y' AND(p_DocSubTypeSO IS NULL OR DOCSUBTYPESO=p_DocSubTypeSO) AND AD_Client_Id=p_ClientId AND AD_ISORGINCLUDED(p_OrgId, AD_Org_ID, p_ClientId) <> -1 ORDER BY AD_ISORGINCLUDED(p_OrgId, AD_Org_ID, p_ClientId), IsDefault, C_DocType_ID ) LOOP v_DocTypeId:=Cur_DocType.C_DocType_ID; EXIT; END LOOP; RETURN v_DocTypeId; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_get_doctype(p_clientid character varying, p_orgid character varying, p_docbasetype character varying, p_docsubtypeso character); publictadfalse23416Q125536409Gad_get_doctype(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_get_doctype(p_clientid character varying, p_orgid character varying, p_docbasetype character varying) RETURNS character varying AS $_$ DECLARE BEGIN RETURN AD_GET_DOCTYPE ($1, $2, $3, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.ad_get_doctype(p_clientid character varying, p_orgid character varying, p_docbasetype character varying); publictadfalse23416R125536410:ad_get_next_sequence(character varying, character varying)FUNCTIONCREATE FUNCTION ad_get_next_sequence(p_tablename character varying, p_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* * This is maintained just for backwards compatibility, use instead get_uuid() */ BEGIN return get_uuid(); END ; $$ LANGUAGE plpgsql; bDROP FUNCTION public.ad_get_next_sequence(p_tablename character varying, p_id character varying); publictadfalse23416125536411ad_get_rdbms()FUNCTIONZCREATE FUNCTION ad_get_rdbms() RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN return 'POSTGRE'; END; $$ LANGUAGE plpgsql; %DROP FUNCTION public.ad_get_rdbms(); publictadfalse23416S125536412$ad_impformat_copy(character varying)FUNCTIONnCREATE FUNCTION ad_impformat_copy(pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_ImpFormat_Copy.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Copy Import Format content (i.e. Rows) to another * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AD_ImpFormat_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NoOfFields NUMERIC:=0; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- Cur_Rows RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='AD_ImpFormat_ID') THEN v_AD_ImpFormat_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_ImpFormat_ID=' || v_AD_ImpFormat_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Record_ID is the ImpFormat_ID to copy to FOR Cur_Rows IN (SELECT * FROM AD_ImpFormat_Row WHERE AD_ImpFormat_ID=v_AD_ImpFormat_ID) LOOP -- Get next no SELECT * INTO v_NextNo FROM AD_Sequence_Next('AD_ImpFormat_Row', Cur_Rows.AD_Client_ID) ; -- Insert INSERT INTO AD_ImpFormat_Row ( AD_ImpFormat_Row_ID, AD_ImpFormat_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, SeqNo, AD_Column_ID, StartNo, EndNo, DataType, DataFormat, DecimalPoint, DivideBy100, ConstantValue, Callout ) VALUES (v_NextNo, v_Record_ID, Cur_Rows.AD_Client_ID, Cur_Rows.AD_Org_ID, Cur_Rows.IsActive, TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Rows.Name, Cur_Rows.SeqNo, Cur_Rows.AD_Column_ID, Cur_Rows.StartNo, Cur_Rows.EndNo, Cur_Rows.DataType, Cur_Rows.DataFormat, Cur_Rows.DecimalPoint, Cur_Rows.DivideBy100, Cur_Rows.ConstantValue, Cur_Rows.Callout) ; -- v_NoOfFields:=v_NoOfFields + 1; END LOOP; v_Message:='@Copied@=' || v_NoOfFields; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; HDROP FUNCTION public.ad_impformat_copy(pinstance_id character varying); publictadfalse23416T125536414 ad_isjavaword(character varying)FUNCTIONCREATE FUNCTION ad_isjavaword(word character varying) RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN --Prevents column names to generate conflicts with DAL's getters and setters RETURN case when lower(WORD) in ('class') THEN 'Y' ELSE 'N' END; END ; $$ LANGUAGE plpgsql; <DROP FUNCTION public.ad_isjavaword(word character varying); publictadfalse23416U125536415Lad_ismemberincluded(character varying, character varying, character varying)FUNCTIONVCREATE FUNCTION ad_ismemberincluded(p_nodeid character varying, p_parentid character varying, p_treeid character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return 'Tree Level' if nodeID is a leaf of the tree * where parentID is the root. Else return -1 ************************************************************************/ v_Level NUMERIC:=0; v_Parent VARCHAR(32) ; --OBTG:VARCHAR2-- v_Node VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN v_Parent:=p_nodeID; WHILE v_Parent IS NOT NULL LOOP v_Level:=v_Level + 1; SELECT MAX(NODE_ID), MAX(PARENT_ID) INTO v_Node, v_Parent FROM AD_TREENODE WHERE AD_TREE_ID=p_treeID AND NODE_ID=v_Parent; IF v_Node=p_parentID THEN RETURN v_Level; END IF; END LOOP; RETURN(-1) ; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_ismemberincluded(p_nodeid character varying, p_parentid character varying, p_treeid character varying); publictadfalse23416V125536416Iad_isorgincluded(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_isorgincluded(p_orgid character varying, p_parentorgid character varying, p_clientid character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return 'Org Level' if orgID is a leaf of the org tree * where parentOrgID is the root. Else return -1 ************************************************************************/ v_Level NUMERIC:=0; v_treeID VARCHAR(32) ; --OBTG:varchar2-- v_Parent VARCHAR(32) ; v_Node VARCHAR(32) ; BEGIN SELECT MAX(AD_TREE_ORG_ID) INTO v_treeID FROM AD_CLIENTINFO WHERE AD_CLIENT_ID=p_clientID; v_Parent:=p_OrgID; WHILE v_Parent IS NOT NULL LOOP v_Level:=v_Level + 1; SELECT MAX(NODE_ID), MAX(PARENT_ID) INTO v_Node, v_Parent FROM AD_TREENODE WHERE AD_TREE_ID=v_treeID AND NODE_ID=v_Parent; IF v_Node=p_parentOrgID THEN RETURN v_Level; END IF; END LOOP; RETURN(-1) ; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_isorgincluded(p_orgid character varying, p_parentorgid character varying, p_clientid character varying); publictadfalse23416W125536417ad_istriggerenabled()FUNCTIONCREATE FUNCTION ad_istriggerenabled() RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_aux NUMERIC; BEGIN SELECT COUNT(*) INTO v_aux FROM AD_Session_Status WHERE IsImporting='Y'; IF v_Aux>0 THEN RETURN 'N'; ELSE RETURN 'Y'; END IF; EXCEPTION WHEN OTHERS THEN RETURN 'Y'; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_istriggerenabled(); publictadfalse23416125556467%ad_language_create(character varying)FUNCTIONmCREATE FUNCTION ad_language_create(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2010 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Language_Create.sql,v 1.10 2003/08/07 05:43:38 jjanke Exp $ *** * Title: Create missing Language Records * Description: * SELECT TableName FROM AD_Table WHERE TableName LIKE '%Trl' ORDER BY 1 * * See also copy_translation ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- v_Languages NUMERIC:=0; v_Created NUMERIC:=0; v_rowcount NUMERIC; v_count NUMERIC; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; ---------------------------------------------------------------------- SELECT COUNT(*) INTO v_Languages FROM AD_Language WHERE(IsActive='N' OR IsSystemLanguage='N'); RAISE NOTICE '%','Number of inactive Languages=' || v_Languages ; SELECT COUNT(*) INTO v_Languages FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; RAISE NOTICE '%','Number of active Languages=' || v_Languages ; -- Element INSERT INTO AD_Element_Trl ( AD_Element_Trl_ID,AD_Element_ID, AD_Language, Name, PrintName, Description, Help, PO_Name, PO_PrintName, PO_Description, PO_Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Element_ID, AD_Language.AD_Language, AD_Element.Name, AD_Element.PrintName, AD_Element.Description, AD_Element.Help, AD_Element.PO_Name, AD_Element.PO_PrintName, AD_Element.PO_Description, AD_Element.PO_Help, 'N', '0', '0','0', '0' FROM AD_Element, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Element.AD_Module_ID = M.AD_Module_ID AND AD_Language.AD_Language != M.AD_Language AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM AD_ELEMENT_TRL WHERE AD_ELEMENT_ID = AD_Element.AD_Element_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Element ' || v_rowcount ; -- FieldGroup INSERT INTO AD_FieldGroup_Trl ( AD_FieldGroup_Trl_ID, AD_FieldGroup_ID, AD_Language, Name, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_FieldGroup_ID, AD_Language.AD_Language, AD_FieldGroup.Name, 'N', '0', '0', '0', '0' FROM AD_FieldGroup, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND M.AD_MODULE_ID = AD_FieldGroup.AD_MODULE_ID AND M.AD_LANGUAGE != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_FieldGroup_TRL WHERE AD_FieldGroup_ID = AD_FieldGroup.AD_FieldGroup_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_FieldGroup ' || v_rowcount ; -- Field INSERT INTO AD_Field_Trl ( AD_Field_Trl_ID, AD_Field_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Field_ID, AD_Language.AD_Language, AD_Field.Name, AD_Field.Description, AD_Field.Help, 'N', '0', '0', '0','0' FROM AD_Field, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Field.AD_Module_ID = M.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM AD_Field_TRL WHERE AD_Field_ID = AD_Field.AD_Field_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Field ' || v_rowcount ; -- Form INSERT INTO AD_Form_Trl ( AD_Form_Trl_ID, AD_Form_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Form_ID, AD_Language.AD_Language, AD_Form.Name, AD_Form.Description, AD_Form.Help, 'N', '0', '0', '0', '0' FROM AD_Form, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND M.AD_MODULE_ID = AD_Form.AD_MODULE_ID AND M.AD_Language != AD_Language.AD_Language AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM AD_Form_TRL WHERE AD_Form_ID = AD_Form.AD_Form_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Form ' || v_rowcount ; -- Menu INSERT INTO AD_Menu_Trl ( AD_Menu_Trl_ID, AD_Menu_ID, AD_Language, Name, Description, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Menu_ID, AD_Language.AD_Language, AD_Menu.Name, AD_Menu.Description, 'N', '0', '0', '0', '0' FROM AD_Menu, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND AD_MENU.AD_MODULE_ID = M.AD_MODULE_ID AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Menu_TRL WHERE AD_Menu_ID = AD_Menu.AD_Menu_id AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Menu ' || v_rowcount ; -- Message INSERT INTO AD_Message_Trl ( ad_message_trl_id, AD_Message_ID, AD_Language, MsgText, MsgTip, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Message_ID, AD_Language.AD_Language, MsgText, MsgTip, 'N', '0', '0', '0', '0' FROM AD_Message, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND M.AD_MODULE_ID = AD_Message.AD_MODULE_ID AND NOT EXISTS (SELECT 1 FROM AD_Message_trl WHERE AD_Message_ID = AD_Message.AD_Message_id AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Message ' || v_rowcount ; -- Process INSERT INTO AD_Process_Trl ( AD_Process_Trl_ID, AD_Process_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Process_ID, AD_Language.AD_Language, AD_Process.Name, AD_Process.Description, AD_Process.Help, 'N', '0', '0', '0', '0' FROM AD_Process, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND M.AD_MODULE_ID = AD_Process.AD_MODULE_ID AND M.AD_LANGUAGE != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Process_trl WHERE AD_Process_ID = AD_Process.AD_Process_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Process ' || v_rowcount ; -- Process_Para INSERT INTO AD_Process_Para_Trl ( AD_Process_Para_Trl_ID, AD_Process_Para_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Process_Para_ID, AD_Language.AD_Language, AD_Process_Para.Name, AD_Process_Para.Description, AD_Process_Para.Help, 'N', '0', '0', '0', '0' FROM AD_Process_Para, AD_Language, AD_MODULE M, AD_PROCESS P WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND P.AD_PROCESS_ID = AD_Process_Para.AD_PROCESS_ID AND M.AD_MODULE_ID = P.AD_MODULE_ID AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Process_Para_Trl WHERE AD_Process_Para_id = AD_Process_Para.AD_Process_Para_id AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Process_Para ' || v_rowcount ; -- Reference INSERT INTO AD_Reference_Trl ( AD_Reference_Trl_ID, AD_Reference_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Reference_ID, AD_Language.AD_Language, AD_Reference.Name, AD_Reference.Description, AD_Reference.Help, 'N', '0', '0', '0', '0' FROM AD_Reference, AD_Language, AD_MODULE M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND M.AD_MODULE_ID = AD_Reference.AD_MODULE_ID AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Reference_TRL WHERE AD_Reference_ID = AD_Reference.AD_Reference_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Reference ' || v_rowcount ; -- Ref_List INSERT INTO AD_Ref_List_Trl ( AD_Ref_List_Trl_ID, AD_Ref_List_ID, AD_Language, Name, Description, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Ref_List_ID, AD_Language.AD_Language, AD_Ref_List.Name, AD_Ref_List.Description, 'N', '0', '0', '0', '0' FROM AD_Ref_List, AD_Language, AD_MODULE M, AD_REFERENCE R WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND R.AD_REFERENCE_ID = AD_Ref_List.AD_REFERENCE_ID AND R.AD_MODULE_ID = M.AD_MODULE_ID AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Ref_List_TRL WHERE AD_Ref_List_ID = AD_Ref_List.AD_Ref_List_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Ref_List ' || v_rowcount ; INSERT INTO AD_Tab_Trl ( AD_Tab_Trl_ID, AD_Tab_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Tab_ID, AD_Language.AD_Language, AD_Tab.Name, AD_Tab.Description, AD_Tab.Help, 'N', '0', '0', '0', '0' FROM AD_Tab, AD_Language, AD_MODULE M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND M.AD_MODULE_ID = AD_Tab.AD_MODULE_ID AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Tab_TRL WHERE AD_Tab_ID = AD_Tab.AD_Tab_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Tab ' || v_rowcount ; --Tasks do not have module... INSERT INTO AD_Task_Trl ( AD_Task_Trl_ID, AD_Task_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Task_ID, AD_Language, AD_Task.Name, AD_Task.Description, AD_Task.Help, 'N', '0', '0', '0', '0' FROM AD_Task, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM AD_Task_TRL WHERE AD_Task_ID = AD_Task.AD_Task_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Task ' || v_rowcount ; INSERT INTO AD_Workflow_Trl ( AD_Workflow_Trl_ID, AD_Workflow_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Workflow_ID, AD_Language.AD_Language, AD_Workflow.Name, AD_Workflow.Description, AD_Workflow.Help, 'N', '0', '0', '0', '0' FROM AD_Workflow, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' and m.ad_module_id = AD_Workflow.ad_module_id AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Workflow_TRL WHERE AD_Workflow_ID = AD_Workflow.AD_Workflow_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Workflow ' || v_rowcount ; INSERT INTO AD_WF_Node_Trl ( AD_WF_Node_Trl_ID, AD_WF_Node_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_WF_Node.AD_WF_Node_ID, AD_Language.AD_Language, AD_WF_Node.Name, AD_WF_Node.Description, AD_WF_Node.Help, 'N', '0', '0', '0', '0' FROM AD_WF_Node, AD_Language, AD_Module M, AD_Workflow w WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' and AD_WF_Node.AD_Workflow_id = w.AD_Workflow_id and m.ad_module_id = w.ad_module_id AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_WF_Node_TRL WHERE AD_WF_Node_ID = AD_WF_Node.AD_WF_Node_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_WF_Node ' || v_rowcount ; INSERT INTO AD_Window_Trl ( AD_Window_Trl_ID, AD_Window_ID, AD_Language, Name, Description, Help, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Window_ID, AD_Language.AD_Language, AD_Window.Name, AD_Window.Description, AD_Window.Help, 'N', '0', '0', '0', '0' FROM AD_Window, AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' and m.ad_module_id = AD_Window.ad_module_id AND M.AD_Language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_Window_TRL WHERE AD_Window_ID = AD_Window.AD_Window_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Window ' || v_rowcount ; --No module INSERT INTO AD_Month_Trl ( AD_Month_Trl_ID, AD_Month_ID, AD_Language, Name, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), AD_Month_ID, AD_Language.AD_Language, AD_Month.Name, 'N', '0', '0', AD_Month.AD_Client_ID, AD_Month.AD_Org_ID FROM AD_Month, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM AD_Month_TRL WHERE AD_Month_ID = AD_Month.AD_Month_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_Month ' || v_rowcount ; --no module INSERT INTO C_Country_Trl ( C_Country_Trl_ID, C_Country_ID, AD_Language, Name, Description, RegionName, DisplaySequence, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_Country_ID, AD_Language.AD_Language, C_Country.Name, C_Country.Description, C_Country.RegionName, C_Country.DisplaySequence, 'N', '0', '0', C_Country.AD_Client_ID, C_Country.AD_Org_ID FROM C_Country, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_Country_TRL WHERE C_Country_ID = C_Country.C_Country_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_Country ' || v_rowcount ; --no module INSERT INTO C_Currency_Trl ( C_Currency_Trl_ID, C_Currency_ID, AD_Language, CurSymbol, Description, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_Currency_ID, AD_Language.AD_Language, C_Currency.CurSymbol, C_Currency.Description, 'N', '0', '0', C_Currency.AD_Client_ID, C_Currency.AD_Org_ID FROM C_Currency, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_Currency_TRL WHERE C_Currency_ID = C_Currency.C_Currency_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_Currency ' || v_rowcount ; -- Commented by cromero 19102006 -- COMMIT; --------------------------------------------------------------------------- --no module INSERT INTO C_DocType_Trl ( C_DocType_Trl_ID, C_DocType_ID, AD_Language, Name, PrintName, DocumentNote, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_DocType_ID, AD_Language, C_DocType.Name, C_DocType.PrintName, C_DocType.DocumentNote, 'N', '0', '0', C_DocType.AD_Client_ID, C_DocType.AD_Org_ID FROM C_DocType, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_DocType_TRL WHERE C_DocType_ID = C_DocType.C_DocType_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_DocType ' || v_rowcount ; INSERT INTO C_ElementValue_Trl ( C_ElementValue_Trl_ID, C_ElementValue_ID, AD_Language, Name, Description, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_ElementValue_ID, AD_Language, C_ElementValue.Name, C_ElementValue.Description, 'N', '0', '0', C_ElementValue.AD_Client_ID, C_ElementValue.AD_Org_ID FROM C_ElementValue, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_ElementValue_TRL WHERE C_ElementValue_ID = C_ElementValue.C_ElementValue_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_ElementValue ' || v_rowcount ; INSERT INTO C_Greeting_Trl ( C_Greeting_Trl_ID, C_Greeting_ID, AD_Language, Name, Greeting, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_Greeting_ID, AD_Language, C_Greeting.Name, C_Greeting.Greeting, 'N', '0', '0', C_Greeting.AD_Client_ID, C_Greeting.AD_Org_ID FROM C_Greeting, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_Greeting_TRL WHERE C_Greeting_ID = C_Greeting.C_Greeting_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_Greeting ' || v_rowcount ; INSERT INTO C_PaymentTerm_Trl ( C_PaymentTerm_Trl_ID, C_PaymentTerm_ID, AD_Language, Name, Description, DocumentNote, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_PaymentTerm_ID, AD_Language, C_PaymentTerm.Name, C_PaymentTerm.Description, C_PaymentTerm.DocumentNote, 'N', '0', '0', C_PaymentTerm.AD_Client_ID, C_PaymentTerm.AD_Org_ID FROM C_PaymentTerm, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_PaymentTerm_TRL WHERE C_PaymentTerm_ID = C_PaymentTerm.C_PaymentTerm_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_PaymentTerm ' || v_rowcount ; INSERT INTO C_TaxCategory_Trl ( C_TaxCategory_Trl_ID, C_TaxCategory_ID, AD_Language, Name, Description, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_TaxCategory_ID, AD_Language, C_TaxCategory.Name, C_TaxCategory.Description, 'N', '0', '0', C_TaxCategory.AD_Client_ID, C_TaxCategory.AD_Org_ID FROM C_TaxCategory, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_TaxCategory_TRL WHERE C_TaxCategory_ID = C_TaxCategory.C_TaxCategory_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_TaxCategory ' || v_rowcount ; INSERT INTO C_UOM_Trl ( C_UOM_Trl_ID, C_UOM_ID, AD_Language, Name, Description, UOMSymbol, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_UOM_ID, AD_Language, C_UOM.Name, C_UOM.Description, C_UOM.UOMSymbol, 'N', '0', '0', C_UOM.AD_Client_ID, C_UOM.AD_Org_ID FROM C_UOM, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_UOM_TRL WHERE C_UOM_ID = C_UOM.C_UOM_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_UOM ' || v_rowcount ; INSERT INTO C_Tax_Trl ( C_Tax_Trl_ID, C_Tax_ID, AD_Language, Name, Description, TaxIndicator, IsTranslated, Createdby, UpdatedBy, AD_Client_ID, AD_Org_ID ) SELECT get_uuid(), C_Tax_ID, AD_Language, C_Tax.Name, C_Tax.Description, C_Tax.TaxIndicator, 'N', '0', '0', C_Tax.AD_Client_ID, C_Tax.AD_Org_ID FROM C_Tax, AD_Language WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND NOT EXISTS (SELECT 1 FROM C_Tax_TRL WHERE C_Tax_ID = C_Tax.C_Tax_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- C_Tax ' || v_rowcount ; ---------------------------------------------------------------------- INSERT INTO AD_TextInterfaces_Trl ( AD_TextInterfaces_Trl_ID, AD_TextInterfaces_ID, AD_Language, Text, IsTranslated, Createdby, UpdatedBy, Created, Updated, AD_Client_ID, AD_Org_ID, IsActive ) SELECT get_uuid(), AD_TextInterfaces_ID, AD_Language.AD_Language, AD_TextInterfaces.Text, 'N', '0', '0', TO_DATE(NOW()), TO_DATE(NOW()), AD_TextInterfaces.AD_Client_ID, AD_TextInterfaces.AD_Org_ID, 'Y' FROM AD_TextInterfaces, AD_Language, aD_module m WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' and m.ad_module_id = AD_TextInterfaces.AD_MODULE_ID and m.ad_language != AD_Language.AD_Language AND NOT EXISTS (SELECT 1 FROM AD_TextInterfaces_TRL WHERE AD_TextInterfaces_ID = AD_TextInterfaces.AD_TextInterfaces_ID AND AD_LANGUAGE = AD_Language.AD_Language); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_Created + v_rowcount; RAISE NOTICE '%','- AD_TextInterfaces ' || v_rowcount ; -- Call extension points SELECT count(*) INTO v_count FROM DUAL WHERE EXISTS (SELECT 1 FROM AD_EP_PROCEDURES WHERE AD_EXTENSION_POINTS_ID= 'C485210A6F754FE0A6E32FA24B3B243C'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); v_extension_point_id VARCHAR(32) := 'C485210A6F754FE0A6E32FA24B3B243C'; BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'p_PInstance_ID', p_PInstance_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'User', v_AD_User_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Message', NULL, NULL, NULL, NULL, NULL, NULL, v_Message); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Result', NULL, NULL, v_result, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); SELECT p_number INTO v_Result FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername = 'Result'; SELECT p_text INTO v_Message FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername = 'Message'; DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; END IF; -- Summary info v_Message:='@Created@ = ' || v_Created; -- Commented by cromero 19102006 -- COMMIT; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; -- Commented by cromero 19102006 RETURN; END ; $_$ LANGUAGE plpgsql; KDROP FUNCTION public.ad_language_create(p_pinstance_id character varying); publictadfalse23416Y125536420$ad_mapping_format(character varying)FUNCTIONCREATE FUNCTION ad_mapping_format(p_str character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_str VARCHAR(2000) ; --OBTG:VARCHAR2-- BEGIN IF p_str IS NULL THEN RETURN p_str; END IF; v_str:=p_str; --Replace Accents v_str:=replace(v_str, 'á', 'a') ; v_str:=replace(v_str, 'é', 'e') ; v_str:=replace(v_str, 'í', 'i') ; v_str:=replace(v_str, 'ó', 'o') ; v_str:=replace(v_str, 'ú', 'u') ; v_str:=replace(v_str, 'Á', 'A') ; v_str:=replace(v_str, 'É', 'E') ; v_str:=replace(v_str, 'Í', 'I') ; v_str:=replace(v_str, 'Ó', 'O') ; v_str:=replace(v_str, 'Ú', 'U') ; --Replace special characters v_str:=replace(v_str, '-', '') ; v_str:=replace(v_str, '/', '') ; v_str:=replace(v_str, '#', '') ; v_str:=replace(v_str, ' ', '') ; v_str:=replace(v_str, '&', '') ; v_str:=replace(v_str, ',', '') ; v_str:=replace(v_str, '(', '') ; v_str:=replace(v_str, ')', '') ; RETURN(v_str) ; END ; $$ LANGUAGE plpgsql; ADROP FUNCTION public.ad_mapping_format(p_str character varying); publictadfalse23416125595212ad_menu_mod_trg()FUNCTIONCREATE FUNCTION ad_menu_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Menu_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Menu_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.IsSummary , '.') != COALESCE(OLD.IsSummary , '.') OR COALESCE(NEW.Action , '.') != COALESCE(OLD.Action , '.') OR COALESCE(NEW.AD_Window_ID , '.') != COALESCE(OLD.AD_Window_ID , '.') OR COALESCE(NEW.AD_Workflow_ID , '.') != COALESCE(OLD.AD_Workflow_ID , '.') OR COALESCE(NEW.AD_Task_ID , '.') != COALESCE(OLD.AD_Task_ID , '.') OR COALESCE(NEW.AD_Process_ID , '.') != COALESCE(OLD.AD_Process_ID , '.') OR COALESCE(NEW.AD_Form_ID , '.') != COALESCE(OLD.AD_Form_ID , '.') OR COALESCE(NEW.URL , '.') != COALESCE(OLD.URL , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; (DROP FUNCTION public.ad_menu_mod_trg(); publictadfalse23416125595214 ad_menu_trg()FUNCTIONCREATE FUNCTION ad_menu_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ v_xTree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xParent_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Menu Trigger -- for Translation -- and TreeNode IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Menu_Trl ( AD_Menu_Trl_ID, AD_Menu_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, IsTranslated ) SELECT get_uuid(), new.AD_Menu_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, 'N' FROM AD_Language, ad_module m WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' and m.ad_module_id = new.ad_module_id and m.ad_language != AD_Language.AD_Language; -- Create TreeNode -- -- get AD_Tree_ID + ParentID SELECT c.AD_Tree_Menu_ID, n.Node_ID INTO v_xTree_ID, v_xParent_ID FROM AD_ClientInfo c, AD_TreeNode n -- AD_TreeNodeMM n WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=new.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||' Node='||:new.AD_Menu_ID||' Parent='||v_xParent_ID); -- Insert into TreeNode INSERT INTO AD_TreeNode -- AD_TreeNodeMM ( AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, v_xTree_ID, new.AD_Menu_ID, v_xParent_ID,( CASE new.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; -- Summary Nodes first END IF; -- Inserting -- AD_Ref_List update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.')) THEN IF(old.IsActive!=new.IsActive) THEN -- get AD_Tree_ID + ParentID SELECT c.AD_Tree_Menu_ID, n.Node_ID INTO v_xTree_ID, v_xParent_ID FROM AD_ClientInfo c, AD_TreeNode n -- AD_TreeNodeMM n WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=new.AD_Client_ID; -- Update UPDATE AD_TreeNode -- AD_TreeNodeMM SET IsActive=new.IsActive WHERE AD_Tree_ID=v_xTree_ID AND Node_ID=new.AD_Menu_ID; ELSE UPDATE AD_Menu_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Menu_ID=new.AD_Menu_ID; END IF; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN -- Delete TreeNode -- get AD_Tree_ID, AD_Menu_ID SELECT c.AD_Tree_Menu_ID INTO v_xTree_ID FROM AD_ClientInfo c, AD_TreeNode n WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=old.AD_Client_ID; --Assign children to principal node UPDATE AD_Treenode SET Parent_ID='0' WHERE AD_Tree_ID=v_xTree_ID AND Parent_ID=old.AD_Menu_ID; --Delete node DELETE FROM AD_Treenode WHERE AD_Client_ID=old.AD_Client_ID AND AD_Tree_ID=v_xTree_ID AND Node_ID=old.AD_Menu_ID; END IF; -- Deleting IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'AD_Menu InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20005-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; $DROP FUNCTION public.ad_menu_trg(); publictadfalse23416Z1255364244ad_message_get(character varying, character varying)FUNCTIONCREATE FUNCTION ad_message_get(p_value character varying, p_ad_language character varying) RETURNS character varying AS $$ DECLARE /****************************************************************************** * The contents of this file are subject to the Compiere License Version 1.1 * ("License"); You may not use this file except in compliance with the License * You may obtain a copy of the License at http://www.compiere.org/license.html * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2006 Openbravo S.L. ******************************************************************************/ v_RetValue AD_Message.MsgText%TYPE; BEGIN BEGIN SELECT MsgText -- Message INTO v_RetValue FROM AD_Message WHERE Value = p_Value; /*POSTGRESQL> IF (NOT FOUND) THEN RETURN <' || p_Value || '>'; END IF; */ EXCEPTION WHEN OTHERS THEN RETURN N'<' || p_Value || N'>'; /* IF (NOT FOUND) THEN RETURN <' || p_Value || '>'; END IF; */ EXCEPTION WHEN OTHERS THEN RETURN p_Value; END; -- RETURN v_RetValue; END ; $$ LANGUAGE plpgsql; bDROP FUNCTION public.ad_message_get2(p_value character varying, p_ad_language character varying); publictadfalse23416g.00TFUNCTION ad_message_get2(p_value character varying, p_ad_language character varying)COMMENTCOMMENT ON FUNCTION ad_message_get2(p_value character varying, p_ad_language character varying) IS '--OBTG:AD_MESSAGE_GET2func=NVARCHAR,p_value=NVARCHAR--'; publictadfalse91125595217ad_message_mod_trg()FUNCTION% CREATE FUNCTION ad_message_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Message_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Message_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Value , '.') != COALESCE(OLD.Value , '.') OR COALESCE(NEW.MsgText , '.') != COALESCE(OLD.MsgText , '.') OR COALESCE(NEW.MsgTip , '.') != COALESCE(OLD.MsgTip , '.') OR COALESCE(NEW.MsgType , '.') != COALESCE(OLD.MsgType , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_message_mod_trg(); publictadfalse23416125595219ad_message_trg()FUNCTION CREATE FUNCTION ad_message_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Message_Trg.sql,v 1.2 2002/05/11 04:32:33 jjanke Exp $ *** * Title: Message Translation * Description: ************************************************************************/ v_aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF new.AD_Module_ID != '0' THEN SELECT COUNT(*) INTO v_Aux FROM AD_MODULE_DBPREFIX WHERE AD_MODULE_ID = new.AD_Module_ID AND (instr(upper(new.value), upper(name)||'_') = 1 OR instr(upper(new.value), 'EM_'||upper(name)||'_') = 1); IF v_Aux = 0 THEN RAISE EXCEPTION '%', 'Messages must start with its module DB prefix' ; --OBTG:-20536-- END IF; END IF; -- Insert AD_Ref_List Trigger -- for Translation IF TG_OP = 'INSERT' THEN INSERT INTO AD_Message_Trl (AD_Message_Trl_ID, AD_Message_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, MsgText, MsgTip, IsTranslated) SELECT get_uuid(), NEW.AD_Message_ID, AD_Language.AD_Language, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, NEW.MsgText, NEW.MsgTip, 'N' FROM AD_Language, aD_Module m WHERE AD_Language.IsActive = 'Y' AND IsSystemLanguage = 'Y' and m.ad_module_id = new.ad_module_id and m.ad_language != AD_Language.AD_Language; END IF; -- AD_Message update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF ( COALESCE (OLD.MsgText, '.') <> COALESCE (NEW.MsgText, '.') OR COALESCE (OLD.MsgTip, '.') <> COALESCE (NEW.MsgTip, '.') ) THEN UPDATE AD_Message_Trl SET IsTranslated = 'N', Updated = TO_DATE(NOW()) WHERE AD_Message_ID = NEW.AD_Message_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_message_trg(); publictadfalse23416125595221ad_model_object_mod_trg()FUNCTION<CREATE FUNCTION ad_model_object_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_TAB_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_TASK_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_WORKFLOW_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_PROCESS_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_FORM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_REFERENCE_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_CALLOUT_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; null; /* Mutating tables.... cuerrentModuleID := NULL; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Model_Object_ID; v_AD_TAB_ID := new.AD_TAB_ID; v_AD_TASK_ID := new.AD_TASK_ID; v_AD_WORKFLOW_ID := new.AD_WORKFLOW_ID; v_AD_PROCESS_ID := new.AD_PROCESS_ID; v_AD_FORM_ID := new.AD_FORM_ID; v_AD_REFERENCE_ID := new.AD_REFERENCE_ID; v_AD_CALLOUT_ID := new.AD_CALLOUT_ID; ELSE cuerrentID := old.AD_Model_Object_ID; v_AD_TAB_ID := old.AD_TAB_ID; v_AD_TASK_ID := old.AD_TASK_ID; v_AD_WORKFLOW_ID := old.AD_WORKFLOW_ID; v_AD_PROCESS_ID := old.AD_PROCESS_ID; v_AD_FORM_ID := old.AD_FORM_ID; v_AD_REFERENCE_ID := old.AD_REFERENCE_ID; v_AD_CALLOUT_ID := old.AD_CALLOUT_ID; END IF; IF (v_AD_TAB_ID IS NULL AND v_AD_TASK_ID IS NULL AND v_AD_WORKFLOW_ID IS NULL AND v_AD_PROCESS_ID IS NULL AND v_AD_FORM_ID IS NULL AND v_AD_REFERENCE_ID IS NULL AND v_AD_CALLOUT_ID IS NULL) THEN cuerrentModuleID := '0'; --CORE ELSIF v_AD_TAB_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_TAB WHERE AD_TAB_ID = v_AD_TAB_ID; ELSIF v_AD_TASK_ID IS NOT NULL THEN null; ELSIF v_AD_WORKFLOW_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_WORKFLOW WHERE AD_WORKFLOW_ID = v_AD_WORKFLOW_ID; ELSIF v_AD_PROCESS_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_PROCESS WHERE AD_PROCESS_ID = v_AD_PROCESS_ID; ELSIF v_AD_FORM_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_FORM WHERE AD_FORM_ID = v_AD_FORM_ID; ELSIF v_AD_REFERENCE_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_REFERENCE WHERE AD_REFERENCE_ID = v_AD_REFERENCE_ID; ELSIF v_AD_CALLOUT_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_CALLOUT WHERE AD_CALLOUT_ID = v_AD_CALLOUT_ID; END IF; IF cuerrentModuleID IS NOT NULL THEN SELECT ISInDevelopment INTO devModule FROM AD_MODULE WHERE AD_MODULE_ID = cuerrentModuleID; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Action , '.') != COALESCE(OLD.Action , '.') OR COALESCE(NEW.AD_Tab_ID , '.') != COALESCE(OLD.AD_Tab_ID , '.') OR COALESCE(NEW.Classname , '.') != COALESCE(OLD.Classname , '.') OR COALESCE(NEW.IsDefault , '.') != COALESCE(OLD.IsDefault , '.') OR COALESCE(NEW.AD_Task_ID , '.') != COALESCE(OLD.AD_Task_ID , '.') OR COALESCE(NEW.AD_Workflow_ID , '.') != COALESCE(OLD.AD_Workflow_ID , '.') OR COALESCE(NEW.AD_Process_ID , '.') != COALESCE(OLD.AD_Process_ID , '.') OR COALESCE(NEW.AD_Form_ID , '.') != COALESCE(OLD.AD_Form_ID , '.') OR COALESCE(NEW.AD_Reference_ID , '.') != COALESCE(OLD.AD_Reference_ID , '.') OR COALESCE(NEW.AD_Callout_ID , '.') != COALESCE(OLD.AD_Callout_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; END IF; */ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 0DROP FUNCTION public.ad_model_object_mod_trg(); publictadfalse23416125595224ad_modobjmapping_mod_trg()FUNCTIONCREATE FUNCTION ad_modobjmapping_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_TAB_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_TASK_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_WORKFLOW_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_PROCESS_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_FORM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_REFERENCE_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_CALLOUT_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; null; /* mutating tables... IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Model_Object_ID; ELSE cuerrentID := old.AD_Model_Object_ID; END IF; SELECT AD_TAB_ID , AD_TASK_ID , AD_WORKFLOW_ID , AD_PROCESS_ID , AD_FORM_ID , AD_REFERENCE_ID, AD_CALLOUT_ID INTO v_AD_TAB_ID , v_AD_TASK_ID , v_AD_WORKFLOW_ID , v_AD_PROCESS_ID , v_AD_FORM_ID , v_AD_REFERENCE_ID, v_AD_CALLOUT_ID FROM AD_MODEL_OBJECT O WHERE O.AD_MODEL_OBJECT_ID = cuerrentID; IF (v_AD_TAB_ID IS NULL AND v_AD_TASK_ID IS NULL AND v_AD_WORKFLOW_ID IS NULL AND v_AD_PROCESS_ID IS NULL AND v_AD_FORM_ID IS NULL AND v_AD_REFERENCE_ID IS NULL AND v_AD_CALLOUT_ID IS NULL) THEN cuerrentModuleID := '0'; --CORE ELSIF v_AD_TAB_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_TAB WHERE AD_TAB_ID = v_AD_TAB_ID; ELSIF v_AD_TASK_ID IS NOT NULL THEN null; ELSIF v_AD_WORKFLOW_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_WORKFLOW WHERE AD_WORKFLOW_ID = v_AD_WORKFLOW_ID; ELSIF v_AD_PROCESS_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_PROCESS WHERE AD_PROCESS_ID = v_AD_PROCESS_ID; ELSIF v_AD_FORM_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_FORM WHERE AD_FORM_ID = v_AD_FORM_ID; ELSIF v_AD_REFERENCE_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_REFERENCE WHERE AD_REFERENCE_ID = v_AD_REFERENCE_ID; ELSIF v_AD_CALLOUT_ID IS NOT NULL THEN SELECT AD_MODULE_ID INTO cuerrentModuleID FROM AD_CALLOUT WHERE AD_CALLOUT_ID = v_AD_CALLOUT_ID; END IF; IF cuerrentModuleID IS NOT NULL THEN SELECT ISInDevelopment INTO devModule FROM AD_MODULE WHERE AD_MODULE_ID = cuerrentModuleID; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Model_Object_ID , '.') != COALESCE(OLD.AD_Model_Object_ID , '.') OR COALESCE(NEW.MappingName , '.') != COALESCE(OLD.MappingName , '.') OR COALESCE(NEW.IsDefault , '.') != COALESCE(OLD.IsDefault , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; END IF; */ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 1DROP FUNCTION public.ad_modobjmapping_mod_trg(); publictadfalse23416125595226ad_module_dbprefix_mod_trg()FUNCTIONk CREATE FUNCTION ad_module_dbprefix_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Module_Dbprefix_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Module_Dbprefix_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.Isactive , '.') != COALESCE(OLD.Isactive , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 3DROP FUNCTION public.ad_module_dbprefix_mod_trg(); publictadfalse23416125595228ad_module_dbprefix_trg()FUNCTION CREATE FUNCTION ad_module_dbprefix_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ V_Char char; v_isregistered char(1); v_old_name varchar(60); v_type VARCHAR(60); --OBTG:varchar2-- startsWithLetter boolean; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT IsRegistered, Type INTO v_IsRegistered, v_type FROM AD_MODULE WHERE AD_MODULE_ID = new.AD_Module_ID; IF v_type = 'T' THEN RAISE EXCEPTION '%', '@DBPrefixNotAllowedInTemplate@'; --OBTG:-20000-- END IF; IF (TG_OP = 'UPDATE') THEN v_old_name := OLD.NAME; END IF; IF (TG_OP = 'INSERT' AND v_IsRegistered='Y') OR (TG_OP = 'UPDATE' AND v_IsRegistered='Y' AND NEW.NAME != v_old_name) THEN RAISE EXCEPTION '%', 'Cannot modify registered module.'; --OBTG:-20534-- END IF; --Check DB_Prefix IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN startsWithLetter := false; FOR I IN 1..LENGTH(new.name) LOOP v_char := substr(new.name,i,1); IF NOT ((v_char between 'A' and 'Z') or (v_char between '0' and '9')) THEN RAISE EXCEPTION '%', '@20531@' ; --OBTG:-20531-- END IF; IF v_char between 'A' and 'Z' THEN startsWithLetter := true; END IF; IF NOT startsWithLetter THEN RAISE EXCEPTION '%', '@20531@' ; --OBTG:-20531-- END IF; END LOOP; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.ad_module_dbprefix_trg(); publictadfalse23416125595230ad_module_dbprefix_unique_trg()FUNCTIONCREATE FUNCTION ad_module_dbprefix_unique_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ numWrongModules NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; select count(*) into numWrongModules from (select 1 from ad_module_dbprefix where ad_module_id<>'0' group by ad_module_id having count(*)>1) f; IF (TG_OP = 'INSERT') THEN IF (numWrongModules>0) THEN RAISE EXCEPTION '%', '@NotUniqueDBPrefix@'; --OBTG:-20000-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 6DROP FUNCTION public.ad_module_dbprefix_unique_trg(); publictadfalse23416125595232ad_module_denpendency_trg()FUNCTIONCREATE FUNCTION ad_module_denpendency_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Type VARCHAR(60); --OBTG:VARCHAR2-- v_name VARCHAR(60); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT Type INTO v_Type FROM AD_MODULE WHERE AD_Module_ID = new.AD_Module_ID; SELECT name INTO v_name FROM AD_MODULE WHERE AD_Module_ID = new.AD_Dependent_Module_ID; IF v_Type = 'M' AND new.IsIncluded = 'Y' THEN RAISE EXCEPTION '%', 'Simple modules cannot contain other modules' ; --OBTG:-20530-- END IF; new.Dependant_Module_Name := v_name; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.ad_module_denpendency_trg(); publictadfalse23416N125595234ad_module_dependency_mod_trg()FUNCTION CREATE FUNCTION ad_module_dependency_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Module_Dependency_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Module_Dependency_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR COALESCE(NEW.AD_Dependent_Module_ID , '.') != COALESCE(OLD.AD_Dependent_Module_ID , '.') OR COALESCE(NEW.StartVersion , '.') != COALESCE(OLD.StartVersion , '.') OR COALESCE(NEW.EndVersion , '.') != COALESCE(OLD.EndVersion , '.') OR COALESCE(NEW.IsIncluded , '.') != COALESCE(OLD.IsIncluded , '.') OR 1=2) THEN RAISE EXCEPTION '%', '@20532@'; --OBTG:-20000-- END IF; END IF; IF (TG_OP = 'INSERT' AND devModule='N') THEN RAISE EXCEPTION '%', '@20533'; --OBTG:-20000-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 5DROP FUNCTION public.ad_module_dependency_mod_trg(); publictadfalse23416\1255364359ad_module_dependent(character varying, character varying)FUNCTION CREATE FUNCTION ad_module_dependent(p_childmodule_id character varying, p_parentmodule_id character varying) RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* Checks whether p_childModule_ID is a dependency for p_parentModule_ID if it is the function returns 'Y' other case 'N'. Example: core -> ID = 0 mod1 -> ID = 100 mod1 depends on core so AD_MODULE_DEPENDENT('0','100')='Y' */ v_childVersion VARCHAR(10); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Dependencies RECORD; BEGIN IF p_childModule_ID = p_parentModule_ID THEN RETURN 'Y'; END IF; SELECT VERSION INTO v_childVersion FROM AD_Module WHERE AD_Module_ID = p_childModule_ID; FOR Cur_Dependencies IN (SELECT * FROM AD_Module_Dependency WHERE AD_Module_ID = p_parentModule_ID) LOOP IF Cur_Dependencies.IsIncluded='N' --Check just dependencies, not inclusions AND Cur_Dependencies.AD_Dependent_Module_ID = p_childModule_ID AND ((Cur_Dependencies.endVersion IS NULL AND Cur_Dependencies.startVersion = v_childVersion) OR (Cur_Dependencies.endVersion IS NOT NULL AND v_childVersion BETWEEN Cur_Dependencies.startVersion AND Cur_Dependencies.endVersion)) THEN RETURN 'Y'; END IF; IF AD_MODULE_DEPENDENT(p_childModule_ID, Cur_Dependencies.AD_Dependent_Module_ID) = 'Y' THEN --check it recursively, to find dependencies in child modules RETURN 'Y'; END IF; END LOOP; RETURN 'N'; EXCEPTION WHEN OTHERS THEN RETURN 'N'; END ; $$ LANGUAGE plpgsql; sDROP FUNCTION public.ad_module_dependent(p_childmodule_id character varying, p_parentmodule_id character varying); publictadfalse23416O125595236ad_module_translation_trg()FUNCTION(CREATE FUNCTION ad_module_translation_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO v_Aux FROM AD_WINDOW T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_TAB T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_FIELD T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_ELEMENT T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_TEXTINTERFACES T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_MESSAGE T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_FORM T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_MENU T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_WORKFLOW T WHERE T.AD_MODULE_ID = new.AD_MODULE_ID; IF v_Aux > 0 AND new.istranslationrequired='N' THEN RAISE EXCEPTION '%', 'The module has User Interface artifacts, translation required must be set to Yes (checked).' ; --OBTG:-20103-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.ad_module_translation_trg(); publictadfalse23416P125595238ad_module_trg()FUNCTION CREATE FUNCTION ad_module_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ V_Char char; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Tranlsation management IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Module_Trl ( AD_Module_Trl_ID, AD_Module_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Description, Help, License, IsTranslated ) SELECT get_uuid(), new.AD_Module_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Description, new.Help, new.License, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y' and (AD_Language.AD_Language != new.ad_language or new.ad_language is null); END IF; IF TG_OP = 'UPDATE' THEN IF new.IsRegistered ='Y' AND (COALESCE(NEW.NAME, '.') <> COALESCE(NEW.NAME, '.') OR COALESCE(NEW.TYPE, '.') <> COALESCE(NEW.TYPE, '.') OR COALESCE(NEW.JAVAPACKAGE, '.') <> COALESCE(NEW.JAVAPACKAGE, '.')) THEN RAISE EXCEPTION '%', 'Cannot modify registered module.'; --OBTG:-20534-- END IF; IF(COALESCE(old.License, '.') <> COALESCE(NEW.License, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) THEN UPDATE AD_Module_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Module_ID=new.AD_Module_ID; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; &DROP FUNCTION public.ad_module_trg(); publictadfalse23416Q125595240ad_module_version_trg()FUNCTION.CREATE FUNCTION ad_module_version_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v1 VARCHAR(10); v2 VARCHAR(10); v3 VARCHAR(10); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF instr(new.VERSION,'.') <= 0 OR instr(new.VERSION,'.',1,2) <= 0 OR instr(new.VERSION,'.',1,3) > 0 THEN RAISE EXCEPTION '%', 'The version has to be formatted like x.y.z where x, y and z are integers.'; --OBTG:-20104-- END IF; v1 := SUBSTR(new.VERSION,1,instr(new.VERSION,'.')-1); v2 := SUBSTR(new.VERSION,instr(new.VERSION,'.')+1,instr(new.VERSION,'.',1,2)-instr(new.VERSION,'.')-1); v3 := SUBSTR(new.VERSION,instr(new.VERSION,'.',1,2)+1); IF TRIM(TRANSLATE(v1, '0123456789','')) <> '' OR TRIM(TRANSLATE(v2, '0123456789','')) <> '' OR TRIM(TRANSLATE(v3, '0123456789','')) <> '' THEN RAISE EXCEPTION '%', 'The version has to be formatted like x.y.z where x, y and z are integers.'; --OBTG:-20104-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_module_version_trg(); publictadfalse23416125595244ad_org_acctschema_trg()FUNCTIONCREATE FUNCTION ad_org_acctschema_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_num NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT AD_ORG_CHK_SCHEMAS() INTO v_num FROM DUAL; IF (v_num = -1) THEN RAISE EXCEPTION '%', 'Every legal entity must have itself or an ancestor at least an accounting schema attached to it'; --OBTG:-20542-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_org_acctschema_trg(); publictadfalse23416]125536440ad_org_chk_calendar()FUNCTION CREATE FUNCTION ad_org_chk_calendar() RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; v_num_calendars INTEGER; v_calendar_id ad_org.c_calendar_id%TYPE; v_calendar_id_old ad_org.c_calendar_id%TYPE; --TYPE RECORD IS REFCURSOR; cur_org_le RECORD; BEGIN -- Get Legal Entities with accounting FOR cur_org_le IN ( SELECT ad_org.ad_org_id FROM ad_org, ad_orgtype WHERE IsLegalEntity='Y' AND IsReady='Y' AND IsAcctLegalEntity='Y' AND ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id ) LOOP -- The number of calendars must be < 1 SELECT COUNT(DISTINCT c_calendar_id), COALESCE(MAX(c_calendar_id), 'NO CALENDAR') INTO v_num_calendars, v_calendar_id FROM ad_org WHERE AD_ISORGINCLUDED(ad_org.ad_org_id, cur_org_le.ad_org_id, ad_org.ad_client_id)<>-1 AND IsReady='Y'; IF (v_num_calendars>1) THEN RETURN -2; END IF; v_calendar_id_old := v_calendar_id; v_node_id := cur_org_le.ad_org_id; v_parent_id := 'XX'; WHILE ( v_parent_id <> '0' AND v_node_id <> '0' ) LOOP SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id AND IsReady='Y' ); SELECT COALESCE(ad_org.c_calendar_id, 'NO CALENDAR') INTO v_calendar_id FROM ad_org WHERE ad_org_id=v_parent_id; IF ((v_calendar_id_old <> v_calendar_id) AND ((v_calendar_id_old <> 'NO CALENDAR') AND (v_calendar_id <> 'NO CALENDAR' ))) THEN RETURN -1; END IF; IF (v_calendar_id<>'NO CALENDAR') THEN v_num_calendars:= v_num_calendars+1; v_calendar_id_old:= v_calendar_id; END IF; v_node_id:=v_parent_id; END LOOP; IF (v_num_calendars=0) THEN RETURN -3; END IF; END LOOP; RETURN 0; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_org_chk_calendar(); publictadfalse23416_125536441ad_org_chk_doc_payments(character varying, character varying, character varying, character varying, character varying, character varying)FUNCTION8CREATE FUNCTION ad_org_chk_doc_payments(p_header_table character varying, p_lines_table character varying, p_document_id character varying, p_header_column_id character varying, p_lines_column_id character varying, p_lines_column_payment_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_org_header_id ad_org.ad_org_id%TYPE; v_isbusinessunit ad_orgtype.isbusinessunit%TYPE; v_islegalentity ad_orgtype.islegalentity%TYPE; v_is_included NUMERIC:=0; v_dyn_cur VARCHAR(2000); TYPE_Ref REFCURSOR; cur_doc_lines_payment TYPE_REF%TYPE; v_line_org_payment VARCHAR(32); v_org_payment_line_id VARCHAR(32); BEGIN -- Gets the Business Unit or Legal Entity of the document SELECT AD_GET_DOC_LE_BU(p_header_table, p_document_id, p_header_column_id, NULL) INTO v_org_header_id FROM DUAL; v_dyn_cur:='SELECT DISTINCT(C_DEBT_PAYMENT.ad_org_id) AS v_line_org_payment FROM '||p_header_table||', '||p_lines_table||', C_DEBT_PAYMENT WHERE '||p_header_table||'.'||p_header_column_id||' = '||p_lines_table||'.'||p_lines_column_id||' AND C_DEBT_PAYMENT.C_DEBT_PAYMENT_ID='||p_lines_table||'.'||p_lines_column_payment_id||' AND '||p_lines_table||'.ad_org_id<>'||''''||v_org_header_id||''' AND '||p_lines_table||'.'||p_lines_column_id||'='||''''||p_document_id||''''; -- Check the payments of the lines belong to the same BU or LE as the document header OPEN cur_doc_lines_payment FOR EXECUTE v_dyn_cur; LOOP FETCH cur_doc_lines_payment INTO v_line_org_payment; IF NOT FOUND THEN EXIT; END IF; SELECT ad_orgtype.isbusinessunit, ad_orgtype.islegalentity INTO v_isbusinessunit, v_islegalentity FROM AD_Org, AD_OrgType WHERE AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_line_org_payment; v_org_payment_line_id:=v_line_org_payment; -- Gets recursively the organization parent until finding a Business Unit or a Legal Entity WHILE (v_isbusinessunit='N' AND v_islegalentity='N') LOOP SELECT hh.parent_id, ad_orgtype.isbusinessunit, ad_orgtype.islegalentity INTO v_org_payment_line_id, v_isbusinessunit, v_islegalentity FROM ad_org, ad_orgtype, ad_treenode pp, ad_treenode hh WHERE pp.node_id = hh.parent_id AND hh.ad_tree_id = pp.ad_tree_id AND pp.node_id=ad_org.ad_org_id AND hh.node_id=v_org_payment_line_id AND ad_org.ad_orgtype_id=ad_orgtype.ad_orgtype_id AND ad_org.isready='Y' AND EXISTS (SELECT 1 FROM ad_tree WHERE ad_tree.treetype='OO' AND hh.ad_tree_id=ad_tree.ad_tree_id AND hh.ad_client_id=ad_tree.ad_client_id); END LOOP; IF (v_org_payment_line_id<>v_org_header_id) THEN v_is_included:=-1; END IF; EXIT WHEN v_is_included=-1; END LOOP; CLOSE cur_doc_lines_payment; RETURN v_is_included; END; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_org_chk_doc_payments(p_header_table character varying, p_lines_table character varying, p_document_id character varying, p_header_column_id character varying, p_lines_column_id character varying, p_lines_column_payment_id character varying); publictadfalse23416125536443sad_org_chk_documents(character varying, character varying, character varying, character varying, character varying)FUNCTION CREATE FUNCTION ad_org_chk_documents(p_header_table character varying, p_lines_table character varying, p_document_id character varying, p_header_column_id character varying, p_lines_column_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_org_header_id ad_org.ad_org_id%TYPE; v_isbusinessunit ad_orgtype.isbusinessunit%TYPE; v_islegalentity ad_orgtype.islegalentity%TYPE; v_is_included NUMERIC:=0; v_dyn_cur VARCHAR(2000); TYPE_Ref REFCURSOR; cur_doc_lines TYPE_REF%TYPE; v_line_org VARCHAR(32); v_org_line_id VARCHAR(32); BEGIN -- Gets the Business Unit or Legal Entity of the document SELECT AD_GET_DOC_LE_BU(p_header_table, p_document_id, p_header_column_id, NULL) INTO v_org_header_id FROM DUAL; v_dyn_cur:='SELECT DISTINCT('||p_lines_table||'.ad_org_id) AS v_line_org FROM '||p_header_table||', '||p_lines_table||' WHERE '||p_header_table||'.'||p_header_column_id||' = '||p_lines_table||'.'||p_lines_column_id||' AND '||p_lines_table||'.ad_org_id<>'||''''||v_org_header_id||''' AND '||p_lines_table||'.'||p_lines_column_id||'='||''''||p_document_id||''''; OPEN cur_doc_lines FOR EXECUTE v_dyn_cur; LOOP FETCH cur_doc_lines INTO v_line_org; IF NOT FOUND THEN EXIT; END IF; SELECT ad_orgtype.isbusinessunit, ad_orgtype.islegalentity INTO v_isbusinessunit, v_islegalentity FROM AD_Org, AD_OrgType WHERE AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_line_org; v_org_line_id:=v_line_org; -- Gets recursively the organization parent until finding a Business Unit or a Legal Entity WHILE (v_isbusinessunit='N' AND v_islegalentity='N') LOOP SELECT hh.parent_id, ad_orgtype.isbusinessunit, ad_orgtype.islegalentity INTO v_org_line_id, v_isbusinessunit, v_islegalentity FROM ad_org, ad_orgtype, ad_treenode pp, ad_treenode hh WHERE pp.node_id = hh.parent_id AND hh.ad_tree_id = pp.ad_tree_id AND pp.node_id=ad_org.ad_org_id AND hh.node_id=v_org_line_id AND ad_org.ad_orgtype_id=ad_orgtype.ad_orgtype_id AND ad_org.isready='Y' AND EXISTS (SELECT 1 FROM ad_tree WHERE ad_tree.treetype='OO' AND hh.ad_tree_id=ad_tree.ad_tree_id AND hh.ad_client_id=ad_tree.ad_client_id); END LOOP; IF (v_org_line_id<>v_org_header_id) THEN v_is_included:=-1; END IF; EXIT WHEN v_is_included=-1; END LOOP; CLOSE cur_doc_lines; RETURN v_is_included; END; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_org_chk_documents(p_header_table character varying, p_lines_table character varying, p_document_id character varying, p_header_column_id character varying, p_lines_column_id character varying); publictadfalse23416^125536444#ad_org_chk_ready(character varying)FUNCTIONCREATE FUNCTION ad_org_chk_ready(p_ad_org_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ready_count INTEGER:=0; v_count INTEGER:=0; v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; v_isready ad_org.isready%TYPE; BEGIN v_node_id := p_ad_org_id; v_parent_id := 'XX'; -- Has any of the parents IsReady='N' WHILE (v_parent_id <> '0' AND v_node_id <> '0') LOOP v_count:=v_count+1; SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id ); SELECT ad_org.isready INTO v_isready FROM ad_org WHERE ad_org.ad_org_id = v_parent_id; IF (v_isready='Y') THEN v_ready_count:=v_ready_count+1; END IF; v_node_id:=v_parent_id; END LOOP; IF (v_count <> v_ready_count) THEN RETURN -1; ELSE RETURN 0; END IF; END ; $$ LANGUAGE plpgsql; FDROP FUNCTION public.ad_org_chk_ready(p_ad_org_id character varying); publictadfalse23416`125536445ad_org_chk_schemas()FUNCTION4 CREATE FUNCTION ad_org_chk_schemas() RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_countschemas INTEGER:=1; v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; --TYPE RECORD IS REFCURSOR; cur_org_le RECORD; BEGIN -- Get Legal Entities with accounting FOR cur_org_le IN ( SELECT ad_org.ad_org_id FROM ad_org, ad_orgtype WHERE IsLegalEntity='Y' AND IsReady='Y' AND IsAcctLegalEntity='Y' AND ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id ) LOOP SELECT COUNT(c_acctschema_id) INTO v_countschemas FROM ad_org_acctschema WHERE ad_org_acctschema.ad_org_id = cur_org_le.ad_org_id; v_node_id := cur_org_le.ad_org_id; v_parent_id := 'XX'; WHILE ( v_parent_id <> '0' AND v_node_id <> '0' AND v_countschemas<1 ) LOOP SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id AND AD_Org.IsReady='Y' ); SELECT COUNT(c_acctschema_id)+v_countschemas INTO v_countschemas FROM ad_org_acctschema WHERE ad_org_acctschema.ad_org_id = v_parent_id; v_node_id:=v_parent_id; END LOOP; IF (v_countschemas<1 ) THEN RETURN -1; END IF; END LOOP; RETURN v_countschemas; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_org_chk_schemas(); publictadfalse23416a125536446*ad_org_getcalendarowner(character varying)FUNCTION[ CREATE FUNCTION ad_org_getcalendarowner(p_organization character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* * It returns the organization that owns the calendar for the p_organization Organization. * If no calendar is found, it returns NULL. */ v_calendar_id AD_Org.C_Calendar_ID%TYPE; v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; BEGIN SELECT C_Calendar_ID, AD_Org_ID INTO v_calendar_id, v_parent_id FROM AD_Org WHERE AD_Org_ID=p_organization; IF (v_calendar_id IS NOT NULL) THEN RETURN v_parent_id; ELSE v_node_id:=p_organization; WHILE ( v_parent_id <> '0' AND v_node_id <> '0' ) LOOP SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id ); SELECT C_Calendar_ID, AD_Org_ID INTO v_calendar_id, v_parent_id FROM AD_Org WHERE AD_Org_ID=v_parent_id; IF (v_calendar_id IS NOT NULL) THEN RETURN v_parent_id; END IF; v_node_id:=v_parent_id; END LOOP; END IF; RETURN NULL; END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.ad_org_getcalendarowner(p_organization character varying); publictadfalse23416b125536447/ad_org_getperiodcontrolallow(character varying)FUNCTION CREATE FUNCTION ad_org_getperiodcontrolallow(p_organization character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* * It returns the organization that is period control allowed for the p_organization Organization. * If no organization is found, it returns NULL. */ v_isperiodcontrolallowed AD_Org.IsPeriodControlAllowed%TYPE; v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; BEGIN SELECT IsPeriodControlAllowed, AD_Org_ID INTO v_isperiodcontrolallowed, v_parent_id FROM AD_Org WHERE AD_Org_ID=p_organization; IF (v_isperiodcontrolallowed='Y') THEN RETURN v_parent_id; ELSE v_node_id:=p_organization; WHILE ( v_parent_id <> '0' AND v_node_id <> '0' ) LOOP SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id ); SELECT IsPeriodControlAllowed, AD_Org_ID INTO v_isperiodcontrolallowed, v_parent_id FROM AD_Org WHERE AD_Org_ID=v_parent_id; IF (v_isperiodcontrolallowed='Y') THEN RETURN v_parent_id; END IF; v_node_id:=v_parent_id; END LOOP; END IF; RETURN NULL; END ; $$ LANGUAGE plpgsql; UDROP FUNCTION public.ad_org_getperiodcontrolallow(p_organization character varying); publictadfalse23416c125536448ad_org_ready(character varying)FUNCTIONe"CREATE FUNCTION ad_org_ready(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_IsRecursive AD_Org.IsActive%TYPE:='N'; v_IsAcctLE AD_ORGTYPE.IsAcctLegalEntity%TYPE:='N'; v_isperiodcontrol AD_Org.IsPeriodControlAllowed%TYPE; v_calendar_id AD_Org.C_Calendar_ID%TYPE; v_num NUMERIC; --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; CUR_PeriodControl RECORD; Cur_Org RECORD; BEGIN RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='Cascade') THEN v_IsRecursive:=Cur_Parameter.P_String; RAISE NOTICE '%',' Cascade=' || v_IsRecursive ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter v_ResultStr:='Updating Ready Flag'; IF (v_IsRecursive='Y') THEN UPDATE AD_ORG SET ISREADY='Y' WHERE AD_ISORGINCLUDED(ad_org.ad_org_id, v_Record_ID, ad_org.ad_client_id)<>-1 AND IsReady='N'; ELSE UPDATE AD_ORG SET ISREADY='Y' WHERE AD_ORG_ID=v_Record_ID; END IF; v_ResultStr:='Checking Ready'; SELECT AD_ORG_CHK_READY(v_Record_ID) INTO v_num FROM DUAL; IF (v_num = -1) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'Every ancestor of the organization must be a ready organization'; --OBTG:-20545-- END IF; v_ResultStr:='Checking LE'; SELECT AD_ORGTYPE_ISTRANS_ALLOWED() INTO v_num FROM DUAL; IF (v_num <> 1) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'Every organization where transactions are possible must have one and only one ancestor (including itself) that is a legal entity'; --OBTG:-20540-- END IF; v_ResultStr:='Checking BU'; SELECT AD_ORGTYPE_ISLE_ISBU() INTO v_num FROM DUAL; IF (v_num > 1) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'Each organization can have one and only one ancestor (including itself) that is a business unit'; --OBTG:-20541-- ELSIF (v_num = -1) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'A business unit must have one and only one ancestor that is a legal entity'; --OBTG:-20546-- END IF; v_ResultStr:='Checking Schemas'; SELECT AD_ORG_CHK_SCHEMAS() INTO v_num FROM DUAL; IF (v_num = -1) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'Every legal entity with accounting must have itself or an ancestor at least an accounting schema attached to it'; --OBTG:-20542-- END IF; v_ResultStr:='Checking Calendar'; SELECT AD_ORG_CHK_CALENDAR() INTO v_num FROM DUAL; IF (v_num = -3) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'Every legal entity with accounting must have itself or an ancestor at least a calendar attached to it'; --OBTG:-20537-- ELSIF (v_num = -2) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'All the organizations that belong to the same legal entity must have a unique calendar'; --OBTG:-20538-- ELSIF (v_num = -1) THEN -- ROLLBACK; v_Result:=0; RAISE EXCEPTION '%', 'The calendar associated to a legal entity must be unique. So, an organization that is a legal entity must have assigned itself or any ancestor the same calendar'; --OBTG:-20539-- END IF; -- Create PeriodControl for the organization IF (v_IsRecursive='N') THEN SELECT IsPeriodControlAllowed, C_Calendar_ID, AD_Client_ID INTO v_isperiodcontrol, v_calendar_id, v_Client_ID FROM AD_Org WHERE AD_Org_ID=v_Record_ID; IF ( v_isperiodcontrol = 'Y') THEN FOR CUR_PeriodControl IN (SELECT Value, a.C_Period_ID as Period FROM AD_Ref_List , (select c_period_id from c_period, c_year where c_year.c_year_id= c_period.c_year_id and c_year.c_calendar_id = COALESCE(v_calendar_id,(SELECT C_CALENDAR_ID FROM AD_ORG WHERE AD_ORG_ID = AD_ORG_GETCALENDAROWNER(v_Record_ID)))) a WHERE AD_Reference_ID='183' ORDER BY 1) LOOP INSERT INTO C_PeriodControl ( C_PeriodControl_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Period_ID, DocBaseType, PeriodStatus, PeriodAction, Processing ) VALUES ( get_uuid(), v_Client_ID, v_Record_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', CUR_PeriodControl.Period, CUR_PeriodControl.Value, 'N', 'N', NULL ) ; END LOOP; END IF; ELSIF (v_IsRecursive='Y') THEN SELECT AD_Client_ID INTO v_Client_ID FROM AD_Org WHERE AD_Org_ID=v_Record_ID; FOR Cur_Org IN (SELECT AD_Org_ID FROM AD_Org A WHERE AD_ISORGINCLUDED(AD_Org_ID, v_Record_ID, v_Client_ID)<>-1 AND IsPeriodControlallowed='Y' AND NOT EXISTS (SELECT 1 FROM C_PeriodControl WHERE C_PeriodControl.AD_Org_ID=A.AD_Org_ID) ) LOOP FOR CUR_PeriodControl IN (SELECT Value, a.C_Period_ID as Period FROM AD_Ref_List , (select c_period_id from c_period, c_year where c_year.c_year_id= c_period.c_year_id and c_year.c_calendar_id = (SELECT C_CALENDAR_ID FROM AD_ORG WHERE AD_ORG_ID = AD_ORG_GETCALENDAROWNER(Cur_Org.AD_Org_ID))) a WHERE AD_Reference_ID='183' ORDER BY 1) LOOP INSERT INTO C_PeriodControl ( C_PeriodControl_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Period_ID, DocBaseType, PeriodStatus, PeriodAction, Processing ) VALUES ( get_uuid(), v_Client_ID, Cur_Org.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', CUR_PeriodControl.Period, CUR_PeriodControl.Value, 'N', 'N', NULL ) ; END LOOP; END LOOP; END IF; IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','Finished ' || v_Message ; END IF; EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; END; END ; $$ LANGUAGE plpgsql; EDROP FUNCTION public.ad_org_ready(p_pinstance_id character varying); publictadfalse23416125595246 ad_org_trg()FUNCTIONCREATE FUNCTION ad_org_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ v_xTree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xParent_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; CUR_PeriodControl RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT') THEN -- Add to all roles of the client INSERT INTO AD_Role_OrgAccess ( AD_Role_OrgAccess_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy ) SELECT get_uuid(), AD_Role_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.CreatedBy FROM AD_Role WHERE AD_Client_ID=new.AD_Client_ID AND IsManual='N'; -- Create TreeNode -- -- get AD_Tree_ID + ParentID SELECT c.AD_Tree_Org_ID, n.Node_ID INTO v_xTree_ID, v_xParent_ID FROM AD_ClientInfo c, AD_TreeNode n WHERE c.AD_Tree_Org_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=new.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||' Node='||:new.AD_Org_ID||' Parent='||v_xParent_ID); -- Insert into TreeNode INSERT INTO AD_TreeNode ( ad_treeNode_Id, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, v_xTree_ID, new.AD_Org_ID, v_xParent_ID,( CASE new.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; -- Summary Nodes first -- Org Info INSERT INTO AD_OrgInfo ( AD_Org_ID, AD_Client_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Location_ID, Duns, TaxID ) VALUES ( new.AD_Org_ID, new.AD_Client_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.CreatedBy, NULL, '?', '?' ) ; ELSIF(TG_OP = 'DELETE') THEN -- Delete TreeNode -- -- get AD_Tree_ID SELECT c.AD_Tree_Org_ID INTO v_xTree_ID FROM AD_ClientInfo c WHERE c.AD_Client_ID=old.AD_Client_ID; DELETE FROM AD_TREENODE WHERE AD_CLIENT_ID=old.AD_Client_ID AND AD_Tree_ID=v_xTree_ID AND Node_ID=old.AD_Org_ID; END IF; -- Deleting IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'AD_Org InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20014-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; #DROP FUNCTION public.ad_org_trg(); publictadfalse23416d125536451ad_orglist(character varying)FUNCTIONCREATE FUNCTION ad_orglist(p_roleid character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return the list (comma separated) of Organizations granted to the role ************************************************************************/ v_orgList VARCHAR(4000) ; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Roles RECORD; BEGIN v_orgList := ''; FOR Cur_Roles IN (SELECT AD_Org_ID FROM AD_ROLE_ORGACCESS WHERE AD_ROLE_ID = p_roleID ORDER BY AD_Org_ID ) LOOP v_orgList:=v_orgList||','||Cur_Roles.AD_Org_ID; END LOOP; RETURN SUBSTR(v_orgList, 2, 4000) ; END ; $$ LANGUAGE plpgsql; =DROP FUNCTION public.ad_orglist(p_roleid character varying); publictadfalse23416e125536452ad_orgtype_isle_isbu()FUNCTION!CREATE FUNCTION ad_orgtype_isle_isbu() RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_bu_count INTEGER; v_le_count INTEGER; v_isbusinessunit ad_orgtype.isbusinessunit%TYPE; v_islegalentity ad_orgtype.islegalentity%TYPE; v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; v_isready ad_org.isready%TYPE; --TYPE RECORD IS REFCURSOR; cur_org RECORD; BEGIN -- Every Ready Org without a child FOR cur_org IN (SELECT ad_org.ad_org_id AS ad_org_id FROM ad_org WHERE ISREADY='Y' AND NOT EXISTS (SELECT 1 FROM ad_treenode pp, ad_treenode hh WHERE pp.node_id = hh.parent_id AND hh.ad_tree_id = pp.ad_tree_id AND hh.parent_id=ad_org.ad_org_id AND EXISTS (SELECT 1 FROM ad_tree WHERE treetype='OO' AND hh.Ad_tree_id=ad_tree.ad_tree_id)) ) LOOP SELECT ad_orgtype.isbusinessunit INTO v_isbusinessunit FROM ad_orgtype, ad_org WHERE ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id AND ad_org.ad_org_id = cur_org.ad_org_id; -- Is the Org a business unit v_bu_count:=0; IF (v_isbusinessunit='Y') THEN v_bu_count:=v_bu_count+1; END IF; v_le_count:=0; v_node_id := cur_org.ad_org_id; v_parent_id := 'XX'; -- Is any of the parents a business unit WHILE (v_parent_id <> '0' AND v_node_id <> '0') LOOP SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id ); SELECT ad_orgtype.isbusinessunit, ad_orgtype.islegalentity, ad_org.isready INTO v_isbusinessunit, v_islegalentity, v_isready FROM ad_orgtype, ad_org WHERE ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id AND ad_org.ad_org_id = v_parent_id; IF (v_isbusinessunit='Y' AND v_isready='Y') THEN v_bu_count:=v_bu_count+1; END IF; IF (v_bu_count<2 AND v_islegalentity='Y' AND v_isready='Y') THEN v_le_count:=v_le_count+1; END IF; v_node_id:=v_parent_id; END LOOP; IF (v_bu_count > 1 ) THEN RETURN v_bu_count; END IF; IF (v_bu_count=1 AND v_le_count <> 1) THEN RETURN -1; END IF; END LOOP; RETURN v_bu_count; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.ad_orgtype_isle_isbu(); publictadfalse23416f125536453ad_orgtype_istrans_allowed()FUNCTION CREATE FUNCTION ad_orgtype_istrans_allowed() RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_le_count INTEGER; v_islegalentity ad_orgtype.islegalentity%TYPE; v_parent_id ad_treenode.parent_id%TYPE; v_node_id ad_treenode.parent_id%TYPE; v_isready ad_org.isready%TYPE; --TYPE RECORD IS REFCURSOR; cur_tree_org RECORD; BEGIN FOR cur_tree_org IN ( SELECT ad_org.ad_org_id AS ad_org_id FROM ad_org, ad_orgtype WHERE IStransactionsallowed='Y' AND ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id AND ISREADY='Y' ) LOOP SELECT ad_orgtype.islegalentity INTO v_islegalentity FROM ad_orgtype, ad_org WHERE ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id AND ad_org.ad_org_id = cur_tree_org.ad_org_id; -- Is the Org a legal entity v_le_count:=0; IF (v_islegalentity='Y') THEN v_le_count:=v_le_count+1; END IF; v_node_id := cur_tree_org.ad_org_id; v_parent_id := 'XX'; -- Is any of the parents a legal entity WHILE (v_parent_id <> '0' AND v_node_id <> '0') LOOP SELECT parent_id INTO v_parent_id FROM ad_treenode t WHERE node_id=v_node_id AND EXISTS (SELECT 1 FROM ad_tree, ad_org WHERE ad_tree.ad_client_id = ad_org.ad_client_id AND ad_tree.ad_client_id=t.ad_client_id AND ad_tree.treetype='OO' AND t.ad_tree_id=ad_tree.ad_tree_id ); SELECT ad_orgtype.islegalentity, ad_org.isready INTO v_islegalentity, v_isready FROM ad_orgtype, ad_org WHERE ad_org.ad_orgtype_id= ad_orgtype.ad_orgtype_id AND ad_org.ad_org_id = v_parent_id; IF (v_islegalentity='Y' AND v_isready='Y') THEN v_le_count:=v_le_count+1; END IF; v_node_id:=v_parent_id; END LOOP; IF (v_le_count <> 1) THEN RETURN v_le_count; END IF; END LOOP; RETURN v_le_count; END ; $$ LANGUAGE plpgsql; 3DROP FUNCTION public.ad_orgtype_istrans_allowed(); publictadfalse23416R125595242ad_orgtype_trg()FUNCTIONCREATE FUNCTION ad_orgtype_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_num NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (new.IsLegalEntity<>old.IsLegalEntity OR new.IsBusinessUnit<>old.IsBusinessUnit OR new.IsAcctLegalEntity<>old.IsAcctLegalEntity OR new.IsTransactionsAllowed<>old.IsTransactionsAllowed) THEN SELECT COUNT(AD_Org.AD_Org_ID) INTO v_num FROM AD_Org WHERE AD_Org.AD_OrgType_ID=new.AD_OrgType_ID AND AD_Org.IsReady='Y'; IF (v_num>0) THEN RAISE EXCEPTION '%','The selected Organization Type is currently associated with a ready Organization'; --OBTG:-20544-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_orgtype_trg(); publictadfalse23416125595248ad_package_jp_trg()FUNCTIONCREATE FUNCTION ad_package_jp_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Aux NUMERIC; v_Type VARCHAR(60); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT Type INTO v_type FROM AD_MODULE WHERE AD_MODULE_ID = new.AD_Module_ID; IF v_type = 'T' THEN RAISE EXCEPTION '%', '@DataPackageNotAllowedInTemplate@'; --OBTG:-20000-- END IF; SELECT COUNT(*) INTO v_Aux FROM AD_MODULE M WHERE M.AD_MODULE_ID = new.AD_MODULE_ID AND instr(upper(new.javapackage), upper(M.javapackage)) = 1 AND instr(upper(new.javapackage), upper(M.javapackage)) = 1; IF v_Aux = 0 THEN RAISE EXCEPTION '%', 'The java package of the Data Package must be within the java package of its module.' ; --OBTG:-20102-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_package_jp_trg(); publictadfalse23416125595250ad_package_mod_trg()FUNCTION CREATE FUNCTION ad_package_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Package_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Package_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.JavaPackage , '.') != COALESCE(OLD.JavaPackage , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR COALESCE(NEW.Isactive , '.') != COALESCE(OLD.Isactive , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_package_mod_trg(); publictadfalse23416h125536457Oad_parent_menu_element(character varying, character varying, character varying)FUNCTIONa CREATE FUNCTION ad_parent_menu_element(p_nodeid character varying, p_clientid character varying, p_language character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return 'Org Level' if orgID is a leaf of the org tree * where parentOrgID is the root. Else return -1 ************************************************************************/ v_treeID VARCHAR(32) ; --OBTG:varchar2-- v_Parent varchar(32) ; --OBTG:varchar2-- v_Name VARCHAR(1000) ; --OBTG:VARCHAR2-- BEGIN SELECT MAX(AD_TREE_MENU_ID) INTO v_treeID FROM AD_CLIENTINFO WHERE AD_CLIENT_ID=p_clientID; SELECT MAX(PARENT_ID), MAX(case when AD_MENU_TRL.NAME IS NULL then AD_MENU.NAME else AD_MENU_TRL.NAME end) INTO v_Parent, v_Name FROM AD_TREENODE, AD_MENU left join AD_MENU_TRL on AD_MENU.AD_MENU_ID = AD_MENU_TRL.AD_MENU_ID AND AD_MENU_TRL.AD_LANGUAGE = p_Language WHERE AD_TREE_ID = v_TreeID AND NODE_ID = p_NodeID AND NODE_ID = AD_MENU.AD_MENU_ID; WHILE v_Parent IS NOT NULL LOOP IF v_Parent = '0' THEN RETURN v_Name; END IF; SELECT MAX(PARENT_ID), MAX(case when AD_MENU_TRL.NAME IS NULL then AD_MENU.NAME else AD_MENU_TRL.NAME end) || ' || ' || v_Name INTO v_Parent, v_Name FROM AD_TREENODE, AD_MENU left join AD_MENU_TRL on AD_MENU.AD_MENU_ID = AD_MENU_TRL.AD_MENU_ID AND AD_MENU_TRL.AD_LANGUAGE = p_Language WHERE AD_TREE_ID = v_TreeID AND NODE_ID = v_Parent AND NODE_ID = AD_MENU.AD_MENU_ID; END LOOP; RETURN(v_Name) ; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_parent_menu_element(p_nodeid character varying, p_clientid character varying, p_language character varying); publictadfalse23416i1255364584ad_parent_tree(character varying, character varying)FUNCTIONCREATE FUNCTION ad_parent_tree(p_tree_id character varying, p_node_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ p VARCHAR(32767); --OBTG:VARCHAR2-- vp VARCHAR(32); --OBTG:VARCHAR2-- BEGIN SELECT parent_id INTO vp FROM ad_treenode WHERE node_id = p_node_id AND ad_tree_id = p_tree_id; p := ad_parent_tree(p_tree_id, vp); IF p != ' ' THEN RETURN '|'||vp||'|'||p; END IF; RETURN '|'||vp||'|'; EXCEPTION WHEN OTHERS THEN RETURN ' '; END ; $$ LANGUAGE plpgsql; _DROP FUNCTION public.ad_parent_tree(p_tree_id character varying, p_node_id character varying); publictadfalse23416125595252ad_process_mod_trg()FUNCTIONCREATE FUNCTION ad_process_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Process_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Process_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Value , '.') != COALESCE(OLD.Value , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.AccessLevel , '.') != COALESCE(OLD.AccessLevel , '.') OR COALESCE(NEW.IsUserStartable , '.') != COALESCE(OLD.IsUserStartable , '.') OR COALESCE(NEW.ProcedureName , '.') != COALESCE(OLD.ProcedureName , '.') OR COALESCE(NEW.IsReport , '.') != COALESCE(OLD.IsReport , '.') OR COALESCE(NEW.IsDirectPrint , '.') != COALESCE(OLD.IsDirectPrint , '.') OR COALESCE(NEW.Classname , '.') != COALESCE(OLD.Classname , '.') OR COALESCE(NEW.IsBackground , '.') != COALESCE(OLD.IsBackground , '.') OR COALESCE(NEW.IsJasper , '.') != COALESCE(OLD.IsJasper , '.') OR COALESCE(NEW.Jrname , '.') != COALESCE(OLD.Jrname , '.') OR COALESCE(NEW.Service_Type , '.') != COALESCE(OLD.Service_Type , '.') OR COALESCE(NEW.Isexternalservice , '.') != COALESCE(OLD.Isexternalservice , '.') OR COALESCE(NEW.Service_Source , '.') != COALESCE(OLD.Service_Source , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_process_mod_trg(); publictadfalse23416125595254ad_process_para_mod_trg()FUNCTIONjCREATE FUNCTION ad_process_para_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Process_ID; ELSE cuerrentID := old.AD_Process_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_PROCESS T WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_PROCESS_ID = cuerrentID; IF (TG_OP = 'UPDATE' AND devTemplate='0' AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.AD_Process_ID , '.') != COALESCE(OLD.AD_Process_ID , '.') OR COALESCE(NEW.SeqNo , 0) != COALESCE(OLD.SeqNo , 0) OR COALESCE(NEW.AD_Reference_ID , '.') != COALESCE(OLD.AD_Reference_ID , '.') OR COALESCE(NEW.AD_Reference_Value_ID , '.') != COALESCE(OLD.AD_Reference_Value_ID , '.') OR COALESCE(NEW.AD_Val_Rule_ID , '.') != COALESCE(OLD.AD_Val_Rule_ID , '.') OR COALESCE(NEW.ColumnName , '.') != COALESCE(OLD.ColumnName , '.') OR COALESCE(NEW.IsCentrallyMaintained , '.') != COALESCE(OLD.IsCentrallyMaintained , '.') OR COALESCE(NEW.FieldLength , 0) != COALESCE(OLD.FieldLength , 0) OR COALESCE(NEW.IsMandatory , '.') != COALESCE(OLD.IsMandatory , '.') OR COALESCE(NEW.IsRange , '.') != COALESCE(OLD.IsRange , '.') OR COALESCE(NEW.DefaultValue , '.') != COALESCE(OLD.DefaultValue , '.') OR COALESCE(NEW.DefaultValue2 , '.') != COALESCE(OLD.DefaultValue2 , '.') OR COALESCE(NEW.VFormat , '.') != COALESCE(OLD.VFormat , '.') OR COALESCE(NEW.ValueMin , '.') != COALESCE(OLD.ValueMin , '.') OR COALESCE(NEW.ValueMax , '.') != COALESCE(OLD.ValueMax , '.') OR COALESCE(NEW.AD_Element_ID , '.') != COALESCE(OLD.AD_Element_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 0DROP FUNCTION public.ad_process_para_mod_trg(); publictadfalse23416125595256ad_process_para_trg()FUNCTION CREATE FUNCTION ad_process_para_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Process_Para_Trg.sql,v 1.3 2002/10/21 04:49:47 jjanke Exp $ *** * Title: Parameter Trigger * Description: * Translation ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Process_Para Trigger -- for Translation IF (TG_OP = 'INSERT') THEN -- Create Translation Row INSERT INTO AD_Process_Para_Trl (AD_Process_Para_Trl_ID, AD_Process_Para_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, NAME, Description, HELP, IsTranslated) SELECT get_uuid(), NEW.AD_Process_Para_ID, AD_Language.AD_Language, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, NEW.NAME, NEW.Description, NEW.HELP, 'N' FROM AD_Language, ad_module m, ad_process p WHERE AD_Language.IsActive = 'Y' AND IsSystemLanguage = 'Y' AND M.AD_Module_ID = p.AD_Module_ID and p.ad_process_id = new.ad_process_id AND M.AD_Language != AD_Language.AD_Language; END IF; -- Inserting -- AD_Process_Para update trigger -- synchronize name,... IF (TG_OP = 'UPDATE') THEN IF ( COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') OR COALESCE (OLD.Description, '.') <> COALESCE (NEW.Description, '.') OR COALESCE (OLD.HELP, '.') <> COALESCE (NEW.HELP, '.') ) THEN UPDATE AD_Process_Para_Trl SET IsTranslated = 'N', Updated = TO_DATE(NOW()) WHERE AD_Process_Para_ID = NEW.AD_Process_Para_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_process_para_trg(); publictadfalse23416125595258ad_process_request_trg()FUNCTIONCREATE FUNCTION ad_process_request_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (OLD.STATUS = 'Scheduled') THEN RAISE EXCEPTION '%','Unable to delete Process Request whilst still scheduled.'; --OBTG:-20630-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.ad_process_request_trg(); publictadfalse23416125595260ad_process_trg()FUNCTION:CREATE FUNCTION ad_process_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Process_Trg.sql,v 1.3 2002/09/16 04:14:40 jjanke Exp $ *** * Title: Process Trigger * Description: * Synchronize Names and Translation * Sync IsActive with Menu / Field ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Process Trigger -- for Translation -- add Access IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Process_Trl (AD_Process_Trl_ID, AD_Process_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, NAME, Description, HELP, IsTranslated) SELECT get_uuid(), NEW.AD_Process_ID, AD_Language.AD_Language, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, NEW.NAME, NEW.Description, NEW.HELP, 'N' FROM AD_Language, ad_module m WHERE AD_Language.IsActive = 'Y' AND IsSystemLanguage = 'Y' and m.ad_module_id = new.ad_module_id and m.ad_language != AD_Language.AD_Language; -- Add Access for all Roles INSERT INTO AD_Process_Access (AD_Process_Access_ID, AD_Process_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), NEW.AD_Process_ID, r.AD_Role_ID, r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_Role r where isManual='N'; END IF; -- Inserting -- AD_Process update trigger -- synchronize name,... -- update AD_Column/AD_Field Name IF TG_OP = 'UPDATE' THEN IF( COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') OR COALESCE (OLD.Description, '.') <> COALESCE (NEW.Description, '.') OR COALESCE (OLD.HELP, '.') <> COALESCE (NEW.HELP, '.') ) THEN UPDATE AD_Process_Trl SET IsTranslated = 'N', Updated = TO_DATE(NOW()) WHERE AD_Process_ID = NEW.AD_Process_ID; UPDATE AD_Column SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, Updated = TO_DATE(NOW()) WHERE AD_Process_ID = NEW.AD_Process_ID and exists (select 1 from ad_module m, ad_module m1 where m.ad_module_id = ad_column.ad_module_id and m1.ad_module_id = new.ad_module_id and m1.ad_language = m.ad_language); UPDATE AD_Field SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, Updated = TO_DATE(NOW()) WHERE EXISTS ( SELECT 1 FROM AD_Column c, ad_module m, ad_module m1 WHERE AD_Field.AD_Column_ID = c.AD_Column_ID AND c.AD_Process_ID = NEW.AD_Process_ID AND AD_Field.IsCentrallyMaintained = 'Y' and m.ad_module_id = AD_Field.ad_module_id and m1.ad_module_id = new.ad_module_id and m1.ad_language = m1.ad_language); UPDATE AD_Field_trl SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, Updated = TO_DATE(NOW()), istranslated = 'Y' WHERE EXISTS ( SELECT 1 FROM AD_Column c, ad_module m, ad_module m1, ad_field WHERE AD_Field.AD_Column_ID = c.AD_Column_ID AND c.AD_Process_ID = NEW.AD_Process_ID AND AD_Field.IsCentrallyMaintained = 'Y' and m.ad_module_id = AD_Field.ad_module_id and m1.ad_module_id = new.ad_module_id and m1.ad_language != m1.ad_language); END IF; END IF; -- Updating -- Changed IsActive IF TG_OP = 'UPDATE' THEN IF ( COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') OR COALESCE (OLD.Description, '.') <> COALESCE (NEW.Description, '.') OR COALESCE (OLD.HELP, '.') <> COALESCE (NEW.HELP, '.') OR COALESCE (OLD.IsActive, '.') <> COALESCE (NEW.IsActive, '.') ) THEN IF NEW.IsActive <> OLD.IsActive THEN -- Menu UPDATE AD_Menu SET IsActive = NEW.IsActive WHERE AD_Process_ID = NEW.AD_Process_ID; -- AD_Column -> Field UPDATE AD_Field SET IsActive = NEW.IsActive WHERE AD_Column_ID = (SELECT AD_Column_ID FROM AD_Column WHERE AD_Process_ID = NEW.AD_Process_ID); -- AD_WF_Node END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_process_trg(); publictadfalse23416125595263ad_process_trl_trg()FUNCTION CREATE FUNCTION ad_process_trl_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * AD_Process_Trl update trigger * synchronize name,... with Field if centrally maintained */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF ( COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') OR COALESCE (OLD.Description, '.') <> COALESCE (NEW.Description, '.') OR COALESCE (OLD.HELP, '.') <> COALESCE (NEW.HELP, '.') OR COALESCE (OLD.IsTranslated, '.') <> COALESCE (NEW.IsTranslated, '.') ) THEN UPDATE AD_Field_Trl SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, IsTranslated = NEW.IsTranslated, Updated = TO_DATE(NOW()) WHERE AD_Language = NEW.AD_Language AND AD_Field_ID IN ( SELECT F.AD_Field_ID FROM AD_Field F, AD_Column C, ad_module m WHERE F.AD_Column_ID = C.AD_Column_ID AND C.AD_Process_ID = NEW.AD_Process_ID AND F.IsCentrallyMaintained = 'Y' and m.ad_module_id = f.ad_module_id and m.ad_language = new.ad_language); UPDATE AD_Field f SET NAME = NEW.NAME, Description = NEW.Description, HELP = NEW.HELP, Updated = TO_DATE(NOW()) WHERE AD_Field_ID IN ( SELECT F.AD_Field_ID FROM AD_Column C, ad_module m WHERE F.AD_Column_ID = C.AD_Column_ID AND C.AD_Process_ID = NEW.AD_Process_ID AND F.IsCentrallyMaintained = 'Y' and m.ad_module_id = f.ad_module_id and m.ad_language = new.ad_language); --column cannot be updated because of mutating tables END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_process_trl_trg(); publictadfalse23416125595271ad_ref_list_mod_trg()FUNCTION CREATE FUNCTION ad_ref_list_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Value , '.') != COALESCE(OLD.Value , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.AD_Reference_ID , '.') != COALESCE(OLD.AD_Reference_ID , '.') OR COALESCE(NEW.ValidFrom , TO_DATE('01-01-1900', 'DD-MM-YYYY')) != COALESCE(OLD.ValidFrom , TO_DATE('01-01-1900', 'DD-MM-YYYY')) OR COALESCE(NEW.ValidTo , TO_DATE('01-01-1900', 'DD-MM-YYYY')) != COALESCE(OLD.ValidTo , TO_DATE('01-01-1900', 'DD-MM-YYYY')) OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_ref_list_mod_trg(); publictadfalse23416125595273ad_ref_list_trg()FUNCTION4CREATE FUNCTION ad_ref_list_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Ref_List_Trg.sql,v 1.2 2003/02/18 03:33:22 jjanke Exp $ *** * Title: Ref List Translation * Description: ************************************************************************/ v_aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --In case the value is in a different module than its reference check the value --starts with that module's dbprefix or in case it is a value for skins list --it starts with the module's java package. SELECT count(*) INTO v_Aux FROM AD_REFERENCE R WHERE R.AD_REFERENCE_ID = new.AD_REFERENCE_ID AND R.AD_MODULE_ID != new.AD_Module_ID AND NOT EXISTS (SELECT 1 FROM AD_MODULE_DBPREFIX P WHERE P.AD_MODULE_ID = new.AD_Module_ID AND instr(upper(new.value), upper(P.name)||'_') = 1) AND NOT (new.AD_REFERENCE_ID = '800102' AND EXISTS (SELECT 1 FROM AD_MODULE M2 WHERE M2.AD_MODULE_ID = NEW.AD_MODULE_ID AND instr(upper(new.VALUE), upper(M2.JAVAPACKAGE))=1)); IF v_Aux != 0 THEN RAISE EXCEPTION '%', '@ListValueDBPrefix@' ; --OBTG:-20000-- END IF; -- Insert AD_Ref_List Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Ref_List_Trl ( AD_Ref_List_Trl_ID, AD_Ref_List_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, IsTranslated ) SELECT get_uuid(), new.AD_Ref_List_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, 'N' FROM AD_Language, AD_Module M, ad_reference r WHERE AD_Language.IsActive='Y' AND AD_Language.IsSystemLanguage='Y' AND M.AD_Module_ID = r.AD_Module_ID and r.ad_reference_id = new.ad_reference_id AND M.AD_Language != AD_Language.AD_Language; END IF; -- Inserting -- AD_Ref_List update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.')) THEN UPDATE AD_Ref_List_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Ref_List_ID=new.AD_Ref_List_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; (DROP FUNCTION public.ad_ref_list_trg(); publictadfalse23416125595276ad_ref_search_column_mod_trg()FUNCTION CREATE FUNCTION ad_ref_search_column_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Ref_Search_Column_ID; cuerrentModuleID := new.AD_Ref_Search_ID; ELSE cuerrentID := old.AD_Ref_Search_Column_ID; cuerrentModuleID := OLD.AD_Ref_Search_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_REFERENCE T, AD_REF_SEARCH T1 WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_REFERENCE_ID = T1.AD_REFERENCE_ID AND T1.AD_REF_SEARCH_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Ref_Search_ID , '.') != COALESCE(OLD.AD_Ref_Search_ID , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.ColumnName , '.') != COALESCE(OLD.ColumnName , '.') OR COALESCE(NEW.Columntype , '.') != COALESCE(OLD.Columntype , '.') OR COALESCE(NEW.Column_Suffix , '.') != COALESCE(OLD.Column_Suffix , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 5DROP FUNCTION public.ad_ref_search_column_mod_trg(); publictadfalse23416125595278ad_ref_search_mod_trg()FUNCTION0 CREATE FUNCTION ad_ref_search_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Ref_Search_ID; cuerrentModuleID := new.AD_Reference_ID; ELSE cuerrentID := old.AD_Ref_Search_ID; cuerrentModuleID := old.AD_Reference_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_REFERENCE T WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_REFERENCE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Reference_ID , '.') != COALESCE(OLD.AD_Reference_ID , '.') OR COALESCE(NEW.AD_Table_ID , '.') != COALESCE(OLD.AD_Table_ID , '.') OR COALESCE(NEW.AD_Column_ID , '.') != COALESCE(OLD.AD_Column_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_ref_search_mod_trg(); publictadfalse23416125595280ad_ref_table_mod_trg()FUNCTION CREATE FUNCTION ad_ref_table_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Reference_ID; cuerrentModuleID := NEW.AD_Reference_ID; ELSE cuerrentID := old.AD_Reference_ID; cuerrentModuleID := old.AD_Reference_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_REFERENCE T WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_REFERENCE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.AD_Table_ID , '.') != COALESCE(OLD.AD_Table_ID , '.') OR COALESCE(NEW.AD_Key , '.') != COALESCE(OLD.AD_Key , '.') OR COALESCE(NEW.AD_Display , '.') != COALESCE(OLD.AD_Display , '.') OR COALESCE(NEW.IsValueDisplayed , '.') != COALESCE(OLD.IsValueDisplayed , '.') OR COALESCE(NEW.WhereClause , '.') != COALESCE(OLD.WhereClause , '.') OR COALESCE(NEW.OrderByClause , '.') != COALESCE(OLD.OrderByClause , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.ad_ref_table_mod_trg(); publictadfalse23416125595265ad_reference_mod_trg()FUNCTIONCREATE FUNCTION ad_reference_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Reference_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Reference_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.VFormat , '.') != COALESCE(OLD.VFormat , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR COALESCE(NEW.PARENTREFERENCE_ID,'.') != COALESCE(OLD.PARENTREFERENCE_ID,'.') OR COALESCE(NEW.MODEL_IMPL ,'.') != COALESCE(OLD.MODEL_IMPL ,'.') OR COALESCE(NEW.WAD_IMPL ,'.') != COALESCE(OLD.WAD_IMPL ,'.') OR COALESCE(NEW.UI_IMPL ,'.') != COALESCE(OLD.UI_IMPL ,'.') OR NEW.ISBASEREFERENCE != OLD.ISBASEREFERENCE ) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN IF NEW.ISBASEREFERENCE = 'N' AND NEW.PARENTREFERENCE_ID IS NULL THEN RAISE EXCEPTION '%', '@IF_NOT_BASE_THEN_PARENT_MANDATORY@'; --OBTG:-20000-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.ad_reference_mod_trg(); publictadfalse23416125595267ad_reference_trg()FUNCTION CREATE FUNCTION ad_reference_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Reference Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Reference_Trl ( AD_Reference_Trl_ID, AD_Reference_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, NAME, Description, HELP, IsTranslated) SELECT get_uuid(), NEW.AD_Reference_ID, AD_Language.AD_Language, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, NEW.NAME, NEW.Description, NEW.HELP, 'N' FROM AD_Language, AD_Module M WHERE AD_Language.IsActive = 'Y' AND IsSystemLanguage = 'Y' AND M.AD_Module_ID = new.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; END IF; -- Inserting -- AD_Reference update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF ( COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') OR COALESCE (OLD.Description, '.') <> COALESCE (NEW.Description, '.') OR COALESCE (OLD.HELP, '.') <> COALESCE (NEW.HELP, '.') ) THEN UPDATE AD_Reference_Trl SET IsTranslated = 'N', Updated = TO_DATE(NOW()) WHERE AD_Reference_ID = NEW.AD_Reference_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.ad_reference_trg(); publictadfalse23416125595269ad_reference_trg2()FUNCTIONE CREATE FUNCTION ad_reference_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID VARCHAR(32); --OBTG:varchar2-- v_WindowName VARCHAR(60):= 'info'; --OBTG:VARCHAR2-- v_ClassName VARCHAR(60); --OBTG:VARCHAR2-- v_JavaPackage VARCHAR(500); --OBTG:varchar2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'DELETE') THEN IF OLD.PARENTREFERENCE_ID='30' AND OLD.ISACTIVE='Y' THEN DELETE FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_REFERENCE_ID=old.AD_REFERENCE_ID AND ACTION = 'S'); DELETE FROM AD_MODEL_OBJECT WHERE ACTION = 'S' AND AD_MODEL_OBJECT.AD_REFERENCE_ID = OLD.AD_REFERENCE_ID; END IF; END IF; IF (TG_OP = 'INSERT') THEN IF NEW.PARENTREFERENCE_ID='30' AND NEW.ISACTIVE='Y' THEN IF new.AD_Module_ID != '0' THEN SELECT ad_mapping_format(javapackage||'.info') INTO v_javapackage FROM AD_MODULE WHERE AD_Module_ID = new.AD_Module_ID; v_WindowName := v_javapackage; ELSE v_javapackage := 'org.openbravo.erpCommon.info'; END IF; v_ClassName := AD_MAPPING_FORMAT(TO_CHAR(NEW.NAME)); v_ID := get_uuid(); INSERT INTO AD_MODEL_OBJECT (AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_REFERENCE_ID, CLASSNAME, ISDEFAULT) VALUES (v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'S', new.AD_REFERENCE_ID, v_javapackage || '.' || v_ClassName, 'Y'); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (get_uuid(), new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, ('/' || v_WindowName || '/' || v_ClassName || '.html'), 'Y'); END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_reference_trg2(); publictadfalse23416125595282ad_registration_info_trg()FUNCTIONCREATE FUNCTION ad_registration_info_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC:= 0; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO v_Count FROM AD_REGISTRATION_INFO; IF (v_Count <> 0) THEN RAISE EXCEPTION '%','Only one registration permitted.'; --OBTG:-20528-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 1DROP FUNCTION public.ad_registration_info_trg(); publictadfalse23416125595284ad_role_orgaccess_trg()FUNCTION0 CREATE FUNCTION ad_role_orgaccess_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Role_OrgAccess_Trg.sql,v 1.3 2003/05/04 06:46:07 jjanke Exp $ *** * Title: Update AD_Role.OrgList / ClientList * for all Roles as otherwise mutating trigger * Description: ************************************************************************/ --TYPE RECORD IS REFCURSOR; CUR_Role RECORD; Cur_Org RECORD; v_ClientList VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_OrgList VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Client_ID VARCHAR(32):=-1; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- For each Role FOR CUR_Role IN (SELECT * FROM AD_Role FOR UPDATE) LOOP v_ClientList:=''; v_OrgList:=''; v_Client_ID:=-1; -- Assemble Client/OrgList FOR Cur_Org IN ( SELECT AD_Client_ID, AD_Org_ID FROM AD_Role_OrgAccess WHERE AD_Role_ID=CUR_Role.AD_Role_ID AND IsActive='Y' ORDER BY AD_Client_ID, AD_Org_ID ) LOOP IF(v_Client_ID <> Cur_Org.AD_Client_ID) THEN v_Client_ID:=Cur_Org.AD_Client_ID; IF(LENGTH(v_ClientList) <> 0) THEN v_ClientList:=v_ClientList || ','; END IF; v_ClientList:=v_ClientList || Cur_Org.AD_Client_ID; END IF; -- Org IF(LENGTH(v_OrgList) <> 0) THEN v_OrgList:=v_OrgList || ','; END IF; v_OrgList:=v_OrgList || Cur_Org.AD_Org_ID; END LOOP; -- Org -- IF(v_ClientList IS NULL OR LENGTH(v_ClientList)=0) THEN v_ClientList:=' '; END IF; IF(v_OrgList IS NULL OR LENGTH(v_OrgList)=0) THEN v_OrgList:=' '; END IF; RAISE NOTICE '%',CUR_Role.Name || ': Client=' || CUR_Role.ClientList || '->' || v_ClientList || ' - Org= ' || CUR_Role.OrgList || '->' || v_OrgList ; -- Update Role UPDATE AD_Role SET ClientList=v_ClientList, OrgList=v_OrgList WHERE AD_ROLE.AD_ROLE_ID=CUR_Role.AD_ROLE_ID; END LOOP; -- Role IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_role_orgaccess_trg(); publictadfalse23416125595286 ad_role_trg()FUNCTIONp CREATE FUNCTION ad_role_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Role_Trg.sql,v 1.5 2003/07/22 05:41:26 jjanke Exp $ *** * Title: Role Setup * Description: * - Create Role_OrgAccess + User_Roles * - Insert Access for Role ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF NOT(COALESCE(OLD.UserLevel,'.')<>COALESCE(NEW.UserLevel,'.')) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; IF (TG_OP = 'INSERT') THEN NULL; ELSIF (new.IsManual = 'Y') THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; ELSE -- Window DELETE FROM AD_Window_Access WHERE AD_Role_ID = new.AD_Role_ID; -- Process DELETE FROM AD_Process_Access WHERE AD_Role_ID = new.AD_Role_ID; -- Form DELETE FROM AD_Form_Access WHERE AD_Role_ID = new.AD_Role_ID; -- WorkFlow DELETE FROM AD_WorkFlow_Access WHERE AD_Role_ID = new.AD_Role_ID; END IF; /** * Fill AD_Window_Access + AD_Process_Access * --------------------------------------------------------------------------- * SCO# Levels S__ 100 4 System info * SCO 111 7 System shared info * SC_ 110 6 System/Client info * _CO 011 3 Client shared info * __O 001 1 Organization info * Roles: * S 4,7,6 * _CO 7,6,3,1 * __O 3,1,7 */ -- System IF (new.UserLevel='S') AND (new.IsManual <> 'Y') THEN -- Window INSERT INTO AD_Window_Access (AD_Window_Access_ID, AD_Window_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), w.AD_Window_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM (select distinct w.ad_window_id from AD_Window w, AD_Tab t, AD_Table tt WHERE w.AD_Window_ID=t.AD_Window_ID AND t.AD_Table_ID=tt.AD_Table_ID AND tt.AccessLevel IN ('4','7','6')) w; -- Process INSERT INTO AD_Process_Access ( AD_Process_Access_ID, AD_Process_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), p.AD_Process_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_Process p WHERE AccessLevel IN ('4','7','6'); -- Form INSERT INTO AD_Form_Access (AD_Form_Access_ID, AD_Form_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), f.AD_Form_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_Form f WHERE AccessLevel IN ('4','7','6'); -- Workflow INSERT INTO AD_WorkFlow_Access (AD_WorkFlow_Access_ID, AD_WorkFlow_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), w.AD_WorkFlow_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_WorkFlow w WHERE AccessLevel IN ('4','7','6'); -- Client/Org ELSIF (new.UserLevel=' CO' OR new.UserLevel=' C') AND (new.IsManual <> 'Y') THEN -- Window INSERT INTO AD_Window_Access ( AD_Window_Access_ID, AD_Window_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), w.AD_Window_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM (select distinct w.ad_window_id from AD_Window w, AD_Tab t, AD_Table tt WHERE w.AD_Window_ID=t.AD_Window_ID AND t.AD_Table_ID=tt.AD_Table_ID AND tt.AccessLevel IN ('7','6','3','1') AND w.AD_Window_ID NOT IN ('100','102','165','187')) w; -- Process INSERT INTO AD_Process_Access (AD_Process_Access_ID, AD_Process_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT DISTINCT get_uuid(), p.AD_Process_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_Process p WHERE AccessLevel IN ('7','6','3','1'); -- Form INSERT INTO AD_Form_Access (AD_Form_Access_ID, AD_Form_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), f.AD_Form_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_Form f WHERE AccessLevel IN ('7','6','3','1'); -- Workflow INSERT INTO AD_WorkFlow_Access (AD_WorkFlow_Access_ID, AD_WorkFlow_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), w.AD_WorkFlow_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_WorkFlow w WHERE AccessLevel IN ('7','6','3','1'); -- Organization ELSIF (new.UserLevel=' O') AND (new.IsManual <> 'Y') THEN -- Window INSERT INTO AD_Window_Access (AD_Window_Access_ID, AD_Window_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), w.AD_Window_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM (select distinct w.aD_window_id from AD_Window w, AD_Tab t, AD_Table tt WHERE w.AD_Window_ID=t.AD_Window_ID AND t.AD_Table_ID=tt.AD_Table_ID AND tt.AccessLevel IN ('3','1','7')) w; -- Process INSERT INTO AD_Process_Access (AD_Process_Access_ID, AD_Process_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), p.AD_Process_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_Process p WHERE AccessLevel IN ('3','1','7'); -- Form INSERT INTO AD_Form_Access (AD_Form_Access_ID, AD_Form_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), f.AD_Form_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_Form f WHERE AccessLevel IN ('3','1','7'); -- Workflow INSERT INTO AD_WorkFlow_Access (AD_WorkFlow_Access_ID, AD_WorkFlow_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), w.AD_WorkFlow_ID, new.AD_Role_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.UpdatedBy, TO_DATE(NOW()), new.UpdatedBy, 'Y' FROM AD_WorkFlow w WHERE AccessLevel IN ('3','1','7'); END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; $DROP FUNCTION public.ad_role_trg(); publictadfalse23416k125536480&ad_script_disable_constraints(numeric)FUNCTIONCREATE FUNCTION ad_script_disable_constraints(p_seqnostart numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_seqNo NUMERIC := p_seqNoStart; Cur_Constraints RECORD; BEGIN RAISE NOTICE '%','ad_script_disable_constraints'; FOR Cur_Constraints IN (SELECT TABLE_NAME, CONSTRAINT_NAME FROM USER_CONSTRAINTS C1 WHERE CONSTRAINT_TYPE IN ('P','U','R') --AND DELETE_RULE NOT LIKE 'C' ORDER BY (CASE CONSTRAINT_TYPE WHEN 'R' THEN 1 WHEN 'U' THEN 2 WHEN 'P' THEN 3 END), TABLE_NAME, CONSTRAINT_NAME) LOOP v_seqNo := v_seqNo + 1; --INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TABLE '||Cur_Constraints.TABLE_NAME||' DISABLE CONSTRAINT '||Cur_Constraints.CONSTRAINT_NAME); INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TABLE '||Cur_Constraints.TABLE_NAME||' DROP CONSTRAINT '||Cur_Constraints.CONSTRAINT_NAME); END LOOP; RETURN v_seqNo+1; END; $$ LANGUAGE plpgsql; JDROP FUNCTION public.ad_script_disable_constraints(p_seqnostart numeric); publictadfalse23416125536481#ad_script_disable_triggers(numeric)FUNCTIONCREATE FUNCTION ad_script_disable_triggers(p_seqnostart numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_seqNo NUMERIC := p_seqNoStart; Cur_Triggers RECORD; BEGIN FOR Cur_Triggers IN (SELECT OBJECT_NAME AS NAME, TABLE_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TRIGGER' ORDER BY OBJECT_NAME) LOOP v_seqNo := v_seqNo + 1; -- INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TRIGGER '||Cur_Triggers.NAME||' DISABLE'); INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TABLE '||Cur_Triggers.TABLE_NAME||' DISABLE TRIGGER '||Cur_Triggers.NAME); END LOOP; RETURN v_seqNo; END; $$ LANGUAGE plpgsql; GDROP FUNCTION public.ad_script_disable_triggers(p_seqnostart numeric); publictadfalse23416125536482&ad_script_drop_recreate_index(numeric)FUNCTION CREATE FUNCTION ad_script_drop_recreate_index(p_seqnostart numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_seqNo NUMERIC := p_seqNoStart; v_strTemp VARCHAR(4000):=''; v_strSql VARCHAR(4000):=''; Cur_UniqueIndex RECORD; Cur_IndexColumns RECORD; BEGIN FOR Cur_UniqueIndex IN (SELECT i.INDEX_NAME, i.TABLE_NAME, i.TABLESPACE_NAME, CONSTRAINT_TYPE FROM USER_INDEXES I left join USER_CONSTRAINTS C1 on c1.INDEX_NAME=I.INDEX_NAME WHERE UNIQUENESS='UNIQUE' AND INDEX_TYPE='NORMAL' AND TABLE_TYPE='TABLE' --AND CONSTRAINT_TYPE != 'U' ORDER BY INDEX_NAME) LOOP v_seqNo:=v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'DROP INDEX '||Cur_UniqueIndex.INDEX_NAME) ; IF Cur_UniqueIndex.CONSTRAINT_TYPE != 'P' THEN v_strSql:='CREATE INDEX '||Cur_UniqueIndex.INDEX_NAME||' ON '||Cur_UniqueIndex.TABLE_NAME||'('; v_strTemp:=''; FOR Cur_IndexColumns IN (SELECT COLUMN_NAME FROM USER_IND_COLUMNS WHERE INDEX_NAME=Cur_UniqueIndex.INDEX_NAME ORDER BY COLUMN_POSITION) LOOP v_strTemp:=v_strTemp ||','|| Cur_IndexColumns.COLUMN_NAME; END LOOP; v_strSql:=v_strSql || SUBSTR(v_strTemp, 2, 4000) || ') '; INSERT INTO AD_SCRIPT_SQL VALUES(v_seqNo+150000, v_strSql) ; END IF; END LOOP; RETURN v_seqNo; END; $$ LANGUAGE plpgsql; JDROP FUNCTION public.ad_script_drop_recreate_index(p_seqnostart numeric); publictadfalse23416l125536483%ad_script_enable_constraints(numeric)FUNCTIONg CREATE FUNCTION ad_script_enable_constraints(p_seqnostart numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_seqNo NUMERIC := p_seqNoStart; Cur_Constraints RECORD; BEGIN -- Make sure all foreign keys are satisfied FOR Cur_Constraints IN (SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE, DELETE_RULE, COLUMN_NAMES, FK_TABLE, FK_COLUMN_NAMES, FK_MATCHTYPE FROM USER_CONSTRAINTS C1 WHERE CONSTRAINT_TYPE = 'R' --AND DELETE_RULE = 'C' ) LOOP v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo+100000, 'DELETE FROM '||Cur_Constraints.TABLE_NAME||' WHERE '||Cur_Constraints.COLUMN_NAMES|| ' IS NOT NULL AND ' ||Cur_Constraints.COLUMN_NAMES|| ' IN (' || ' SELECT ' ||Cur_Constraints.COLUMN_NAMES || ' FROM ' || Cur_Constraints.TABLE_NAME || ' EXCEPT ' || ' SELECT ' ||Cur_Constraints.FK_COLUMN_NAMES || ' FROM ' || Cur_Constraints.FK_TABLE || ')' ); END LOOP; FOR Cur_Constraints IN (SELECT TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE, DELETE_RULE, COLUMN_NAMES, FK_TABLE, FK_COLUMN_NAMES, FK_MATCHTYPE FROM USER_CONSTRAINTS C1 WHERE CONSTRAINT_TYPE IN ('P','U','R') --AND DELETE_RULE NOT LIKE 'C' ORDER BY (CASE CONSTRAINT_TYPE WHEN 'R' THEN 3 WHEN 'U' THEN 2 WHEN 'P' THEN 1 END), TABLE_NAME, CONSTRAINT_NAME) LOOP v_seqNo := v_seqNo + 1; INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo+100000, 'ALTER TABLE '||Cur_Constraints.TABLE_NAME||' ADD CONSTRAINT '||Cur_Constraints.CONSTRAINT_NAME|| (CASE Cur_Constraints.CONSTRAINT_TYPE WHEN 'P' THEN ' PRIMARY KEY ('||Cur_Constraints.COLUMN_NAMES||')' WHEN 'U' THEN ' UNIQUE ('||Cur_Constraints.COLUMN_NAMES||')' WHEN 'R' THEN ' FOREIGN KEY ('||Cur_Constraints.COLUMN_NAMES||') REFERENCES '||Cur_Constraints.FK_TABLE||' ('||Cur_Constraints.FK_COLUMN_NAMES||') '|| (CASE Cur_Constraints.FK_MATCHTYPE WHEN 'f' THEN ' MATCH FULL' WHEN 'p' THEN ' MATCH PARTIAL' ELSE '' END) || (CASE Cur_Constraints.DELETE_RULE WHEN 'N' THEN ' ON DELETE SET NULL' WHEN 'D' THEN ' ON DELETE SET DEFAULT' WHEN 'C' THEN ' ON DELETE CASCADE' ELSE '' END) END)); END LOOP; RETURN v_seqNo + 100001; END; $$ LANGUAGE plpgsql; IDROP FUNCTION public.ad_script_enable_constraints(p_seqnostart numeric); publictadfalse23416125536484"ad_script_enable_triggers(numeric)FUNCTIONCREATE FUNCTION ad_script_enable_triggers(p_seqnostart numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_seqNo NUMERIC := p_seqNoStart; Cur_Triggers RECORD; BEGIN FOR Cur_Triggers IN (SELECT OBJECT_NAME AS NAME, TABLE_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TRIGGER' ORDER BY OBJECT_NAME) LOOP v_seqNo := v_seqNo + 1; -- INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo, 'ALTER TRIGGER '||Cur_Triggers.NAME||' ENABLE'); INSERT INTO AD_SCRIPT_SQL VALUES (v_seqNo+100000, 'ALTER TABLE '||Cur_Triggers.TABLE_NAME||' ENABLE TRIGGER '||Cur_Triggers.NAME); END LOOP; RETURN v_seqNo; END; $$ LANGUAGE plpgsql; FDROP FUNCTION public.ad_script_enable_triggers(p_seqnostart numeric); publictadfalse23416125536485$ad_script_execute(character varying)FUNCTION*CREATE FUNCTION ad_script_execute(param_message character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Message VARCHAR(4000) := ''; v_ResultStr VARCHAR(2000) := ''; Cur_Script RECORD; BEGIN v_Message := param_Message; FOR Cur_Script IN (SELECT STRSQL FROM AD_SCRIPT_SQL ORDER BY SEQNO) LOOP BEGIN RAISE NOTICE '%', Cur_Script.STRSQL; EXECUTE(Cur_Script.STRSQL); EXCEPTION WHEN OTHERS THEN IF (LENGTH(v_ResultStr || ': ' || SQLERRM || ' - ' ) < 1980) THEN v_ResultStr := v_ResultStr || ': ' || SQLERRM || ' - '; END IF; RAISE NOTICE '%',SQLERRM; END; END LOOP; IF( LENGTH(v_ResultStr) > 0 ) THEN RAISE NOTICE '%', 'Script errors: ' || v_ResultStr; END IF; return substr(coalesce(v_ResultStr,'') || coalesce(v_Message,''), 1, 2000); END; $$ LANGUAGE plpgsql; IDROP FUNCTION public.ad_script_execute(param_message character varying); publictadfalse23416m125536486@ad_sequence_doc(character varying, character varying, character)FUNCTION CREATE FUNCTION ad_sequence_doc(p_sequencename character varying, p_ad_client_id character varying, p_update_next character, OUT p_documentno character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Sequence_Doc.sql,v 1.6 2003/08/06 06:51:26 jjanke Exp $ *** * Title: Get the next DocumentNo of TableName * Description: * store in parameter p_DocumentNo * if ID < 1000000, use System Doc Sequence ************************************************************************/ v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_NextNoSys NUMERIC; v_Prefix VARCHAR(30) ; --OBTG:VARCHAR2-- v_Suffix VARCHAR(30) ; --OBTG:VARCHAR2-- BEGIN SELECT CurrentNext, Prefix, Suffix INTO v_NextNo, v_Prefix, v_Suffix FROM AD_Sequence WHERE Name=p_SequenceName AND IsActive='Y' AND IsTableID='N' AND IsAutoSequence='Y' AND AD_Client_ID=p_AD_Client_ID FOR UPDATE; --OBTG: OF CurrentNext-- IF p_Update_Next='Y' THEN UPDATE AD_Sequence SET CurrentNext=CurrentNext + IncrementNo, Updated=TO_DATE(NOW()) WHERE Name=p_SequenceName; END IF; p_DocumentNo:=COALESCE(v_Prefix, '') || v_NextNo || COALESCE(v_Suffix, '') ; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', '@DocumentSequenceNotFound@' || p_SequenceName ; --OBTG:-20000-- END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.ad_sequence_doc(p_sequencename character varying, p_ad_client_id character varying, p_update_next character, OUT p_documentno character varying); publictadfalse23416n125536487Dad_sequence_doctype(character varying, character varying, character)FUNCTIONr CREATE FUNCTION ad_sequence_doctype(p_doctype_id character varying, p_id character varying, p_update_next character, OUT p_documentno character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Sequence_DocType.sql,v 1.9 2003/08/06 06:51:27 jjanke Exp $ *** * Title: Get the next DocumentNo of Document Type * Description: * store in parameter p_DocumentNo * If ID < 1000000, use System Doc Sequence * If no Document Sequence is defined, return null ! * Use AD_Sequence_Doc('DocumentNo_myTable',.. to get it directly ************************************************************************/ v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_Sequence_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Prefix VARCHAR(30) ; --OBTG:VARCHAR2-- v_Suffix VARCHAR(30) ; --OBTG:VARCHAR2-- BEGIN -- Is a document Sequence defined and valid BEGIN SELECT DocNoSequence_ID INTO v_Sequence_ID FROM C_DocType WHERE C_DocType_ID=p_DocType_ID -- parameter AND IsDocNoControlled='Y' AND IsActive='Y'; EXCEPTION WHEN OTHERS THEN NULL; END; IF(v_Sequence_ID IS NULL) THEN -- No Sequence Number p_DocumentNo:= NULL; -- Return NULL RAISE NOTICE '%','[AD_Sequence_DocType: not found - C_DocType_ID=' || p_DocType_ID || ']' ; RETURN; END IF; -- Get the numbers SELECT s.AD_Sequence_ID, s.CurrentNext, s.Prefix, s.Suffix INTO v_Sequence_ID, v_NextNo, v_Prefix, v_Suffix FROM C_DocType d, AD_Sequence s WHERE d.C_DocType_ID=p_DocType_ID -- parameter AND d.DocNoSequence_ID=s.AD_Sequence_ID AND s.IsActive='Y' AND s.IsTableID='N' AND s.IsAutoSequence='Y' FOR UPDATE; --OBTG: OF CurrentNext-- IF p_Update_Next='Y' THEN UPDATE AD_Sequence SET CurrentNext=CurrentNext + IncrementNo WHERE AD_Sequence_ID=v_Sequence_ID; END IF; p_DocumentNo:=COALESCE(v_Prefix, '') || v_NextNo || COALESCE(v_Suffix, '') ; -- DBMS_OUTPUT.PUT_LINE(p_DocumentNo); EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', '@DocumentTypeSequenceNotFound@' ; --OBTG:-20000-- END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.ad_sequence_doctype(p_doctype_id character varying, p_id character varying, p_update_next character, OUT p_documentno character varying); publictadfalse23416o1255364886ad_sequence_next(character varying, character varying)FUNCTIONCREATE FUNCTION ad_sequence_next(p_tablename character varying, p_id character varying, OUT p_nextno character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Sequence_Next.sql,v 1.5 2003/08/06 06:51:27 jjanke Exp $ *** * Title: Get the next sequence number of TableName * This procedure is mantained only for backwards compatibility purposes: * use instead get_uuid() function ************************************************************************/ BEGIN p_NextNo := get_uuid(); END ; $_$ LANGUAGE plpgsql; ~DROP FUNCTION public.ad_sequence_next(p_tablename character varying, p_id character varying, OUT p_nextno character varying); publictadfalse23416p125536489%ad_sequence_nextno(character varying)FUNCTIONCREATE FUNCTION ad_sequence_nextno(p_tablename character varying) RETURNS character varying AS $$ DECLARE /****************************************************************************** * The contents of this file are subject to the Compiere License Version 1.1 * ("License"); You may not use this file except in compliance with the License * You may obtain a copy of the License at http://www.compiere.org/license.html * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo S.L. ******************************************************************************/ BEGIN RETURN get_uuid(); END ; $$ LANGUAGE plpgsql; HDROP FUNCTION public.ad_sequence_nextno(p_tablename character varying); publictadfalse23416r125536490ad_shortname(character varying)FUNCTIONCREATE FUNCTION ad_shortname(p_name character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: AD_ShortName ************************************************************************/ v_RetValue VARCHAR(2000) ; --OBTG:NVARCHAR2-- v_pos NUMERIC:=1; BEGIN v_RetValue:=SUBSTR(p_Name, 1, 1) ; WHILE(INSTR(REPLACE(p_Name, '.', ' '), ' ', v_pos+1) > 0) LOOP v_pos:=INSTR(REPLACE(p_Name, '.', ' '), ' ', v_pos+1) ; v_RetValue:=v_RetValue || SUBSTR(p_Name, v_pos+1, 1) ; END LOOP; RETURN v_RetValue; EXCEPTION WHEN OTHERS THEN RETURN TO_CHAR(v_pos) ; END ; $$ LANGUAGE plpgsql; =DROP FUNCTION public.ad_shortname(p_name character varying); publictadfalse23416h.00/FUNCTION ad_shortname(p_name character varying)COMMENTtCOMMENT ON FUNCTION ad_shortname(p_name character varying) IS '--OBTG:AD_SHORTNAMEfunc=NVARCHAR,p_name=NVARCHAR--'; publictadfalse114125556469!ad_synchronize(character varying)FUNCTIONCREATE FUNCTION ad_synchronize(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2010 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Syncronize.sql,v 1.12 2003/07/26 04:29:44 jjanke Exp $ *** * Title: Syncronize Application Dictionary * Description: * Synchronize Elements * Update Column and Field with Names from Element and Process * Update Process Parameters from Elements * Update Workflow Notes from Windows * Update Menu from Window/Form/Process/Task ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_TemplateInDev CHAR(1); -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_rowcount NUMERIC; v_count NUMERIC; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; END IF; BEGIN --BODY --------------------------------------------------------------------------- RAISE NOTICE '%','Adding missing Elements' ; DECLARE NextNo VARCHAR(32); --OBTG:varchar2-- Cur_Column RECORD; Cur_Process RECORD; BEGIN RAISE NOTICE '%','Column:' ; FOR Cur_Column IN (SELECT DISTINCT C.ColumnName, C.NAME, C.Description, C.Help, C.AD_Module_ID FROM AD_COLUMN c, ad_module m WHERE AD_Element_ID IS NULL AND C.AD_MODULE_ID = M.AD_MODULE_ID AND m.isindevelopment = 'Y' AND NOT EXISTS (SELECT 1 FROM AD_ELEMENT e WHERE UPPER(c.ColumnName)=UPPER(e.ColumnName) AND AD_Module_Dependent(e.AD_Module_ID, c.AD_Module_ID)='Y') ) LOOP SELECT * INTO NextNo FROM Ad_Sequence_Next('AD_Element', '0') ; -- get ID INSERT INTO AD_ELEMENT ( AD_ELEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ColumnName, NAME, PrintName, Description, Help, AD_Module_ID ) VALUES (NextNo, '0', '0', 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Column.ColumnName, Cur_Column.NAME, Cur_Column.NAME, Cur_Column.Description, Cur_Column.Help, Cur_Column.AD_Module_ID) ; RAISE NOTICE '%',' added ' || Cur_Column.ColumnName ; -- COMMIT; END LOOP; RAISE NOTICE '%','Parameter:' ; FOR Cur_Process IN (SELECT DISTINCT p.ColumnName, p.NAME, p.Description, p.Help, pr.AD_Module_ID FROM AD_PROCESS_PARA p, AD_PROCESS pr, AD_MODULE M WHERE AD_Element_ID IS NULL AND pr.AD_Process_ID = p.AD_Process_ID AND M.AD_MODULE_ID = PR.AD_MODULE_ID AND M.ISINDEVELOPMENT = 'Y' AND NOT EXISTS (SELECT 1 FROM AD_ELEMENT e WHERE UPPER(p.ColumnName)=UPPER(e.ColumnName) AND AD_Module_Dependent(e.AD_Module_ID, pr.AD_Module_ID)='Y') ) LOOP INSERT INTO AD_ELEMENT ( AD_ELEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ColumnName, NAME, PrintName, Description, Help, AD_Module_ID ) VALUES (get_uuid(), '0', '0', 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Process.ColumnName, Cur_Process.NAME, Cur_Process.NAME, Cur_Process.Description, Cur_Process.Help, Cur_Process.AD_Module_ID) ; RAISE NOTICE '%',' added ' || Cur_Process.ColumnName ; -- COMMIT; END LOOP; END; RAISE NOTICE '%','Adding missing Element Translations' ; INSERT INTO AD_ELEMENT_TRL ( AD_ELEMENT_TRL_ID, AD_Element_ID, AD_LANGUAGE, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, NAME, PrintName, Description, Help, IsTranslated ) SELECT get_uuid(), m.AD_Element_ID, l.AD_LANGUAGE, m.AD_Client_ID, m.AD_Org_ID, m.IsActive, m.Created, m.CreatedBy, m.Updated, m.UpdatedBy, m.NAME, m.PrintName, m.Description, m.Help, 'N' FROM AD_ELEMENT m, AD_LANGUAGE l, AD_MODULE WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND AD_MODULE.AD_MODULE_ID = M.AD_MODULE_ID AND AD_MODULE.ISINDEVELOPMENT = 'Y' AND L.AD_LANGUAGE != AD_MODULE.AD_LANGUAGE AND NOT EXISTS (SELECT 1 FROM AD_ELEMENT_TRL WHERE AD_ELEMENT_ID = M.AD_ELEMENT_ID AND AD_LANGUAGE = L.AD_LANGUAGE) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows added: ' || v_rowcount ; RAISE NOTICE '%','Deleting unused Elements' ; DELETE FROM AD_ELEMENT_TRL WHERE AD_Element_ID IN (SELECT AD_Element_ID FROM AD_ELEMENT e, AD_MODULE M WHERE M.AD_MODULE_ID = E.AD_MODULE_ID AND m.isindevelopment = 'Y' AND NOT EXISTS (SELECT 1 FROM AD_COLUMN c WHERE UPPER(e.ColumnName)=UPPER(c.ColumnName) OR e.AD_Element_ID=c.AD_Element_ID ) AND NOT EXISTS (SELECT 1 FROM AD_PROCESS_PARA p WHERE UPPER(e.ColumnName)=UPPER(p.ColumnName) OR e.AD_Element_ID=p.AD_Element_ID ) ) ; DELETE FROM AD_ELEMENT WHERE NOT EXISTS (SELECT 1 FROM AD_COLUMN c WHERE UPPER(AD_ELEMENT.ColumnName)=UPPER(c.ColumnName) OR AD_ELEMENT.AD_Element_ID=c.AD_Element_ID ) AND NOT EXISTS (SELECT 1 FROM AD_PROCESS_PARA p WHERE UPPER(AD_ELEMENT.ColumnName)=UPPER(p.ColumnName) OR AD_ELEMENT.AD_Element_ID=p.AD_Element_ID ) AND EXISTS (SELECT 1 FROM AD_MODULE WHERE AD_MODULE_ID = AD_ELEMENT.AD_MODULE_ID AND ISINDEVELOPMENT ='Y') ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows deleted: ' || v_rowcount ; RAISE NOTICE '%','Creating link from Column to Element' ; SELECT count(*) INTO v_rowcount FROM AD_MODULE WHERE TYPE = 'T' AND ISINDEVELOPMENT = 'Y'; IF v_rowcount = '0' THEN v_TemplateInDev:='N'; ELSE v_TemplateInDev:='Y'; END IF; --Updates ad_column: element id and name (name is only updated first time) --Name is updated with the value in the element regardless the language UPDATE AD_COLUMN c SET AD_Element_id=(SELECT MAX(AD_Element_ID) FROM AD_ELEMENT e WHERE UPPER(c.ColumnName)=UPPER(e.ColumnName) AND AD_Module_Dependent(e.AD_Module_ID, c.AD_Module_ID)='Y'), Name=(SELECT (CASE WHEN MT.AD_MODULE_ID = C.AD_MODULE_ID OR AD_ELEMENT.NAME LIKE P.NAME||'_%' THEN AD_ELEMENT.NAME ELSE 'EM_'||P.NAME||'_'||AD_ELEMENT.NAME END) FROM AD_ELEMENT, AD_MODULE_DBPREFIX P, AD_MODULE MT, AD_TABLE T, AD_PACKAGE PA WHERE AD_ELEMENT_ID = (SELECT MAX(AD_Element_ID) FROM AD_ELEMENT e WHERE UPPER(c.ColumnName)=UPPER(e.ColumnName) AND AD_Module_Dependent(e.AD_Module_ID, c.AD_Module_ID)='Y') AND T.AD_TABLE_ID = C.AD_TABLE_ID AND T.AD_PACKAGE_ID = PA.AD_PACKAGE_ID AND MT.AD_MODULE_ID = PA.AD_MODULE_ID AND P.AD_MODULE_DBPREFIX_ID = (SELECT MAX(AD_MODULE_DBPREFIX_ID) FROM AD_MODULE_DBPREFIX P1 WHERE P1.AD_MODULE_ID = C.Ad_MODULE_ID)) WHERE AD_Element_ID IS NULL AND EXISTS (SELECT 1 FROM AD_MODULE M WHERE (M.AD_MODULE_ID = C.AD_MODULE_ID AND M.ISINDEVELOPMENT='Y') OR v_TemplateInDev ='Y'); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; RAISE NOTICE '%','Creating link from Element to Process Para' ; UPDATE AD_PROCESS_PARA SET AD_Element_id= (SELECT MAX(AD_Element_ID) FROM AD_ELEMENT e, AD_PROCESS P WHERE UPPER(AD_PROCESS_PARA.ColumnName)=UPPER(e.ColumnName) AND P.AD_PROCESS_ID = AD_PROCESS_PARA.AD_PROCESS_ID AND AD_Module_Dependent(e.AD_Module_ID, p.AD_Module_ID)='Y' ) WHERE AD_Element_ID IS NULL AND EXISTS (SELECT 1 FROM AD_PROCESS P, AD_MODULE M WHERE (P.AD_PROCESS_ID = AD_PROCESS_PARA.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND M.ISINDEVELOPMENT = 'Y') OR v_TemplateInDev ='Y'); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- COMMIT; --------------------------------------------------------------------------- -- Columns RAISE NOTICE '%','Synchronize Column' ; UPDATE AD_COLUMN c SET Description =(SELECT COALESCE(T.Description, E.Description) AS N FROM AD_MODULE M, AD_ELEMENT E, AD_ELEMENT_TRL T WHERE C.AD_Element_ID = e.AD_Element_ID AND c.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE UNION SELECT E.Description AS N FROM AD_MODULE M, AD_MODULE M2, AD_ELEMENT E WHERE C.AD_Element_ID = e.AD_Element_ID AND M.AD_MODULE_ID = C.AD_MODULE_ID AND M2.AD_MODULE_ID = E.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE), Help = (SELECT COALESCE(T.help, E.help) AS N FROM AD_MODULE M, AD_ELEMENT E, AD_ELEMENT_TRL T WHERE C.AD_Element_ID = e.AD_Element_ID AND c.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE UNION SELECT E.help AS N FROM AD_MODULE M, AD_MODULE M2, AD_ELEMENT E WHERE C.AD_Element_ID = e.AD_Element_ID AND M2.AD_MODULE_ID = E.AD_MODULE_ID AND M.AD_MODULE_ID = C.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE), Updated = TO_DATE(NOW()) WHERE EXISTS (SELECT 1 FROM AD_MODULE M, AD_ELEMENT E, AD_ELEMENT_TRL T WHERE C.AD_Element_ID = e.AD_Element_ID AND c.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE AND (COALESCE(TO_CHAR(COALESCE(T.help, E.help)),' ') != COALESCE(TO_CHAR(C.HELP),' ') OR COALESCE(TO_CHAR(COALESCE(T.DESCRIPTION, E.DESCRIPTION)),' ') != COALESCE(TO_CHAR(C.DESCRIPTION),' ')) UNION SELECT 1 FROM AD_MODULE M, AD_MODULE M2, AD_ELEMENT E WHERE C.AD_Element_ID = e.AD_Element_ID AND M2.AD_MODULE_ID = E.AD_MODULE_ID AND M.AD_MODULE_ID = C.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M.AD_LANGUAGE = M2.AD_LANGUAGE AND (COALESCE(TO_CHAR(E.help),' ') != COALESCE(TO_CHAR(C.HELP),' ') OR COALESCE(TO_CHAR(E.DESCRIPTION),' ') != COALESCE(TO_CHAR(C.DESCRIPTION),' '))); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Fields should now be syncronized RAISE NOTICE '%','Synchronize Field' ; UPDATE AD_FIELD SET NAME= (SELECT COALESCE(T.NAME, e.NAME) FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE union SELECT e.NAME FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE), Description= (SELECT COALESCE(T.Description, e.Description) FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE union SELECT e.Description FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE), Help= (SELECT COALESCE(T.HELP, e.HELP) FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE union SELECT e.HELP FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE), Updated=TO_DATE(NOW()) WHERE AD_FIELD.IsCentrallyMaintained='Y' AND AD_FIELD.IsActive='Y' AND EXISTS (SELECT 1 FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND T.AD_LANGUAGE = M.AD_LANGUAGE AND (AD_FIELD.NAME != COALESCE(T.NAME, e.NAME) OR COALESCE(TO_CHAR(AD_FIELD.Description), ' ')<>COALESCE(TO_CHAR(T.Description), TO_CHAR(e.Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD.Help), ' ')<>COALESCE(TO_CHAR(T.Help), TO_CHAR(e.Help), ' ')) union SELECT 1 FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE AND (AD_FIELD.NAME != e.NAME OR COALESCE(TO_CHAR(AD_FIELD.Description), ' ')<>COALESCE(TO_CHAR(e.Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD.Help), ' ')<>COALESCE(TO_CHAR(e.Help), ' '))) AND NOT EXISTS (SELECT 1 FROM AD_TAB t, AD_WINDOW w WHERE AD_FIELD.AD_Tab_ID=t.AD_Tab_ID AND t.AD_Window_ID=w.AD_Window_ID AND w.IsSOTrx='N' ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Field Translations -- Translations taken from the trl table RAISE NOTICE '%','Synchronize Field Translations' ; UPDATE AD_FIELD_TRL SET NAME= (SELECT e.NAME FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Description= (SELECT e.Description FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Help= (SELECT e.Help FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , IsTranslated= (SELECT e.IsTranslated FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT 1 FROM AD_FIELD f, AD_ELEMENT_TRL e, AD_COLUMN c, AD_MODULE M WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Column_ID=c.AD_Column_ID AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL AND AD_FIELD_TRL.AD_LANGUAGE=e.AD_LANGUAGE AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND M.AD_MODULE_ID = F.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M.AD_LANGUAGE != E.AD_LANGUAGE AND(AD_FIELD_TRL.NAME<>e.NAME OR COALESCE(TO_CHAR(AD_FIELD_TRL.Description), ' ')<>COALESCE(TO_CHAR(e.Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD_TRL.Help), ' ')<>COALESCE(TO_CHAR(e.Help), ' ')) ) AND NOT EXISTS (SELECT 1 FROM AD_FIELD f, AD_TAB t, AD_WINDOW w WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Tab_ID=t.AD_Tab_ID AND t.AD_Window_ID=w.AD_Window_ID AND w.IsSOTrx='N' ) ; -- Field Translations -- Translations taken from the non trl table UPDATE AD_FIELD_TRL SET NAME= (SELECT e.NAME FROM AD_ELEMENT e, AD_COLUMN c, AD_FIELD f WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Description= (SELECT e.Description FROM AD_ELEMENT e, AD_COLUMN c, AD_FIELD f WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Help= (SELECT e.Help FROM AD_ELEMENT e, AD_COLUMN c, AD_FIELD f WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , IsTranslated='Y' , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT 1 FROM AD_FIELD f, AD_ELEMENT e, AD_COLUMN c, AD_MODULE M, AD_MODULE M1 WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Column_ID=c.AD_Column_ID AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL AND AD_FIELD_TRL.AD_LANGUAGE=M1.AD_LANGUAGE AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND M.AD_MODULE_ID = F.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M1.AD_MODULE_ID = E.AD_MODULE_ID AND M.AD_LANGUAGE != M1.AD_LANGUAGE AND(AD_FIELD_TRL.NAME<>e.NAME OR COALESCE(TO_CHAR(AD_FIELD_TRL.Description), ' ')<>COALESCE(TO_CHAR(e.Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD_TRL.Help), ' ')<>COALESCE(TO_CHAR(e.Help), ' ')) ) AND NOT EXISTS (SELECT 1 FROM AD_FIELD f, AD_TAB t, AD_WINDOW w WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Tab_ID=t.AD_Tab_ID AND t.AD_Window_ID=w.AD_Window_ID AND w.IsSOTrx='N' ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Fields should now be syncronized RAISE NOTICE '%','Synchronize PO Field' ; UPDATE AD_FIELD SET NAME= (SELECT COALESCE(T.PO_NAME, e.PO_NAME, t.name, e.name) FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE union SELECT COALESCE(e.PO_NAME, e.name) FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE), Description= (SELECT COALESCE(T.PO_Description, e.PO_Description, t.description, e.description) FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE union SELECT coalesce(e.PO_Description, e.description) FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE), Help= (SELECT COALESCE(T.PO_HELP, e.PO_HELP, t.help, e.help) FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE union SELECT coalesce(e.PO_HELP, e.help) FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE), Updated=TO_DATE(NOW()) WHERE AD_FIELD.IsCentrallyMaintained='Y' AND AD_FIELD.IsActive='Y' AND EXISTS (SELECT 1 FROM AD_COLUMN c, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND T.AD_LANGUAGE = M.AD_LANGUAGE AND (AD_FIELD.NAME != COALESCE(T.PO_NAME, e.PO_NAME, t.name, e.name) OR COALESCE(TO_CHAR(AD_FIELD.Description), ' ')<>COALESCE(TO_CHAR(T.PO_Description), TO_CHAR(e.PO_Description), to_char(t.description), to_char(e.description), ' ') OR COALESCE(TO_CHAR(AD_FIELD.Help), ' ')<>COALESCE(TO_CHAR(T.PO_Help), TO_CHAR(e.PO_Help), to_char(t.help), to_char(e.help), ' ')) union SELECT 1 FROM AD_COLUMN c, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M2.AD_LANGUAGE = M.AD_LANGUAGE AND (AD_FIELD.NAME != e.PO_NAME OR COALESCE(TO_CHAR(AD_FIELD.Description), ' ')<>COALESCE(TO_CHAR(e.PO_Description), to_char(e.description), ' ') OR COALESCE(TO_CHAR(AD_FIELD.Help), ' ')<>COALESCE(TO_CHAR(e.PO_Help), to_char(e.help), ' '))) AND EXISTS (SELECT 1 FROM AD_TAB t, AD_WINDOW w WHERE AD_FIELD.AD_Tab_ID=t.AD_Tab_ID AND t.AD_Window_ID=w.AD_Window_ID AND w.IsSOTrx='N' ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Field Translations RAISE NOTICE '%','Synchronize PO Field Translations' ; UPDATE AD_FIELD_TRL SET NAME= (SELECT e.PO_Name FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Description= (SELECT e.PO_Description FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Help= (SELECT e.PO_Help FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , IsTranslated= (SELECT e.IsTranslated FROM AD_ELEMENT_TRL e, AD_COLUMN c, AD_FIELD f WHERE e.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT * FROM AD_FIELD f, AD_ELEMENT_TRL e, AD_COLUMN c, AD_MODULE M WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Column_ID=c.AD_Column_ID AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL AND AD_FIELD_TRL.AD_LANGUAGE=e.AD_LANGUAGE AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND M.AD_MODULE_ID = F.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M.AD_LANGUAGE != E.AD_LANGUAGE AND(AD_FIELD_TRL.NAME<>e.PO_Name OR COALESCE(TO_CHAR(AD_FIELD_TRL.Description), ' ')<>COALESCE(TO_CHAR(e.PO_Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD_TRL.Help), ' ')<>COALESCE(TO_CHAR(e.PO_Help), ' ')) AND (e.PO_Name IS NOT NULL AND e.PO_Name <> '') ) AND EXISTS (SELECT * FROM AD_FIELD f, AD_TAB t, AD_WINDOW w WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Tab_ID=t.AD_Tab_ID AND t.AD_Window_ID=w.AD_Window_ID AND w.IsSOTrx='N' ) ; --Translation from non-trl table UPDATE AD_FIELD_TRL SET NAME= (SELECT e.PO_Name FROM AD_ELEMENT e, AD_COLUMN c, AD_FIELD f WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Description= (SELECT e.PO_Description FROM AD_ELEMENT e, AD_COLUMN c, AD_FIELD f WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Help= (SELECT e.PO_Help FROM AD_ELEMENT e, AD_COLUMN c, AD_FIELD f WHERE e.AD_Element_ID=c.AD_Element_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , IsTranslated='Y' , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT * FROM AD_FIELD f, AD_ELEMENT e, AD_COLUMN c, AD_MODULE M, AD_MODULE M1 WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Column_ID=c.AD_Column_ID AND c.AD_Element_ID=e.AD_Element_ID AND c.AD_Process_ID IS NULL AND AD_FIELD_TRL.AD_LANGUAGE=M1.AD_LANGUAGE AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND M.AD_MODULE_ID = F.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M1.AD_MODULE_ID = E.AD_MODULE_ID AND M.AD_LANGUAGE != M1.AD_LANGUAGE AND(AD_FIELD_TRL.NAME<>e.PO_Name OR COALESCE(TO_CHAR(AD_FIELD_TRL.Description), ' ')<>COALESCE(TO_CHAR(e.PO_Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD_TRL.Help), ' ')<>COALESCE(TO_CHAR(e.PO_Help), ' ')) AND (e.PO_Name IS NOT NULL AND e.PO_Name <> '') ) AND EXISTS (SELECT * FROM AD_FIELD f, AD_TAB t, AD_WINDOW w WHERE AD_FIELD_TRL.AD_Field_ID=f.AD_Field_ID AND f.AD_Tab_ID=t.AD_Tab_ID AND t.AD_Window_ID=w.AD_Window_ID AND w.IsSOTrx='N' ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Fields from Process RAISE NOTICE '%','Synchronize Field from Process' ; UPDATE AD_FIELD SET NAME= (SELECT COALESCE(T.NAME, P.NAME) FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_PROCESS_TRL T WHERE P.AD_Process_ID=c.AD_Process_ID AND P.AD_PROCESS_ID = T.AD_PROCESS_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE= M.AD_LANGUAGE UNION SELECT P.name FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_MODULE M2 WHERE P.AD_Process_ID=c.AD_Process_ID AND M2.AD_MODULE_ID = P.AD_MODULE_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND M2.AD_LANGUAGE= M.AD_LANGUAGE) , Description= (SELECT COALESCE(T.Description, P.Description) FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_PROCESS_TRL T WHERE P.AD_Process_ID=c.AD_Process_ID AND P.AD_PROCESS_ID = T.AD_PROCESS_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE= M.AD_LANGUAGE UNION SELECT P.Description FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_MODULE M2 WHERE P.AD_Process_ID=c.AD_Process_ID AND M2.AD_MODULE_ID = P.AD_MODULE_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND M2.AD_LANGUAGE= M.AD_LANGUAGE) , Help= (SELECT COALESCE(T.HELP, P.HELP) FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_PROCESS_TRL T WHERE P.AD_Process_ID=c.AD_Process_ID AND P.AD_PROCESS_ID = T.AD_PROCESS_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE= M.AD_LANGUAGE UNION SELECT P.HELP FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_MODULE M2 WHERE P.AD_Process_ID=c.AD_Process_ID AND M2.AD_MODULE_ID = P.AD_MODULE_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND M2.AD_LANGUAGE= M.AD_LANGUAGE) , Updated=TO_DATE(NOW()) WHERE AD_FIELD.IsCentrallyMaintained='Y' AND AD_FIELD.IsActive='Y' AND EXISTS ( SELECT 1 FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_PROCESS_TRL T WHERE P.AD_Process_ID=c.AD_Process_ID AND P.AD_PROCESS_ID = T.AD_PROCESS_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND T.AD_LANGUAGE= M.AD_LANGUAGE AND (COALESCE(T.HELP, P.HELP) != AD_FIELD.HELP OR COALESCE(T.NAME, P.NAME) != AD_FIELD.NAME OR COALESCE(T.DESCRIPTION, P.DESCRIPTION) != AD_FIELD.DESCRIPTION) UNION SELECT 1 FROM AD_COLUMN c, AD_MODULE M, AD_PROCESS P, AD_MODULE M2 WHERE P.AD_Process_ID=c.AD_Process_ID AND M2.AD_MODULE_ID = P.AD_MODULE_ID AND c.AD_Column_ID=AD_FIELD.AD_Column_ID AND AD_FIELD.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M2.AD_LANGUAGE= M.AD_LANGUAGE AND (P.HELP != AD_FIELD.HELP OR P.NAME != AD_FIELD.NAME OR P.DESCRIPTION != AD_FIELD.DESCRIPTION) ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Field Translations from Process RAISE NOTICE '%','Synchronize Field Trl from Process Trl' ; UPDATE AD_FIELD_TRL SET NAME= (SELECT p.NAME FROM AD_PROCESS_TRL p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID AND p.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE ) , Description= (SELECT p.Description FROM AD_PROCESS_TRL p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID AND p.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE ) , Help= (SELECT p.Help FROM AD_PROCESS_TRL p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID AND p.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE ) , IsTranslated= (SELECT p.IsTranslated FROM AD_PROCESS_TRL p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID AND p.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE ) , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT * FROM AD_PROCESS_TRL p, AD_COLUMN c, AD_FIELD f, AD_MODULE M WHERE c.AD_Process_ID=p.AD_Process_ID AND f.AD_Column_ID=c.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID AND F.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M.AD_LANGUAGE != P.AD_LANGUAGE AND p.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND(AD_FIELD_TRL.NAME<>p.NAME OR COALESCE(TO_CHAR(AD_FIELD_TRL.Description), ' ')<>COALESCE(TO_CHAR(p.Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD_TRL.Help), ' ')<>COALESCE(TO_CHAR(p.Help), ' ')) ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Field Translations from Process NON TRL UPDATE AD_FIELD_TRL SET NAME= (SELECT p.NAME FROM AD_PROCESS p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Description= (SELECT p.Description FROM AD_PROCESS p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , Help= (SELECT p.Help FROM AD_PROCESS p, AD_COLUMN c, AD_FIELD f WHERE p.AD_Process_ID=c.AD_Process_ID AND c.AD_Column_ID=f.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID ) , IsTranslated='Y' , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT * FROM AD_PROCESS p, AD_COLUMN c, AD_FIELD f, AD_MODULE M, AD_MODULE M1 WHERE c.AD_Process_ID=p.AD_Process_ID AND f.AD_Column_ID=c.AD_Column_ID AND f.AD_Field_ID=AD_FIELD_TRL.AD_Field_ID AND F.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND P.AD_MODULE_ID = M1.AD_MODULE_ID AND M.AD_LANGUAGE != M1.AD_LANGUAGE AND M1.AD_LANGUAGE=AD_FIELD_TRL.AD_LANGUAGE AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND(AD_FIELD_TRL.NAME<>p.NAME OR COALESCE(TO_CHAR(AD_FIELD_TRL.Description), ' ')<>COALESCE(TO_CHAR(p.Description), ' ') OR COALESCE(TO_CHAR(AD_FIELD_TRL.Help), ' ')<>COALESCE(TO_CHAR(p.Help), ' ')) ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Sync Parameter ColumnName /*UPDATE AD_Process_Para SET ColumnName = (SELECT e.ColumnName FROM AD_Element e WHERE UPPER(e.ColumnName)=UPPER(AD_Process_Para.ColumnName)) WHERE AD_Process_Para.IsCentrallyMaintained='Y' AND AD_Process_Para.IsActive='Y' AND EXISTS (SELECT * FROM AD_Element e WHERE e.AD_Element_ID=AD_Process_Para.AD_Element_ID AND e.ColumnName<>AD_Process_Para.ColumnName);*/ -- Paramenter Fields UPDATE AD_PROCESS_PARA SET IsCentrallyMaintained='N' WHERE IsCentrallyMaintained<>'N' AND NOT EXISTS (SELECT * FROM AD_ELEMENT e WHERE AD_PROCESS_PARA.AD_Element_ID=e.AD_Element_ID ) AND EXISTS (SELECT 1 FROM AD_PROCESS P LEFT JOIN AD_MODULE M ON P.AD_MODULE_ID = M.AD_MODULE_ID WHERE AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') ) ; -- Parameter Fields RAISE NOTICE '%','Synchronize Process Parameter' ; UPDATE AD_PROCESS_PARA SET NAME= (SELECT COALESCE(T.NAME, e.NAME) FROM AD_PROCESS P, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE UNION SELECT e.NAME FROM AD_PROCESS P, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE) , Description= (SELECT COALESCE(T.Description, e.Description) FROM AD_PROCESS P, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE UNION SELECT e.Description FROM AD_PROCESS P, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE) , Help= (SELECT COALESCE(T.Help, e.Help) FROM AD_PROCESS P, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND T.AD_LANGUAGE = M.AD_LANGUAGE UNION SELECT e.Help FROM AD_PROCESS P, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE) , Updated=TO_DATE(NOW()) WHERE AD_PROCESS_PARA.IsCentrallyMaintained='Y' AND AD_PROCESS_PARA.IsActive='Y' AND EXISTS (SELECT 1 FROM AD_PROCESS P, AD_MODULE M, AD_ELEMENT e, AD_ELEMENT_TRL T WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND E.AD_ELEMENT_ID = T.AD_ELEMENT_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND T.AD_LANGUAGE = M.AD_LANGUAGE AND(AD_PROCESS_PARA.NAME<>COALESCE(T.NAME,e.NAME) OR COALESCE(TO_CHAR(AD_PROCESS_PARA.Description), ' ')<>COALESCE(TO_CHAR(T.DESCRIPTION),TO_CHAR(e.Description), ' ') OR COALESCE(TO_CHAR(AD_PROCESS_PARA.Help), ' ')<>COALESCE(TO_CHAR(T.HELP),TO_CHAR(e.Help), ' ')) UNION SELECT 1 FROM AD_PROCESS P, AD_MODULE M, AD_MODULE M2, AD_ELEMENT e WHERE e.AD_Element_ID=AD_PROCESS_PARA.AD_Element_ID AND AD_PROCESS_PARA.AD_PROCESS_ID = P.AD_PROCESS_ID AND P.AD_MODULE_ID = M.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND E.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE AND(AD_PROCESS_PARA.NAME<>e.NAME OR COALESCE(TO_CHAR(AD_PROCESS_PARA.Description), ' ')<>COALESCE(TO_CHAR(e.Description), ' ') OR COALESCE(TO_CHAR(AD_PROCESS_PARA.Help), ' ')<>COALESCE(TO_CHAR(e.Help), ' ')) ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Parameter Translations from trl table RAISE NOTICE '%','Synchronize Process Parameter Trl' ; UPDATE AD_PROCESS_PARA_TRL SET NAME= (SELECT et.NAME FROM AD_ELEMENT_TRL et, AD_PROCESS_PARA f WHERE et.AD_LANGUAGE=AD_PROCESS_PARA_TRL.AD_LANGUAGE AND f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , Description= (SELECT et.Description FROM AD_ELEMENT_TRL et, AD_PROCESS_PARA f WHERE et.AD_LANGUAGE=AD_PROCESS_PARA_TRL.AD_LANGUAGE AND f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , Help= (SELECT et.Help FROM AD_ELEMENT_TRL et, AD_PROCESS_PARA f WHERE et.AD_LANGUAGE=AD_PROCESS_PARA_TRL.AD_LANGUAGE AND f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , IsTranslated= (SELECT et.IsTranslated FROM AD_ELEMENT_TRL et, AD_PROCESS_PARA f WHERE et.AD_LANGUAGE=AD_PROCESS_PARA_TRL.AD_LANGUAGE AND f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT * FROM AD_ELEMENT_TRL et, AD_PROCESS_PARA f, AD_PROCESS P, AD_MODULE M WHERE et.AD_LANGUAGE=AD_PROCESS_PARA_TRL.AD_LANGUAGE AND f.AD_Element_ID=et.AD_Element_ID AND P.AD_PROCESS_ID = F.AD_PROCESS_ID AND M.AD_MODULE_ID = P.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND M.AD_LANGUAGE != ET.AD_LANGUAGE AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND(AD_PROCESS_PARA_TRL.NAME<>et.NAME OR COALESCE(TO_CHAR(AD_PROCESS_PARA_TRL.Description), ' ')<>COALESCE(TO_CHAR(et.Description), ' ') OR COALESCE(TO_CHAR(AD_PROCESS_PARA_TRL.Help), ' ')<>COALESCE(TO_CHAR(et.Help), ' ')) ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Parameter Translations from non-trl table RAISE NOTICE '%','Synchronize Process Parameter Trl' ; UPDATE AD_PROCESS_PARA_TRL SET NAME= (SELECT et.NAME FROM AD_ELEMENT et, AD_PROCESS_PARA f WHERE f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , Description= (SELECT et.Description FROM AD_ELEMENT et, AD_PROCESS_PARA f WHERE f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , Help= (SELECT et.Help FROM AD_ELEMENT et, AD_PROCESS_PARA f WHERE f.AD_Element_ID=et.AD_Element_ID AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID ) , IsTranslated= 'Y' , Updated=TO_DATE(NOW()) WHERE EXISTS (SELECT * FROM AD_ELEMENT et, AD_PROCESS_PARA f, AD_PROCESS P, AD_MODULE M, AD_MODULE M1 WHERE M1.AD_LANGUAGE=AD_PROCESS_PARA_TRL.AD_LANGUAGE AND f.AD_Element_ID=et.AD_Element_ID AND P.AD_PROCESS_ID = F.AD_PROCESS_ID AND M.AD_MODULE_ID = P.AD_MODULE_ID AND (M.ISINDEVELOPMENT='Y' OR v_TemplateInDev ='Y') AND et.AD_MODULE_ID = M1.AD_MODULE_ID AND M.AD_LANGUAGE != M1.AD_LANGUAGE AND f.AD_Process_Para_ID=AD_PROCESS_PARA_TRL.AD_Process_Para_ID AND f.IsCentrallyMaintained='Y' AND f.IsActive='Y' AND(AD_PROCESS_PARA_TRL.NAME<>et.NAME OR COALESCE(TO_CHAR(AD_PROCESS_PARA_TRL.Description), ' ')<>COALESCE(TO_CHAR(et.Description), ' ') OR COALESCE(TO_CHAR(AD_PROCESS_PARA_TRL.Help), ' ')<>COALESCE(TO_CHAR(et.Help), ' ')) ); -- Workflow Node - Window RAISE NOTICE '%','Synchronize Workflow Node from Window' ; UPDATE AD_WF_NODE SET NAME= (SELECT w.NAME FROM AD_WINDOW w WHERE w.AD_Window_ID=AD_WF_NODE.AD_Window_ID) , Description= (SELECT w.Description FROM AD_WINDOW w WHERE w.AD_Window_ID=AD_WF_NODE.AD_Window_ID ) , Help= (SELECT w.Help FROM AD_WINDOW w WHERE w.AD_Window_ID=AD_WF_NODE.AD_Window_ID) WHERE AD_WF_NODE.IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_WINDOW w WHERE w.AD_Window_ID=AD_WF_NODE.AD_Window_ID AND(w.NAME<>AD_WF_NODE.NAME OR COALESCE(TO_CHAR(w.Description), ' ')<>COALESCE(TO_CHAR(AD_WF_NODE.Description), ' ') OR COALESCE(TO_CHAR(w.Help), ' ')<>COALESCE(TO_CHAR(AD_WF_NODE.Help), ' ')) ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Workflow Translations - Window RAISE NOTICE '%','Synchronize Workflow Node Trl from Window Trl' ; UPDATE AD_WF_NODE_TRL SET NAME= (SELECT t.NAME FROM AD_WINDOW_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE ) , Description= (SELECT t.Description FROM AD_WINDOW_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE ) , Help= (SELECT t.Help FROM AD_WINDOW_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE ) WHERE EXISTS (SELECT * FROM AD_WINDOW_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Window_ID=t.AD_Window_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE AND n.IsCentrallyMaintained='Y' AND n.IsActive='Y' AND(AD_WF_NODE_TRL.NAME<>t.NAME OR COALESCE(TO_CHAR(AD_WF_NODE_TRL.Description), ' ')<>COALESCE(TO_CHAR(t.Description), ' ') OR COALESCE(TO_CHAR(AD_WF_NODE_TRL.Help), ' ')<>COALESCE(TO_CHAR(t.Help), ' ')) ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Workflow Node - Form RAISE NOTICE '%','Synchronize Workflow Node from Form' ; UPDATE AD_WF_NODE SET NAME= (SELECT f.NAME FROM AD_FORM f WHERE f.AD_Form_ID=AD_WF_NODE.AD_Form_ID) , Description= (SELECT f.Description FROM AD_FORM f WHERE f.AD_Form_ID=AD_WF_NODE.AD_Form_ID ) , Help= (SELECT f.Help FROM AD_FORM f WHERE f.AD_Form_ID=AD_WF_NODE.AD_Form_ID) WHERE AD_WF_NODE.IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_FORM f WHERE f.AD_Form_ID=AD_WF_NODE.AD_Form_ID AND(f.NAME<>AD_WF_NODE.NAME OR COALESCE(TO_CHAR(f.Description), ' ')<>COALESCE(TO_CHAR(AD_WF_NODE.Description), ' ') OR COALESCE(TO_CHAR(f.Help), ' ')<>COALESCE(TO_CHAR(AD_WF_NODE.Help), ' ')) ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Workflow Translations - Form RAISE NOTICE '%','Synchronize Workflow Node Trl from Form Trl' ; UPDATE AD_WF_NODE_TRL SET NAME= (SELECT t.NAME FROM AD_FORM_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Form_ID=t.AD_Form_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE ) , Description= (SELECT t.Description FROM AD_FORM_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Form_ID=t.AD_Form_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE ) , Help= (SELECT t.Help FROM AD_FORM_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Form_ID=t.AD_Form_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE ) WHERE EXISTS (SELECT * FROM AD_FORM_TRL t, AD_WF_NODE n WHERE AD_WF_NODE_TRL.AD_WF_Node_ID=n.AD_WF_Node_ID AND n.AD_Form_ID=t.AD_Form_ID AND AD_WF_NODE_TRL.AD_LANGUAGE=t.AD_LANGUAGE AND n.IsCentrallyMaintained='Y' AND n.IsActive='Y' AND(AD_WF_NODE_TRL.NAME<>t.NAME OR COALESCE(TO_CHAR(AD_WF_NODE_TRL.Description), ' ')<>COALESCE(TO_CHAR(t.Description), ' ') OR COALESCE(TO_CHAR(AD_WF_NODE_TRL.Help), ' ')<>COALESCE(TO_CHAR(t.Help), ' ')) ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; -- Sync Names - Window RAISE NOTICE '%','Synchronizing Menu with Window' ; UPDATE AD_MENU SET NAME= (SELECT T.NAME FROM AD_MODULE M, AD_WINDOW w, AD_WINDOW_TRL T WHERE AD_MENU.AD_Window_ID=w.AD_Window_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND w.AD_Window_ID = T.ad_Window_ID AND M.AD_LANGUAGE = T.AD_LANGUAGE UNION SELECT W.NAME FROM AD_MODULE M, AD_MODULE M2, AD_WINDOW w WHERE AD_MENU.AD_Window_ID=w.AD_Window_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND W.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE ) , Description= (SELECT T.DESCRIPTION FROM AD_MODULE M, AD_WINDOW w, AD_WINDOW_TRL T WHERE AD_MENU.AD_Window_ID=w.AD_Window_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND w.AD_Window_ID = T.ad_Window_ID AND M.AD_LANGUAGE = T.AD_LANGUAGE UNION SELECT W.DESCRIPTION FROM AD_MODULE M, AD_MODULE M2, AD_WINDOW w WHERE AD_MENU.AD_Window_ID=w.AD_Window_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND W.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE ) WHERE AD_Window_ID IS NOT NULL AND Action='W' AND EXISTS (SELECT 1 FROM AD_MODULE WHERE (AD_MENU.AD_MODULE_ID = AD_MODULE_ID AND ISINDEVELOPMENT ='Y') OR v_TemplateInDev ='Y'); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT wt.NAME FROM AD_WINDOW_TRL wt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID AND AD_MENU_TRL.AD_LANGUAGE=wt.AD_LANGUAGE ) , Description= (SELECT wt.Description FROM AD_WINDOW_TRL wt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID AND AD_MENU_TRL.AD_LANGUAGE=wt.AD_LANGUAGE ) , IsTranslated= (SELECT wt.IsTranslated FROM AD_WINDOW_TRL wt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID AND AD_MENU_TRL.AD_LANGUAGE=wt.AD_LANGUAGE ) WHERE EXISTS (SELECT 1 FROM AD_WINDOW_TRL wt, AD_MENU m, AD_MODULE mo WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID AND mo.AD_Module_ID = m.AD_Module_ID AND (MO.ISINDEVELOPMENT = 'Y' OR v_TemplateInDev ='Y') and mo.AD_Language!= wt.AD_Language AND AD_MENU_TRL.AD_LANGUAGE=wt.AD_LANGUAGE AND m.AD_Window_ID IS NOT NULL AND m.Action='W' ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' trl rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT wt.NAME FROM AD_WINDOW wt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID ) , Description= (SELECT wt.Description FROM AD_WINDOW wt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID ) , IsTranslated= 'Y' WHERE EXISTS (SELECT 1 FROM AD_WINDOW wt, AD_MENU m, AD_MODULE mo, AD_MODULE mo1 WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID AND mo.AD_Module_ID = m.AD_Module_ID AND (MO.ISINDEVELOPMENT = 'Y' OR v_TemplateInDev ='Y') and mo1.AD_Module_ID = wt.AD_Module_ID and mo.AD_Language!= mo1.AD_Language AND mo1.AD_LANGUAGE=AD_MENU_TRL.AD_LANGUAGE AND m.AD_Window_ID IS NOT NULL AND m.Action='W' ) ; -- Sync Names - Process RAISE NOTICE '%','Synchronizing Menu with Processes' ; UPDATE AD_MENU SET NAME= (SELECT T.NAME FROM AD_MODULE M, AD_PROCESS w, AD_PROCESS_TRL T WHERE AD_MENU.AD_Process_ID=w.AD_Process_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND w.AD_Process_ID = T.AD_Process_ID AND M.AD_LANGUAGE = T.AD_LANGUAGE UNION SELECT W.NAME FROM AD_MODULE M, AD_MODULE M2, AD_PROCESS w WHERE AD_MENU.AD_Process_ID=w.AD_Process_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND W.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE ) , Description= (SELECT T.DESCRIPTION FROM AD_MODULE M, AD_PROCESS w, AD_PROCESS_TRL T WHERE AD_MENU.AD_Process_ID=w.AD_Process_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND w.AD_Process_ID = T.AD_Process_ID AND M.AD_LANGUAGE = T.AD_LANGUAGE UNION SELECT W.description FROM AD_MODULE M, AD_MODULE M2, AD_Process w WHERE AD_MENU.AD_Process_ID=w.AD_Process_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND W.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE ) WHERE AD_MENU.AD_Process_ID IS NOT NULL AND AD_MENU.Action IN('R', 'P') AND EXISTS (SELECT 1 FROM AD_MODULE WHERE (AD_MENU.AD_MODULE_ID = AD_MODULE_ID AND ISINDEVELOPMENT ='Y') OR v_TemplateInDev ='Y'); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT pt.NAME FROM AD_PROCESS_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE ) , Description= (SELECT pt.Description FROM AD_PROCESS_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE ) , IsTranslated= (SELECT pt.IsTranslated FROM AD_PROCESS_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE ) WHERE EXISTS (SELECT * FROM AD_PROCESS_TRL pt, AD_MENU m, AD_MODULE MO WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID AND M.AD_MODULE_ID = MO.AD_MODULE_ID AND (MO.ISINDEVELOPMENT = 'Y' OR v_TemplateInDev ='Y') AND MO.AD_LANGUAGE != AD_MENU_TRL.AD_LANGUAGE AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE AND m.AD_Process_ID IS NOT NULL AND Action IN('R', 'P') ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' trl rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT pt.NAME FROM AD_PROCESS pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID ) , Description= (SELECT pt.Description FROM AD_PROCESS pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID ) , IsTranslated= 'Y' WHERE EXISTS (SELECT * FROM AD_PROCESS pt, AD_MENU m, AD_MODULE MO, AD_MODULE M1 WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID AND MO.AD_MODULE_ID = M.AD_MODULE_ID AND (MO.ISINDEVELOPMENT = 'Y' OR v_TemplateInDev ='Y') AND M1.AD_MODULE_ID = PT.AD_MODULE_ID AND M1.AD_LANGUAGE != MO.AD_LANGUAGE AND AD_MENU_TRL.AD_LANGUAGE=M1.AD_LANGUAGE AND m.AD_Process_ID IS NOT NULL AND Action IN('R', 'P') ); -- Sync Names = Form RAISE NOTICE '%','Synchronizing Menu with Forms' ; UPDATE AD_MENU SET NAME= (SELECT T.NAME FROM AD_MODULE M, AD_Form w, AD_Form_TRL T WHERE AD_MENU.AD_Form_ID=w.AD_Form_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND w.AD_Form_ID = T.AD_Form_ID AND M.AD_LANGUAGE = T.AD_LANGUAGE UNION SELECT W.NAME FROM AD_MODULE M, AD_MODULE M2, AD_Form w WHERE AD_MENU.AD_Form_ID=w.AD_Form_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND W.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE ) , Description= (SELECT T.description FROM AD_MODULE M, AD_Form w, AD_Form_TRL T WHERE AD_MENU.AD_Form_ID=w.AD_Form_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND w.AD_Form_ID = T.AD_Form_ID AND M.AD_LANGUAGE = T.AD_LANGUAGE UNION SELECT W.description FROM AD_MODULE M, AD_MODULE M2, AD_Form w WHERE AD_MENU.AD_Form_ID=w.AD_Form_ID AND AD_MENU.AD_Module_ID = M.AD_MODULE_ID AND W.AD_MODULE_ID = M2.AD_MODULE_ID AND M.AD_LANGUAGE = M2.AD_LANGUAGE ) WHERE AD_Form_ID IS NOT NULL AND Action='X' AND EXISTS (SELECT 1 FROM AD_MODULE WHERE (AD_MENU.AD_MODULE_ID = AD_MODULE_ID AND ISINDEVELOPMENT ='Y') OR v_TemplateInDev ='Y'); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT ft.NAME FROM AD_FORM_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE ) , Description= (SELECT ft.Description FROM AD_FORM_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE ) , IsTranslated= (SELECT ft.IsTranslated FROM AD_FORM_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE ) WHERE EXISTS (SELECT * FROM AD_FORM_TRL ft, AD_MENU m, AD_MODULE MO WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID AND MO.AD_MODULE_ID = M.AD_MODULE_ID AND (MO.ISINDEVELOPMENT = 'Y' OR v_TemplateInDev ='Y') AND MO.AD_LANGUAGE != FT.AD_LANGUAGE AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE AND m.AD_Form_ID IS NOT NULL AND Action='X' ); UPDATE AD_MENU_TRL SET NAME= (SELECT ft.NAME FROM AD_FORM ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID ) , Description= (SELECT ft.Description FROM AD_FORM ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID ) , IsTranslated= 'Y' WHERE EXISTS (SELECT * FROM AD_FORM ft, AD_MENU m, AD_MODULE MO, AD_MODULE MO1 WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID AND MO.AD_MODULE_ID = M.AD_MODULE_ID AND (MO.ISINDEVELOPMENT ='Y' OR v_TemplateInDev ='Y') AND MO1.AD_MODULE_ID = FT.AD_MODULE_ID AND MO.AD_LANGUAGE != MO1.AD_LANGUAGE AND AD_MENU_TRL.AD_LANGUAGE=MO1.AD_LANGUAGE AND m.AD_Form_ID IS NOT NULL AND Action='X' ); GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' trl rows updated: ' || v_rowcount ; -- Sync Names - Workflow RAISE NOTICE '%','Synchronizing Menu with Workflows' ; UPDATE AD_MENU SET NAME= (SELECT p.NAME FROM AD_WORKFLOW p WHERE AD_MENU.AD_Workflow_ID=p.AD_Workflow_ID ) , Description= (SELECT p.Description FROM AD_WORKFLOW p WHERE AD_MENU.AD_Workflow_ID=p.AD_Workflow_ID ) WHERE AD_MENU.AD_Workflow_ID IS NOT NULL AND AD_MENU.Action='F'; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT pt.NAME FROM AD_WORKFLOW_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE ) , Description= (SELECT pt.Description FROM AD_WORKFLOW_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE ) , IsTranslated= (SELECT pt.IsTranslated FROM AD_WORKFLOW_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE ) WHERE EXISTS (SELECT * FROM AD_WORKFLOW_TRL pt, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID AND AD_MENU_TRL.AD_LANGUAGE=pt.AD_LANGUAGE AND m.AD_Workflow_ID IS NOT NULL AND Action='F' ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' trl rows updated: ' || v_rowcount ; -- Sync Names = Task RAISE NOTICE '%','Synchronizing Menu with Tasks' ; UPDATE AD_MENU SET NAME= (SELECT NAME FROM AD_TASK f WHERE AD_MENU.AD_Task_ID=f.AD_Task_ID) , Description= (SELECT Description FROM AD_TASK f WHERE AD_MENU.AD_Task_ID=f.AD_Task_ID) WHERE AD_Task_ID IS NOT NULL AND Action='T'; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' rows updated: ' || v_rowcount ; UPDATE AD_MENU_TRL SET NAME= (SELECT ft.NAME FROM AD_TASK_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE ) , Description= (SELECT ft.Description FROM AD_TASK_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE ) , IsTranslated= (SELECT ft.IsTranslated FROM AD_TASK_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE ) WHERE EXISTS (SELECT * FROM AD_TASK_TRL ft, AD_MENU m WHERE AD_MENU_TRL.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID AND AD_MENU_TRL.AD_LANGUAGE=ft.AD_LANGUAGE AND m.AD_Task_ID IS NOT NULL AND Action='T' ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' trl rows updated: ' || v_rowcount ; -- Call extension points SELECT count(*) INTO v_count FROM DUAL WHERE EXISTS (SELECT 1 FROM AD_EP_PROCEDURES WHERE AD_EXTENSION_POINTS_ID= '1C3043156C334398AA114F7E0AB6A18B'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); v_extension_point_id VARCHAR(32) := '1C3043156C334398AA114F7E0AB6A18B'; BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'p_PInstance_ID', p_PInstance_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'User', v_AD_User_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Message', NULL, NULL, NULL, NULL, NULL, NULL, v_Message); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Result', NULL, NULL, v_result, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); SELECT p_number INTO v_Result FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername = 'Result'; SELECT p_text INTO v_Message FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername = 'Message'; DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; END IF; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; RETURN; END ; $_$ LANGUAGE plpgsql; GDROP FUNCTION public.ad_synchronize(p_pinstance_id character varying); publictadfalse23416125595289ad_system_info_trg()FUNCTIONCREATE FUNCTION ad_system_info_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC:= 0; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO v_Count FROM AD_SYSTEM_INFO; IF (v_Count <> 0) THEN RAISE EXCEPTION '%','Only one configuration permitted.'; --OBTG:-20529-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_system_info_trg(); publictadfalse23416125595291ad_system_info_trg2()FUNCTION CREATE FUNCTION ad_system_info_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ exist NUMERIC:= 0; indTempName VARCHAR(50) := 'System Customization'; --OBTG:NVARCHAR2-- indTempPackage VARCHAR(50) := 'mySystem.CustomizationTemplate'; --OBTG:NVARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; If old.customization_Allowed='N' and new.customization_Allowed='Y' then select count(*) into exist from AD_MODULE where TYPE = 'T' and ISINDEVELOPMENT = 'Y'; if (exist > 0) then RAISE EXCEPTION '%','There is already an active Industry Template.'; --OBTG:-20631-- else Insert into AD_MODULE ( AD_MODULE_ID,AD_CLIENT_ID,AD_ORG_ID,ISACTIVE,CREATED,CREATEDBY,UPDATED,UPDATEDBY, NAME,VERSION,DESCRIPTION, HELP, URL,TYPE,LICENSE, ISINDEVELOPMENT,ISDEFAULT,SEQNO,JAVAPACKAGE, LICENSETYPE,AUTHOR,STATUS,UPDATE_AVAILABLE,ISTRANSLATIONREQUIRED,AD_LANGUAGE,HASCHARTOFACCOUNTS, ISTRANSLATIONMODULE,HASREFERENCEDATA,ISREGISTERED,UPDATEINFO,UPDATE_VER_ID) values ( get_uuid(),'0','0','Y',TO_DATE(NOW()),'0',TO_DATE(NOW()),'0', to_char(indTempName),'1.0.0', to_char(indTempName) || ' is an autogenerated industry template to store all the customizations made to module core.', to_char(indTempName) || ' is an autogenerated industry template to store all the customizations made to module core. Only one industry template can be active at the same time.', null,'T','The Openbravo Public License Version 1.1 ("OBPL") consists of the Mozilla Public License Version 1.1, modified to be specific to Openbravo, with the Additional Terms in Exhibit B. The original Mozilla Public License 1.1 can be found at: http://www.mozilla.org/MPL/MPL-1.1.html', 'Y','N',null,to_char(indTempPackage), 'OtherOS',null,null,null,'Y','en_US','N', 'N','N',null,null,null); end if; end if; If (old.customization_Allowed='Y' and new.customization_Allowed='N') then delete from AD_MODULE where name = indTempName; end if; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_system_info_trg2(); publictadfalse23416s125536495ad_tab_copy(character varying)FUNCTIONCREATE FUNCTION ad_tab_copy(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Tab_Copy.sql,v 1.4 2003/02/20 06:42:12 jjanke Exp $ *** * Title: Copy One Tab content (i.e. Fields) to another * Description: ************************************************************************/ -- Logistic v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Module_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AD_Tab_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NoOfFields NUMERIC:=0; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- -- Copy Cur_Fields RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='AD_Tab_ID') THEN v_AD_Tab_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Tab_ID=' || v_AD_Tab_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; v_ResultStr:='GetEntityType'; -- Record_ID is the Tab_ID to copy to v_ResultStr:='Copying'; --Insert fields in the same module as the tab SELECT AD_Module_ID INTO v_AD_Module_ID FROM AD_Tab WHERE AD_Tab_ID = v_Record_ID; FOR Cur_Fields IN (SELECT * FROM AD_Field WHERE AD_Tab_ID=v_AD_Tab_ID) LOOP -- Get next no SELECT * INTO v_NextNo FROM AD_Sequence_Next('AD_Field', Cur_Fields.AD_Client_ID) ; -- Insert INSERT INTO AD_Field -- AD_Window_Copy has copied code ( AD_Field_ID, AD_Tab_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsCentrallyMaintained, AD_Column_ID, AD_FieldGroup_ID, ISDISPLAYED, DISPLAYLOGIC, DISPLAYLENGTH, ISREADONLY, SEQNO, SORTNO, ISSAMELINE, ISFIELDONLY, ISENCRYPTED, AD_MODULE_ID ) VALUES (v_NextNo, v_Record_ID, Cur_Fields.AD_Client_ID, Cur_Fields.AD_Org_ID, Cur_Fields.IsActive, TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Fields.Name, Cur_Fields.Description, Cur_Fields.Help, Cur_Fields.IsCentrallyMaintained, Cur_Fields.AD_Column_ID, Cur_Fields.AD_FieldGroup_ID, Cur_Fields.ISDISPLAYED, Cur_Fields.DISPLAYLOGIC, Cur_Fields.DISPLAYLENGTH, Cur_Fields.ISREADONLY, Cur_Fields.SEQNO, Cur_Fields.SORTNO, Cur_Fields.ISSAMELINE, Cur_Fields.ISFIELDONLY, Cur_Fields.ISENCRYPTED, v_AD_Module_ID) ; -- update translation UPDATE AD_Field_Trl SET Name= (SELECT Name FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) , Description= (SELECT Description FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) , Help= (SELECT Help FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) WHERE AD_Field_Trl.AD_Field_ID=v_NextNo; -- v_NoOfFields:=v_NoOfFields + 1; END LOOP; v_Message:='@Copied@=' || v_NoOfFields; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; DDROP FUNCTION public.ad_tab_copy(p_pinstance_id character varying); publictadfalse23416t1255364973ad_tab_import(character varying, character varying)FUNCTIONCREATE FUNCTION ad_tab_import(p_pinstance_id character varying, p_ad_tab_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Tab_Import.sql,v 1.4 2002/11/18 06:11:18 jjanke Exp $ *** * Title: Import Field Definitions * Description: * Import the Fields of the Tab not existing yet ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32):='0'; --OBTG:VARCHAR2-- v_module_id VARCHAR(32); --OBTG:varchar2-- v_fieldModule VARCHAR(32); --OBTG:varchar2-- v_Aux NUMERIC; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- Variables Cur_Column RECORD; -- v_NextNo VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Table_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_count NUMERIC(10):=0; -- added by Pablo Sarobe v_isDisplayed CHAR(1):='Y'; v_showInRelation CHAR(1):='Y'; v_isReadOnly CHAR(1):='N'; v_sameLine CHAR(1):='N'; v_SeqNo NUMERIC(10) ; v_sortNo NUMERIC(10) ; v_columnName VARCHAR(40) ; --OBTG:VARCHAR2-- v_LastColumnName VARCHAR(40) ; --OBTG:VARCHAR2-- v_DisplayLength NUMERIC(10) ; v_PInstance_Log_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.AD_CLIENT_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; v_Client_ID:=Cur_Parameter.AD_CLIENT_ID; END LOOP; -- Get Parameter ELSE v_Record_ID:=p_AD_Tab_ID; END IF; RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; BEGIN --BODY select max(t.ad_module_id) into v_module_id from ad_tab t, ad_module m where ad_tab_id = v_Record_ID and m.ad_module_id = t.ad_module_id and ISINDEVELOPMENT ='Y'; if v_module_id is null then select max(ad_module_id) into v_module_id from ad_module where isdefault = 'Y'; if v_module_id is null then v_module_id := '0'; end if; end if; SELECT AD_Table_ID INTO v_AD_Table_ID FROM AD_Tab WHERE AD_Tab_ID=v_Record_ID AND AD_Table_ID!='291'; -- C_BPartner (multiple tabs) FOR Cur_Column IN(-- added by Pablo Sarobe SELECT c.Columnname, c.Name, c.Description, c.AD_Column_ID, c.FieldLength, t.tablename, c.AD_Module_ID FROM AD_Column c, AD_Table t WHERE NOT EXISTS (SELECT * FROM AD_Field f WHERE c.AD_Column_ID=f.AD_Column_ID AND c.AD_Table_ID=v_AD_Table_ID AND f.AD_Tab_ID=v_Record_ID ) AND c.AD_Table_ID=v_AD_Table_ID AND c.AD_Table_ID=t.AD_Table_ID -- added by Pablo Sarobe AND UPPER(c.Columnname) NOT IN ('CREATED', 'UPDATED', 'CREATEDBY', 'UPDATEDBY') AND c.IsActive='Y') LOOP SELECT * INTO v_NextNo FROM AD_Sequence_Next('AD_Field', '0') ; -- get ID -- added by Pablo Sarobe v_isDisplayed:='Y'; v_showInRelation:='Y'; v_isReadOnly:='N'; v_sameLine:='N'; v_SeqNo:=0; v_sortNo:=NULL; v_DisplayLength:=Cur_Column.FieldLength; IF(UPPER(Cur_Column.Columnname)=UPPER(Cur_Column.Tablename) ||'_ID') THEN --ID column v_isDisplayed:='N'; v_showInRelation:='N'; IF(UPPER(Cur_Column.Columnname) IN('M_PRODUCT_ID', 'C_BPARTNER_ID')) THEN v_DisplayLength:=40; ELSIF(UPPER(Cur_Column.Columnname) IN('C_LOCATION_ID', 'C_BPARTNER_LOCATION_ID')) THEN v_DisplayLength:=60; END IF; ELSIF(UPPER(Cur_Column.Columnname)='AD_CLIENT_ID') THEN v_SeqNo:=10; v_showInRelation:='N'; ELSIF(UPPER(Cur_Column.Columnname)='AD_ORG_ID') THEN v_SeqNo:=20; v_sameLine:='Y'; v_showInRelation:='N'; ELSIF(UPPER(Cur_Column.Columnname)='LINENO') THEN v_DisplayLength:=5; ELSIF(UPPER(Cur_Column.Columnname) IN('VALUE', 'ALIAS', 'SEQNO')) THEN v_sortNo:=1; IF(UPPER(Cur_Column.Columnname) IN('VALUE')) THEN v_DisplayLength:=20; END IF; END IF; IF(UPPER(v_LastColumnName)='UPDATEDBY' AND UPPER(Cur_Column.Columnname) LIKE '%_ID') THEN v_isReadOnly:='Y'; END IF; select count(*) into v_aux from ad_module where ad_module_id = Cur_Column.AD_Module_ID and isInDevelopment='Y'; if v_Aux!=0 then v_fieldModule := Cur_Column.AD_Module_ID; else v_fieldModule := v_module_id; end if; INSERT INTO AD_Field ( ad_field_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, name, description, seqno, AD_Tab_ID, AD_Column_ID, DisplayLength, IsCentrallyMaintained, isdisplayed, isreadonly, sortno, issameline, showinrelation, ad_module_id ) VALUES (v_NextNo, '0', '0', 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Column.Name, Cur_Column.Description, v_SeqNo, v_Record_ID, Cur_Column.AD_Column_ID, v_DisplayLength, 'Y', v_isDisplayed, v_isReadOnly, v_sortNo, v_sameLine, v_showInRelation, v_fieldModule) ; -- v_count:=v_count + 1; -- Added by Pablo Sarobe v_LastColumnName:=Cur_Column.Columnname; END LOOP; -- for all columns -- Summary info v_Message:='@Created@ = ' || v_count; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','Finished ' || v_Message ; END IF; -- Commented by cromero 19102006 -- COMMIT; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; SELECT AD_TABLE_ID INTO v_AD_TABLE_ID FROM AD_Tab WHERE AD_Tab_ID=v_Record_ID; IF (v_AD_Table_ID='291') THEN RAISE EXCEPTION '%', v_ResultStr ; --OBTG:-20507-- END IF; -- RETURN; END ; $_$ LANGUAGE plpgsql; eDROP FUNCTION public.ad_tab_import(p_pinstance_id character varying, p_ad_tab_id character varying); publictadfalse23416u125536499!ad_tab_import0(character varying)FUNCTIONCREATE FUNCTION ad_tab_import0(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Tab_Import0.sql,v 1.2 2002/10/21 04:49:46 jjanke Exp $ *** * Title: Import Field Definitions * Description: ************************************************************************/ BEGIN PERFORM AD_TAB_IMPORT(p_PInstance_ID, NULL); END ; $_$ LANGUAGE plpgsql; GDROP FUNCTION public.ad_tab_import0(p_pinstance_id character varying); publictadfalse23416125595298ad_tab_mod_trg()FUNCTIONCREATE FUNCTION ad_tab_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Tab_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Tab_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.AD_Table_ID , '.') != COALESCE(OLD.AD_Table_ID , '.') OR COALESCE(NEW.AD_Window_ID , '.') != COALESCE(OLD.AD_Window_ID , '.') OR COALESCE(NEW.SeqNo , 0) != COALESCE(OLD.SeqNo , 0) OR COALESCE(NEW.TabLevel , 0) != COALESCE(OLD.TabLevel , 0) OR COALESCE(NEW.IsSingleRow , '.') != COALESCE(OLD.IsSingleRow , '.') OR COALESCE(NEW.IsInfoTab , '.') != COALESCE(OLD.IsInfoTab , '.') OR COALESCE(NEW.IsTranslationTab , '.') != COALESCE(OLD.IsTranslationTab , '.') OR COALESCE(NEW.IsReadOnly , '.') != COALESCE(OLD.IsReadOnly , '.') OR COALESCE(NEW.AD_Column_ID , '.') != COALESCE(OLD.AD_Column_ID , '.') OR COALESCE(NEW.HasTree , '.') != COALESCE(OLD.HasTree , '.') OR COALESCE(NEW.WhereClause , '.') != COALESCE(OLD.WhereClause , '.') OR COALESCE(NEW.OrderByClause , '.') != COALESCE(OLD.OrderByClause , '.') OR COALESCE(NEW.CommitWarning , '.') != COALESCE(OLD.CommitWarning , '.') OR COALESCE(NEW.AD_Process_ID , '.') != COALESCE(OLD.AD_Process_ID , '.') OR COALESCE(NEW.Processing , '.') != COALESCE(OLD.Processing , '.') OR COALESCE(NEW.AD_Image_ID , '.') != COALESCE(OLD.AD_Image_ID , '.') OR COALESCE(NEW.ImportFields , '.') != COALESCE(OLD.ImportFields , '.') OR COALESCE(NEW.AD_ColumnSortOrder_ID , '.') != COALESCE(OLD.AD_ColumnSortOrder_ID , '.') OR COALESCE(NEW.AD_ColumnSortYesNo_ID , '.') != COALESCE(OLD.AD_ColumnSortYesNo_ID , '.') OR COALESCE(NEW.IsSortTab , '.') != COALESCE(OLD.IsSortTab , '.') OR COALESCE(NEW.Included_Tab_ID , '.') != COALESCE(OLD.Included_Tab_ID , '.') OR COALESCE(NEW.FilterClause , '.') != COALESCE(OLD.FilterClause , '.') OR COALESCE(NEW.EditReference , '.') != COALESCE(OLD.EditReference , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_tab_mod_trg(); publictadfalse23416125595301 ad_tab_trg()FUNCTION/ CREATE FUNCTION ad_tab_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check tab name starts with a upper case letter IF (not (substr(new.Name,1,1) between 'A' and 'Z')) THEN RAISE EXCEPTION '%', '@TabName1stCharUpper@' ; --OBTG:-20000-- END IF; -- Insert AD_Tab Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Tab_Trl ( AD_Tab_Trl_ID, AD_Tab_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsTranslated ) SELECT get_uuid(), new.AD_Tab_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.Help, 'N' FROM AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' AND M.AD_Module_ID = new.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; END IF; -- Inserting -- AD_Tab update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) THEN UPDATE AD_Tab_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Tab_ID=new.AD_Tab_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; #DROP FUNCTION public.ad_tab_trg(); publictadfalse23416125595303 ad_tab_trg2()FUNCTION9CREATE FUNCTION ad_tab_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID VARCHAR(32); --OBTG:varchar2-- v_ID_MAP VARCHAR(32); --OBTG:VARCHAR2-- v_WindowName VARCHAR(60); --OBTG:VARCHAR2-- v_ClassName VARCHAR(60); --OBTG:VARCHAR2-- v_IsActive CHAR(1) := 'Y'; v_Count NUMERIC(10); v_JavaPackage VARCHAR(315); --OBTG:VARCHAR2-- v_ModuleMapping VARCHAR(315); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF NOT((COALESCE(old.NAME,'.')<>COALESCE(NEW.NAME,'.') OR COALESCE(old.IsActive,'.')<>COALESCE(NEW.IsActive,'.'))) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT W.IsActive, (CASE WHEN M.AD_MODULE_ID ='0' THEN NULL ELSE JavaPackage END) INTO v_IsActive, v_JavaPackage FROM AD_WINDOW W, AD_MODULE M WHERE AD_WINDOW_ID = NEW.AD_WINDOW_ID AND W.AD_MODULE_ID = M.AD_MODULE_ID; IF v_IsActive <> 'Y' THEN v_IsActive := NEW.ISACTIVE; END IF; SELECT AD_MAPPING_FORMAT(TO_CHAR(W.NAME)), AD_MAPPING_FORMAT(TO_CHAR(new.NAME)) INTO v_WindowName, v_ClassName FROM AD_WINDOW W WHERE W.AD_WINDOW_ID = new.AD_WINDOW_ID; --Add tab id to name for non core modules IF (new.AD_Module_ID != '0') THEN v_ClassName := v_ClassName || new.AD_Tab_ID; END IF; IF v_JavaPackage IS NOT NULL THEN v_ModuleMapping := '/'||v_JavaPackage||'.'; v_JavaPackage := v_JavaPackage||'.'||v_WindowName; ELSE v_ModuleMapping := '/'; v_JavaPackage := v_WindowName; END IF; SELECT COUNT(*) INTO v_Count FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W' AND CLASSNAME LIKE 'org.openbravo.erpWindows.%'; IF v_Count > 0 THEN SELECT AD_MODEL_OBJECT_ID INTO v_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W' AND CLASSNAME LIKE 'org.openbravo.erpWindows.%'; UPDATE AD_MODEL_OBJECT SET AD_CLIENT_ID = new.AD_CLIENT_ID, AD_ORG_ID = new.AD_ORG_ID, ISACTIVE = v_IsActive, UPDATED = TO_DATE(NOW()), UPDATEDBY = new.UPDATEDBY, CLASSNAME = 'org.openbravo.erpWindows.' || v_JavaPackage || '.' || v_ClassName WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W' AND CLASSNAME LIKE 'org.openbravo.erpWindows.%'; ELSE SELECT * INTO v_ID FROM Ad_Sequence_Next('AD_Model_Object', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT (AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_TAB_ID, CLASSNAME, ISDEFAULT) VALUES (v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'W', new.AD_TAB_ID, 'org.openbravo.erpWindows.' || v_JavaPackage || '.' || v_ClassName, 'Y'); END IF; SELECT COUNT(*) INTO v_Count FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '%_Relation.html'; IF v_Count > 0 THEN UPDATE AD_MODEL_OBJECT_MAPPING SET AD_CLIENT_ID = new.AD_CLIENT_ID, AD_ORG_ID = new.AD_ORG_ID, ISACTIVE = v_IsActive, UPDATED = TO_DATE(NOW()), UPDATEDBY = new.UPDATEDBY, MAPPINGNAME = (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Relation.html') WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '%_Relation.html'; ELSE SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, (v_ModuleMapping || '/' || v_WindowName || '/' || v_ClassName || '_Relation.html'), 'Y'); END IF; SELECT COUNT(*) INTO v_Count FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '%_Edition.html'; IF v_Count > 0 THEN UPDATE AD_MODEL_OBJECT_MAPPING SET AD_CLIENT_ID = new.AD_CLIENT_ID, AD_ORG_ID = new.AD_ORG_ID, ISACTIVE = v_IsActive, UPDATED = TO_DATE(NOW()), UPDATEDBY = new.UPDATEDBY, MAPPINGNAME = (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Edition.html') WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '%_Edition.html'; ELSE SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Edition.html'), 'N'); END IF; SELECT COUNT(*) INTO v_Count FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '%_Excel.xls'; IF v_Count > 0 THEN UPDATE AD_MODEL_OBJECT_MAPPING SET AD_CLIENT_ID = new.AD_CLIENT_ID, AD_ORG_ID = new.AD_ORG_ID, ISACTIVE = v_IsActive, UPDATED = TO_DATE(NOW()), UPDATEDBY = new.UPDATEDBY, MAPPINGNAME = (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Excel.xls') WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '%_Excel.xls'; ELSE SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Excel.xls'), 'N'); END IF; SELECT COUNT(*) INTO v_Count FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W' AND CLASSNAME LIKE 'org.openbravo.erpCommon.ad_callouts.ComboReloads%'; IF v_Count > 0 THEN UPDATE AD_MODEL_OBJECT SET AD_CLIENT_ID = new.AD_CLIENT_ID, AD_ORG_ID = new.AD_ORG_ID, ISACTIVE = v_IsActive, UPDATED = TO_DATE(NOW()), UPDATEDBY = new.UPDATEDBY, CLASSNAME = 'org.openbravo.erpCommon.ad_callouts.ComboReloads' || new.ad_tab_id WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W' AND CLASSNAME LIKE 'org.openbravo.erpCommon.ad_callouts.ComboReloads%'; ELSE SELECT * INTO v_ID FROM Ad_Sequence_Next('AD_Model_Object', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT (AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_TAB_ID, CLASSNAME, ISDEFAULT) VALUES (v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'W', new.AD_TAB_ID, 'org.openbravo.erpCommon.ad_callouts.ComboReloads' || new.ad_tab_id, 'N'); END IF; SELECT COUNT(*) INTO v_Count FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '/ad_callouts/ComboReloads%.html'; IF v_Count > 0 THEN UPDATE AD_MODEL_OBJECT_MAPPING SET AD_CLIENT_ID = new.AD_CLIENT_ID, AD_ORG_ID = new.AD_ORG_ID, ISACTIVE = v_IsActive, UPDATED = TO_DATE(NOW()), UPDATEDBY = new.UPDATEDBY, MAPPINGNAME = ('/ad_callouts/ComboReloads' || new.ad_tab_id || '.html') WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W') AND MAPPINGNAME LIKE '/ad_callouts/ComboReloads%.html'; ELSE SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, ('/ad_callouts/ComboReloads' || new.ad_tab_id || '.html'), 'N'); END IF; END IF; IF (TG_OP = 'DELETE') THEN DELETE FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TAB_ID=old.AD_TAB_ID AND ACTION = 'W'); DELETE FROM AD_MODEL_OBJECT WHERE ACTION = 'W' AND AD_MODEL_OBJECT.AD_TAB_ID = OLD.AD_TAB_ID; END IF; IF (TG_OP = 'INSERT') THEN SELECT W.IsActive, (CASE WHEN M.AD_MODULE_ID ='0' THEN NULL ELSE JavaPackage END) INTO v_IsActive, v_JavaPackage FROM AD_WINDOW W, AD_MODULE M WHERE AD_WINDOW_ID = NEW.AD_WINDOW_ID AND W.AD_MODULE_ID = M.AD_MODULE_ID; IF v_IsActive <> 'Y' THEN v_IsActive := NEW.ISACTIVE; END IF; SELECT AD_MAPPING_FORMAT(TO_CHAR(W.NAME)), AD_MAPPING_FORMAT(TO_CHAR(new.NAME)) INTO v_WindowName, v_ClassName FROM AD_WINDOW W WHERE W.AD_WINDOW_ID = new.AD_WINDOW_ID; --Add tab id to name for non core modules IF (new.AD_Module_ID != '0') THEN v_ClassName := v_ClassName || new.AD_Tab_ID; END IF; IF (v_JavaPackage IS NOT NULL) THEN v_ModuleMapping := '/'||v_JavaPackage||'.'; v_JavaPackage := v_JavaPackage||'.'||v_WindowName; ELSE v_JavaPackage := v_WindowName; v_ModuleMapping := '/'; END IF; SELECT * INTO v_ID FROM Ad_Sequence_Next('AD_Model_Object', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT (AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_TAB_ID, CLASSNAME, ISDEFAULT) VALUES (v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'W', new.AD_TAB_ID, 'org.openbravo.erpWindows.' || v_JavaPackage || '.' || v_ClassName, 'Y'); SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Relation.html'), 'Y'); SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Edition.html'), 'N'); SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, (v_ModuleMapping || v_WindowName || '/' || v_ClassName || '_Excel.xls'), 'N'); SELECT * INTO v_ID FROM Ad_Sequence_Next('AD_Model_Object', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT (AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_TAB_ID, CLASSNAME, ISDEFAULT) VALUES (v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'W', new.AD_TAB_ID, 'org.openbravo.erpCommon.ad_callouts.ComboReloads' || new.ad_tab_id, 'N'); SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID); INSERT INTO AD_MODEL_OBJECT_MAPPING (AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT) VALUES (v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, v_IsActive, TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, ('/ad_callouts/ComboReloads' || new.ad_tab_id || '.html'), 'N'); END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; $DROP FUNCTION public.ad_tab_trg2(); publictadfalse23416v1255365055ad_table_import(character varying, character varying)FUNCTION;CREATE FUNCTION ad_table_import(p_pinstance_id character varying, p_ad_table_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Table_Import.sql,v 1.8 2003/01/18 05:34:25 jjanke Exp $ *** * Title: Import Table Column Definition * Description: * Create Columns of Table not existing as a Dictionary Column ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32):='0'; --OBTG:VARCHAR2-- v_module_table_id VARCHAR(32); --OBTG:varchar2-- v_module_id VARCHAR(32); --OBTG:varchar2-- db_prefix VARCHAR(30); --OBTG:varchar2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- Cur_Column RECORD; Cur_CommonCols RECORD; -- v_NextNo VARCHAR(32) ; --OBTG:VARCHAR2-- v_count NUMERIC(10):=0; -- Added by Ismael Ciordia v_AD_Reference_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Reference_Value_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Val_Rule_ID VARCHAR(32); --OBTG:VARCHAR2-- v_IsParent CHAR(1):='N'; v_IsKey CHAR(1):='N'; v_IsIdentifier CHAR(1):='N'; v_IsSessionAttr CHAR(1):='N'; v_IsUpdateable CHAR(1):='Y'; v_DefaultValue VARCHAR(2000):=''; --OBTG:NVARCHAR2-- v_SeqNo NUMERIC(10) ; v_columnName VARCHAR(40) ; --OBTG:VARCHAR2-- v_TableName VARCHAR(40) ; --OBTG:VARCHAR2-- v_LastColumnName VARCHAR(40) ; --OBTG:VARCHAR2-- v_varchar2 VARCHAR(32767) ; --OBTG:VARCHAR2-- v_FieldLength NUMERIC(10) ; v_PInstance_Log_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Aux NUMERIC; v_missingColumns boolean; v_CorrectType CHAR(1):='Y'; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.AD_CLIENT_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; v_Client_ID:=Cur_Parameter.AD_CLIENT_ID; END LOOP; -- Get Parameter ELSE v_Record_ID:=p_AD_Table_ID; END IF; RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; BEGIN --BODY IF(v_Record_ID IS NOT NULL) THEN SELECT COALESCE(MAX(SeqNo), 0) + 10 INTO v_SeqNo FROM AD_Column WHERE AD_Table_ID=v_Record_ID; ELSE v_SeqNo:=0; END IF; select p.ad_module_id into v_module_table_id from ad_table t, ad_package p where t.ad_table_id = v_Record_ID and t.ad_package_id = p.ad_package_id; FOR Cur_Column IN (SELECT Column_Name, Data_Type, Data_Length, Nullable, AD_Table_ID, -- added by Ismael Ciordia uc.DATA_PRECISION, uc.DATA_SCALE, DATA_DEFAULT, Table_Name, uc.COLUMN_ID FROM User_Tab_Columns uc, AD_Table t WHERE uc.Table_Name=UPPER(t.TableName) AND NOT EXISTS (SELECT * FROM AD_Table t, AD_Column c WHERE t.AD_Table_ID=c.AD_Table_ID AND uc.Table_Name=UPPER(t.TableName) AND uc.Column_Name=UPPER(c.ColumnName) ) AND(v_Record_ID=t.AD_Table_ID OR v_Record_ID IS NULL) -- added by Ismael Ciordia ORDER BY uc.COLUMN_ID ) LOOP SELECT * INTO v_NextNo FROM AD_Sequence_Next('AD_Column', '0') ; -- get ID -- Added by Ismael Ciordia v_AD_Reference_ID:=NULL; v_AD_Reference_Value_ID:=NULL; v_AD_Val_Rule_ID:=NULL; v_IsParent:='N'; v_IsKey:='N'; v_IsIdentifier:='N'; v_IsSessionAttr:='N'; v_IsUpdateable:='Y'; v_varchar2:=Cur_Column.DATA_DEFAULT; v_varchar2:=SUBSTR(v_varchar2, 1, 2000) ; v_CorrectType:='Y'; IF(INSTR(v_varchar2, '''')<>0) THEN v_varchar2:=SUBSTR(SUBSTR(v_varchar2, 2, 1999), 1, INSTR(SUBSTR(v_varchar2, 2, 1999), '''') -1) ; ELSE v_varchar2:=TRIM(REPLACE(REPLACE(v_varchar2, REPLACE('now ()',' ',''), '@#Date@'), CHR(10), '')) ; END IF; v_DefaultValue:=v_varchar2; IF(UPPER(Cur_Column.Column_Name)=UPPER(Cur_Column.Table_Name) ||'_ID') THEN --ID column v_AD_Reference_ID:=13; v_IsKey:='Y'; v_IsUpdateable:='N'; ELSIF(UPPER(Cur_Column.Column_Name) IN('AD_CLIENT_ID', 'AD_ORG_ID')) THEN v_AD_Reference_ID:=19; v_DefaultValue:='@'||Cur_Column.Column_Name||'@'; v_IsUpdateable:='N'; v_IsSessionAttr:='Y'; IF(UPPER(Cur_Column.Column_Name)='AD_CLIENT_ID') THEN v_AD_Val_Rule_ID:='103'; ELSE v_AD_Val_Rule_ID:='104'; END IF; ELSIF(UPPER(Cur_Column.Column_Name) IN('UPDATED', 'CREATED')) THEN v_AD_Reference_ID:='16'; v_IsUpdateable:='N'; ELSIF(UPPER(Cur_Column.Column_Name) IN('UPDATEDBY', 'CREATEDBY')) THEN v_AD_Reference_ID:='30'; v_IsUpdateable:='N'; ELSIF(UPPER(Cur_Column.Column_Name) IN('NAME')) THEN v_IsIdentifier:='Y'; ELSIF(UPPER(Cur_Column.Column_Name) IN('M_PRODUCT_ID')) THEN v_AD_Reference_ID:='30'; v_AD_Reference_Value_ID:='800060'; ELSIF(UPPER(Cur_Column.Column_Name) IN ('C_BPARTNER_ID')) THEN v_AD_Reference_ID:='30'; v_AD_Reference_Value_ID:='800057'; ELSIF(UPPER(Cur_Column.Column_Name) IN('M_ATTRIBUTESETINSTANCE_ID')) THEN v_AD_Reference_ID:='35'; ELSIF(UPPER(Cur_Column.Column_Name) LIKE '%_LOCATION_ID') THEN v_AD_Reference_ID:='30'; v_AD_Reference_Value_ID:='21'; ELSIF(UPPER(Cur_Column.Column_Name) LIKE '%_LOCATOR%_ID') THEN v_AD_Reference_ID:='30'; v_AD_Reference_Value_ID:='31'; ELSIF(UPPER(Cur_Column.Column_Name) LIKE '%_ACCT') THEN v_AD_Reference_ID:='30'; v_AD_Reference_Value_ID:='25'; ELSIF(UPPER(Cur_Column.Column_Name) LIKE '%_ID') THEN v_AD_Reference_ID:='19'; ELSIF(UPPER(Cur_Column.Column_Name) IN('LINE', 'SEQNO')) THEN v_DefaultValue:='@SQL=SELECT COALESCE(MAX('||Cur_Column.Column_Name||'),0)+10 AS DefaultValue FROM '||Cur_Column.Table_Name||' WHERE xxParentColumn=@xxParentColumn@'; END IF; IF(UPPER(v_LastColumnName)='UPDATEDBY' AND UPPER(Cur_Column.Column_Name) LIKE '%_ID') THEN v_IsParent:='Y'; v_IsUpdateable:='N'; END IF; --added by Pablo Sarobe IF(Cur_Column.Data_Type IN('VARCHAR2', 'CHAR')) THEN v_FieldLength:=Cur_Column.Data_Length; ELSIF(Cur_Column.Data_Type IN('NVARCHAR2', 'NCHAR')) THEN v_FieldLength:=Cur_Column.Data_Length/2; ELSIF(Cur_Column.Data_Type IN('DATE', 'TIMESTAMP')) THEN v_FieldLength:=19; ELSIF(Cur_Column.Data_Type IN('NUMBER')) THEN v_FieldLength:=COALESCE(Cur_Column.Data_Precision, 10) +2; ELSE v_FieldLength:=Cur_Column.Data_Length; END IF; IF(v_AD_Reference_ID IS NULL) THEN IF(Cur_Column.Data_Type IN('CHAR','BPCHAR') AND Cur_Column.Data_Length=1) THEN v_AD_Reference_ID:='20'; ELSIF(Cur_Column.Data_Type IN('VARCHAR', 'VARCHAR2', 'NVARCHAR2', 'CHAR', 'NCHAR') AND Cur_Column.Data_Length=4000) THEN v_AD_Reference_ID:='14'; ELSIF(Cur_Column.Data_Type IN('VARCHAR', 'VARCHAR2', 'NVARCHAR2', 'CHAR', 'NCHAR')) THEN v_AD_Reference_ID:='10'; ELSIF(Cur_Column.Data_Type='NUMBER' AND Cur_Column.DATA_SCALE=0) THEN v_AD_Reference_ID:='11'; ELSIF(Cur_Column.Data_Type='NUMBER' AND UPPER(Cur_Column.Column_Name) LIKE '%AMT%') THEN v_AD_Reference_ID:='12'; ELSIF(Cur_Column.Data_Type='NUMBER' AND UPPER(Cur_Column.Column_Name) LIKE '%QTY%') THEN v_AD_Reference_ID:='29'; ELSIF(Cur_Column.Data_Type='NUMBER') THEN v_AD_Reference_ID:='22'; ELSIF(Cur_Column.Data_Type IN ('DATE', 'TIMESTAMP')) THEN v_AD_Reference_ID:='15'; ELSE v_AD_Reference_ID:='10'; -- if not found, use String v_CorrectType:='N'; END IF; END IF; v_columnName:=InitCap(Cur_Column.Column_Name) ; IF(INSTR(v_columnName, '_')<>0 AND INSTR(v_columnName, '_')<5) THEN v_columnName:=UPPER(SUBSTR(v_columnName, 1, INSTR(v_columnName, '_'))) ||SUBSTR(v_columnName, INSTR(v_columnName, '_') +1, 40) ; END IF; IF(v_columnName LIKE '%_Id') THEN v_columnName:=SUBSTR(v_columnName, 1, LENGTH(v_columnName) -3) ||'_ID'; END IF; --Check if it is necessary to recalculate positions SELECT count(*) INTO v_Aux FROM AD_COLUMN WHERE POSITION = Cur_Column.COLUMN_ID; IF v_Aux!=0 THEN UPDATE AD_COLUMN C SET POSITION = (SELECT COLUMN_ID FROM USER_TAB_COLUMNS U, AD_TABLE T WHERE C.AD_TABLE_ID = T.AD_TABLE_ID AND U.TABLE_NAME = UPPER(T.TABLENAME) AND U.COLUMN_NAME = UPPER(C.COLUMNNAME)) WHERE AD_TABLE_ID = Cur_Column.AD_Table_ID; END IF; IF substr(upper(v_columnName),1,3)='EM_' then db_prefix := substr(v_columnName,4,instr(v_columnName,'_',1,2)-4); RAISE NOTICE '%','Prefix:'||db_prefix; select max(ad_module_id) into v_module_id from ad_module_dbprefix where upper(name) = upper(db_prefix); if v_module_id is null then v_module_id := v_module_table_id; end if; else v_module_id := v_module_table_id; end if; IF (v_CorrectType='Y') THEN RAISE NOTICE '%','Inserting Column:'||v_columnName||' to module:'||v_module_id; INSERT INTO AD_COLUMN ( AD_COLUMN_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, COLUMNNAME, AD_TABLE_ID, AD_REFERENCE_ID, FIELDLENGTH, ISKEY, ISPARENT, ISMANDATORY, ISIDENTIFIER, SEQNO, ISTRANSLATED, ISENCRYPTED, ISUPDATEABLE, AD_REFERENCE_VALUE_ID, AD_VAL_RULE_ID, DEFAULTVALUE, ISSESSIONATTR, POSITION, aD_module_id ) VALUES (v_NextNo, '0', '0', 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_columnName, v_columnName, Cur_Column.AD_Table_ID, v_AD_Reference_ID, v_FieldLength, v_IsKey, v_IsParent, (CASE Cur_Column.Nullable WHEN 'Y' THEN 'N' ELSE 'Y' END), v_IsIdentifier, v_SeqNo, 'N', 'N', v_IsUpdateable, v_AD_Reference_Value_ID, v_AD_Val_Rule_ID, v_DefaultValue, v_IsSessionAttr, Cur_Column.COLUMN_ID, v_module_id); -- v_count:=v_count + 1; ELSE v_Result :=0; v_Message:=v_Message || '@WrongColumnType@: ' ||v_columnName||'. '; END IF; -- Added by Ismael Ciordia v_SeqNo:=v_SeqNo + 10; v_LastColumnName:=Cur_Column.Column_Name; -- Falta: insert de AD_Element RAISE NOTICE '%','adding Table ' || InitCap(Cur_Column.Table_Name) || ' Column ' || InitCap(Cur_Column.Column_Name) ; END LOOP; -- All new columns -- Summary info v_Message:=v_Message || '@Created@ = ' || v_count; --Check common columns IF (v_Record_ID is not null) THEN v_missingColumns := false; FOR Cur_CommonCols IN (select columnname from ad_column c where c.ad_table_id = '100' and lower(c.columnname) in ('ad_client_id','ad_org_id','isactive','created','updated','createdby','updatedby') and not exists (select 1 from ad_column c1 where c1.ad_table_id = v_Record_ID and lower(c1.columnname) = lower(c.columnname))) LOOP v_missingColumns := true; v_Message := '@MissingCommonColumn@: '||Cur_CommonCols.columnname||'
'||v_Message; END LOOP; select count(*) into v_count from ad_column c, ad_table t where lower(columnname) = lower(t.tablename)||'_id' and t.ad_table_id = c.ad_table_id and t.ad_table_id = v_Record_ID; IF v_Count = 0 THEN select tablename into v_TableName from ad_table where ad_table_id = v_record_ID; v_missingColumns := true; v_Message := '@MissingPrimaryKeyColumn@: '||v_tablename||'_ID
'||v_Message; END IF; IF (v_MissingColumns) THEN v_Result :=0; v_Message := '@MissingRequiredColumns@
'|| v_message; END IF; END IF; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','Finished ' || v_Message ; END IF; -- Commented by cromero 19102006 -- COMMIT; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; -- RETURN; END ; $_$ LANGUAGE plpgsql; iDROP FUNCTION public.ad_table_import(p_pinstance_id character varying, p_ad_table_id character varying); publictadfalse23416w125536507#ad_table_import0(character varying)FUNCTION CREATE FUNCTION ad_table_import0(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Table_Import0.sql,v 1.2 2002/10/21 04:49:46 jjanke Exp $ *** * Title: Import Table Column Definition * Description: ************************************************************************/ BEGIN PERFORM AD_TABLE_IMPORT(p_PInstance_ID, NULL) ; END ; $_$ LANGUAGE plpgsql; IDROP FUNCTION public.ad_table_import0(p_pinstance_id character varying); publictadfalse23416125595293ad_table_mod_trg()FUNCTION(CREATE FUNCTION ad_table_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Package_ID , '.') != COALESCE(OLD.AD_Package_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE M, AD_PACKAGE P WHERE M.AD_MODULE_ID = P.AD_Module_ID AND old.AD_Package_ID = p.ad_package_id AND M.isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Table_ID; cuerrentModuleID := new.AD_Package_ID; ELSE cuerrentID := old.AD_Table_ID; cuerrentModuleID := old.AD_Package_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_PACKAGE P WHERE M.AD_MODULE_ID = P.AD_MODULE_ID AND P.AD_PACKAGE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.TableName , '.') != COALESCE(OLD.TableName , '.') OR COALESCE(NEW.IsView , '.') != COALESCE(OLD.IsView , '.') OR COALESCE(NEW.AccessLevel , '.') != COALESCE(OLD.AccessLevel , '.') OR COALESCE(NEW.AD_Window_ID , '.') != COALESCE(OLD.AD_Window_ID , '.') OR COALESCE(NEW.IsSecurityEnabled , '.') != COALESCE(OLD.IsSecurityEnabled , '.') OR COALESCE(NEW.IsDeleteable , '.') != COALESCE(OLD.IsDeleteable , '.') OR COALESCE(NEW.IsHighVolume , '.') != COALESCE(OLD.IsHighVolume , '.') OR COALESCE(NEW.ImportTable , '.') != COALESCE(OLD.ImportTable , '.') OR COALESCE(NEW.IsChangeLog , '.') != COALESCE(OLD.IsChangeLog , '.') OR COALESCE(NEW.PO_Window_ID , '.') != COALESCE(OLD.PO_Window_ID , '.') OR COALESCE(NEW.IsDefaultAcct , '.') != COALESCE(OLD.IsDefaultAcct , '.') OR COALESCE(NEW.Developmentstatus , '.') != COALESCE(OLD.Developmentstatus , '.') OR COALESCE(NEW.AD_Package_ID , '.') != COALESCE(OLD.AD_Package_ID , '.') --SQL_Record_Identifier is not going to be exported ) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; --Check the only updated column is isFullyAudited. In this case maitin updated --column as it was to prevent changes detection when trying to update database IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.ISACTIVE ,'.') = COALESCE(OLD.ISACTIVE ,'.') AND COALESCE(NEW.NAME ,'.') = COALESCE(OLD.NAME ,'.') AND COALESCE(NEW.DESCRIPTION ,'.') = COALESCE(OLD.DESCRIPTION ,'.') AND COALESCE(NEW.HELP ,'.') = COALESCE(OLD.HELP ,'.') AND COALESCE(NEW.TABLENAME ,'.') = COALESCE(OLD.TABLENAME ,'.') AND COALESCE(NEW.CLASSNAME ,'.') = COALESCE(OLD.CLASSNAME ,'.') AND COALESCE(NEW.ISVIEW ,'.') = COALESCE(OLD.ISVIEW ,'.') AND COALESCE(NEW.ACCESSLEVEL ,'.') = COALESCE(OLD.ACCESSLEVEL ,'.') AND COALESCE(NEW.AD_WINDOW_ID ,'.') = COALESCE(OLD.AD_WINDOW_ID ,'.') AND COALESCE(NEW.ISSECURITYENABLED ,'.') = COALESCE(OLD.ISSECURITYENABLED ,'.') AND COALESCE(NEW.ISDELETEABLE ,'.') = COALESCE(OLD.ISDELETEABLE ,'.') AND COALESCE(NEW.ISHIGHVOLUME ,'.') = COALESCE(OLD.ISHIGHVOLUME ,'.') AND COALESCE(NEW.IMPORTTABLE ,'.') = COALESCE(OLD.IMPORTTABLE ,'.') AND COALESCE(NEW.ISCHANGELOG ,'.') = COALESCE(OLD.ISCHANGELOG ,'.') AND COALESCE(NEW.PO_WINDOW_ID ,'.') = COALESCE(OLD.PO_WINDOW_ID ,'.') AND COALESCE(NEW.ISDEFAULTACCT ,'.') = COALESCE(OLD.ISDEFAULTACCT ,'.') AND COALESCE(NEW.SQL_RECORD_IDENTIFIER,'.') = COALESCE(OLD.SQL_RECORD_IDENTIFIER,'.') AND COALESCE(NEW.DEVELOPMENTSTATUS ,'.') = COALESCE(OLD.DEVELOPMENTSTATUS ,'.') AND COALESCE(NEW.AD_PACKAGE_ID ,'.') = COALESCE(OLD.AD_PACKAGE_ID ,'.') AND COALESCE(NEW.TREETYPE ,'.') = COALESCE(OLD.TREETYPE ,'.') AND COALESCE(NEW.ACCTDATE_COLUMN_ID ,'.') = COALESCE(OLD.ACCTDATE_COLUMN_ID ,'.') AND COALESCE(NEW.ACCTCLASSNAME ,'.') = COALESCE(OLD.ACCTCLASSNAME ,'.') AND NEW.ISFULLYAUDITED != OLD.ISFULLYAUDITED) THEN NEW.UPDATED := OLD.UPDATED; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.ad_table_mod_trg(); publictadfalse23416125595296ad_table_trg()FUNCTION CREATE FUNCTION ad_table_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Aux NUMERIC; cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- v_check BOOLEAN; v_char char; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'INSERT') THEN v_check := true; END IF; IF (TG_OP = 'UPDATE') THEN v_check := (new.tableName != old.tableName) or (new.Name != old.Name) or (new.AD_Package_ID != old.AD_Package_ID) or (new.IsView != old.IsView); END IF; IF v_check THEN SELECT M.AD_MODULE_ID INTO cuerrentModuleID FROM AD_MODULE M, AD_PACKAGE P WHERE M.AD_MODULE_ID = P.AD_MODULE_ID AND P.AD_PACKAGE_ID = new.AD_Package_ID; SELECT COUNT(*) INTO v_Aux FROM ( SELECT 1 FROM AD_MODULE_DBPREFIX P WHERE P.AD_MODULE_ID = cuerrentModuleID AND instr(upper(new.TableName), upper(name)||'_') = 1 AND (instr(upper(new.Name), upper(name)||'_') = 1 OR cuerrentModuleID = '0') UNION SELECT 1 FROM AD_EXCEPTIONS WHERE ((TYPE='TABLE' AND new.IsView = 'N') or (TYPE='VIEW' AND new.IsView = 'Y')) AND UPPER(NAME1)=UPPER(new.Tablename)) AA; IF v_Aux = 0 THEN RAISE EXCEPTION '%', 'Names must start with its module''s DB prefix ' ; --OBTG:-20536-- END IF; --Check Name for illegal characters FOR I IN 1..LENGTH(trim(NEW.name)) LOOP v_char := substr(trim(NEW.name),i,1); IF v_char = ' ' or v_char = '.' or v_char = ',' or v_char='/' THEN RAISE EXCEPTION '%', '@NameWithInvalidCharacters@' ; --OBTG:-20635-- END IF; END LOOP; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.ad_table_trg(); publictadfalse23416125595306 ad_task_trg()FUNCTIONT CREATE FUNCTION ad_task_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert Translation */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Task_Trl ( AD_Task_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, IsTranslated ) SELECT new.AD_Task_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.')) THEN -- Translation UPDATE AD_Task_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Task_ID=new.AD_Task_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; $DROP FUNCTION public.ad_task_trg(); publictadfalse23416125595308ad_task_trg2()FUNCTION9CREATE FUNCTION ad_task_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_ID_MAP VARCHAR(32) ; --OBTG:VARCHAR2-- v_WindowName VARCHAR(60):='ad_tasks'; --OBTG:VARCHAR2-- v_ClassName VARCHAR(60) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF NOT((COALESCE(old.CLASSNAME, '.') <> COALESCE(NEW.CLASSNAME, '.') OR COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.'))) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; IF(TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN IF OLD.ISACTIVE='Y' AND OLD.CLASSNAME IS NOT NULL THEN DELETE FROM AD_MODEL_OBJECT_MAPPING WHERE AD_MODEL_OBJECT_ID IN ( SELECT AD_MODEL_OBJECT_ID FROM AD_MODEL_OBJECT WHERE AD_MODEL_OBJECT.AD_TASK_ID=old.AD_TASK_ID AND ACTION='T' ) ; DELETE FROM AD_MODEL_OBJECT WHERE ACTION='T' AND AD_MODEL_OBJECT.AD_TASK_ID=OLD.AD_TASK_ID; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN IF NEW.ISACTIVE='Y' AND NEW.CLASSNAME IS NOT NULL THEN v_ClassName:=new.CLASSNAME; SELECT * INTO v_ID FROM Ad_Sequence_Next('AD_Model_Object', new.AD_Client_ID) ; INSERT INTO AD_MODEL_OBJECT ( AD_MODEL_OBJECT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ACTION, AD_TASK_ID, CLASSNAME, ISDEFAULT ) VALUES ( v_ID, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, 'T', new.AD_TASK_ID, 'org.openbravo.erpCommon.' || v_WindowName || '.' || v_ClassName, 'Y' ) ; SELECT * INTO v_ID_MAP FROM Ad_Sequence_Next('AD_Model_Object_Mapping', new.AD_Client_ID) ; INSERT INTO AD_MODEL_OBJECT_MAPPING ( AD_MODEL_OBJECT_MAPPING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_MODEL_OBJECT_ID, MAPPINGNAME, ISDEFAULT ) VALUES ( v_ID_MAP, new.AD_CLIENT_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CREATEDBY, TO_DATE(NOW()), new.UPDATEDBY, v_ID, ('/' || v_WindowName || '/' || v_ClassName || '.html'), 'Y' ) ; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.ad_task_trg2(); publictadfalse23416125595310ad_textinterfaces_mod_trg()FUNCTION CREATE FUNCTION ad_textinterfaces_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Textinterfaces_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Textinterfaces_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Text , '.') != COALESCE(OLD.Text , '.') OR COALESCE(NEW.Filename , '.') != COALESCE(OLD.Filename , '.') OR COALESCE(NEW.Isused , '.') != COALESCE(OLD.Isused , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.ad_textinterfaces_mod_trg(); publictadfalse23416125595312ad_textinterfaces_trg()FUNCTION CREATE FUNCTION ad_textinterfaces_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_TEXTINTERFACES Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_TEXTINTERFACES_TRL (AD_TEXTINTERFACES_TRL_ID, AD_TEXTINTERFACES_ID, AD_LANGUAGE, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, TEXT, ISTRANSLATED) SELECT get_uuid(), NEW.AD_TEXTINTERFACES_ID, AD_LANGUAGE.AD_LANGUAGE, NEW.AD_CLIENT_ID, NEW.AD_ORG_ID, NEW.ISACTIVE, NEW.CREATED, NEW.CREATEDBY, NEW.UPDATED, NEW.UPDATEDBY, NEW.TEXT, 'N' FROM AD_LANGUAGE, AD_Module M WHERE AD_LANGUAGE.ISACTIVE = 'Y' AND ISSYSTEMLANGUAGE = 'Y' AND M.AD_Module_ID = new.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; END IF; -- Inserting -- AD_TEXTINTERFACES update trigger -- synchronize text IF TG_OP = 'UPDATE' THEN IF (COALESCE (OLD.TEXT, '.') <> COALESCE (NEW.TEXT, '.')) THEN -- Update AD_TEXTINTERFACES_TRL -- Translation UPDATE AD_TEXTINTERFACES_TRL SET ISTRANSLATED = 'N', UPDATED = TO_DATE(NOW()) WHERE AD_TEXTINTERFACES_ID = NEW.AD_TEXTINTERFACES_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.ad_textinterfaces_trg(); publictadfalse23416y125536514dad_translate_id(character varying, numeric, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION ad_translate_id(p_id character varying, p_offset numeric, p_tablename character varying, p_columnname character varying, p_clientid character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return the value of the ID selected in the new client ************************************************************************/ v_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF(p_ID IS NOT NULL) THEN EXECUTE 'SELECT MAX('||p_columnName||') FROM '||p_tableName||' WHERE '||p_columnName||'='||p_ID||' AND AD_CLIENT_ID ='||p_clientID INTO v_ID; IF(v_ID IS NULL) THEN v_ID:=p_ID; ELSE v_ID:=v_ID + p_offset; END IF; END IF; RETURN v_ID; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_translate_id(p_id character varying, p_offset numeric, p_tablename character varying, p_columnname character varying, p_clientid character varying); publictadfalse23416125595318 ad_tree_trg()FUNCTION CREATE FUNCTION ad_tree_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert AD_Tree Trigger * add Parent TreeNode */ v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_Tree_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert into TreeNode INSERT INTO AD_TreeNode ( AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.AD_Tree_ID, '0', NULL, 0 ) ; -- Insert into TreeNodeMM IF(new.TREETYPE='MM') THEN INSERT INTO AD_TreeNodeMM ( AD_TreeNodeMM_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.AD_Tree_ID, '0', NULL, 0 ) ; END IF; -- Insert into TreeNodeBP IF(new.TREETYPE='BP') THEN INSERT INTO AD_TreeNodeBP ( AD_TreeNodeBP_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.AD_Tree_ID, '0', NULL, 0 ) ; END IF; -- Insert into TreeNodePR IF(new.TREETYPE='PR') THEN INSERT INTO AD_TreeNodePR ( AD_TreeNodePR_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.AD_Tree_ID, '0', NULL, 0 ) ; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; $DROP FUNCTION public.ad_tree_trg(); publictadfalse23416 125595314ad_treenode_mod_trg()FUNCTION CREATE FUNCTION ad_treenode_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- currentTree VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Take into account just updates, because insertions and deletions are done --by automatic processes IF currentTree='10' THEN --Check just for menu tree cuerrentID := new.AD_TreeNode_ID; currentTree := new.AD_Tree_ID; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_MENU T WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_MENU_ID = cuerrentModuleID; IF (devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Tree_ID , '.') != COALESCE(OLD.AD_Tree_ID , '.') OR COALESCE(NEW.Node_ID , '.') != COALESCE(OLD.Node_ID , '.') OR COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Parent_ID , '.') != COALESCE(OLD.Parent_ID , '.') OR COALESCE(NEW.SeqNo , 0) != COALESCE(OLD.SeqNo , 0) OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_treenode_mod_trg(); publictadfalse23416 125595316ad_treenode_trg()FUNCTION CREATE FUNCTION ad_treenode_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Check in tg_op = 'INSERT' and tg_op = 'UPDATE' Accounting Report correction ************************************************************************/ v_EqualAcctSchema NUMERIC; v_TreeType VARCHAR(60); --OBTG:VARCHAR2-- v_IsReady AD_ORG.ISREADY%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Verify correct Account Schema for Accounting Reports IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT TREETYPE INTO v_TreeType FROM AD_TREE WHERE AD_TREE_ID = new.AD_TREE_ID; IF (v_TreeType='AR' AND new.parent_id<>'0') THEN SELECT COUNT(*) INTO v_EqualAcctSchema FROM AD_ACCOUNTINGRPT_ELEMENT parent, AD_ACCOUNTINGRPT_ELEMENT node WHERE parent.AD_ACCOUNTINGRPT_ELEMENT_ID = new.parent_id AND node.AD_ACCOUNTINGRPT_ELEMENT_ID = new.node_id AND parent.C_ACCTSCHEMA_ID = node.C_ACCTSCHEMA_ID; IF (v_EqualAcctSchema=0) THEN RAISE EXCEPTION '%','Wrong account schema parent'; --OBTG:-20517-- END IF; END IF; END IF; IF (TG_OP = 'UPDATE' AND v_TreeType='OO' AND (old.parent_id <> new.parent_id)) THEN SELECT AD_Org.IsReady INTO v_IsReady FROM AD_Org WHERE AD_Org.AD_Org_ID=new.NODE_ID; IF (v_IsReady='Y') THEN RAISE EXCEPTION '%','A ready organization can not be moved into the tree structure'; --OBTG:-20543-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; (DROP FUNCTION public.ad_treenode_trg(); publictadfalse23416{125536518ad_update_access()FUNCTIONCREATE FUNCTION ad_update_access() RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2007-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN --AD_FORM_ACCESS INSERT INTO AD_Form_Access ( AD_Form_Access_ID, AD_Form_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite ) SELECT get_uuid(), AD_FORM.AD_FORM_ID, AD_ROLE.AD_ROLE_ID, AD_ROLE.AD_CLIENT_ID, AD_ROLE.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_FORM, AD_ROLE WHERE AD_ROLE.ISMANUAL = 'N' AND ( (AD_ROLE.USERLEVEL = 'S' AND AD_FORM.ACCESSLEVEL IN ('4','7','6')) OR (AD_ROLE.USERLEVEL IN (' CO', ' C') AND AD_FORM.ACCESSLEVEL IN ('7','6','3','1')) OR (AD_ROLE.USERLEVEL = ' O' AND AD_FORM.ACCESSLEVEL IN ('3','1','7')) ) AND NOT EXISTS (SELECT 1 FROM AD_FORM_ACCESS WHERE AD_FORM_ID = AD_FORM.AD_FORM_ID AND AD_ROLE_ID = AD_ROLE.AD_ROLE_ID); --AD_PROCESS_ACCESS INSERT INTO AD_Process_Access (AD_Process_Access_ID, AD_Process_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), AD_PROCESS.AD_PROCESS_ID, AD_ROLE.AD_ROLE_ID, AD_ROLE.AD_CLIENT_ID, AD_ROLE.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_PROCESS, AD_ROLE WHERE AD_ROLE.ISMANUAL = 'N' AND ( (AD_ROLE.USERLEVEL = 'S' AND AD_PROCESS.ACCESSLEVEL IN ('4','7','6')) OR (AD_ROLE.USERLEVEL IN (' CO', ' C') AND AD_PROCESS.ACCESSLEVEL IN ('7','6','3','1')) OR (AD_ROLE.USERLEVEL = ' O' AND AD_PROCESS.ACCESSLEVEL IN ('3','1','7')) ) AND NOT EXISTS (SELECT 1 FROM AD_PROCESS_ACCESS WHERE AD_PROCESS_ID = AD_PROCESS.AD_PROCESS_ID AND AD_ROLE_ID = AD_ROLE.AD_ROLE_ID); --Add org 0 to role 0 INSERT INTO AD_Role_OrgAccess ( AD_Role_OrgAccess_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy ) SELECT get_uuid(), AD_ROLE.AD_ROLE_ID, AD_ORG.AD_CLIENT_ID, AD_ORG.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0' FROM AD_ROLE, AD_ORG WHERE AD_ROLE.AD_ROLE_ID = '0' AND AD_ROLE.AD_CLIENT_ID = AD_ORG.AD_CLIENT_ID AND AD_ORG.AD_ORG_ID ='0' AND NOT EXISTS (SELECT 1 FROM AD_ROLE_ORGACCESS WHERE AD_ROLE_ID = AD_ROLE.AD_ROLE_ID AND AD_ORG_ID = AD_ORG.AD_ORG_ID); --AD_TASK_ACCESS INSERT INTO AD_TASK_Access (AD_TASK_Access_ID, AD_TASK_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite) SELECT get_uuid(), AD_TASK.AD_TASK_ID, AD_ROLE.AD_ROLE_ID, AD_ROLE.AD_CLIENT_ID, AD_ROLE.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_TASK, AD_ROLE WHERE AD_ROLE.ISMANUAL = 'N' AND ( (AD_ROLE.USERLEVEL = 'S' AND AD_TASK.ACCESSLEVEL IN ('4','7','6')) OR (AD_ROLE.USERLEVEL IN (' CO', ' C') AND AD_TASK.ACCESSLEVEL IN ('7','6','3','1')) OR (AD_ROLE.USERLEVEL = ' O' AND AD_TASK.ACCESSLEVEL IN ('3','1','7')) ) AND NOT EXISTS (SELECT 1 FROM AD_TASK_ACCESS WHERE AD_TASK_ID = AD_TASK.AD_TASK_ID AND AD_ROLE_ID = AD_ROLE.AD_ROLE_ID); --AD_WINDOW_ACCESS INSERT INTO aD_Window_Access ( aD_Window_Access_ID, AD_Window_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite ) SELECT DISTINCT get_uuid(), AD_WINDOW.AD_WINDOW_ID, AD_ROLE.AD_ROLE_ID, AD_ROLE.AD_CLIENT_ID, AD_ROLE.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_WINDOW, AD_ROLE, AD_TAB, AD_TABLE WHERE AD_ROLE.ISMANUAL = 'N' AND AD_WINDOW.AD_WINDOW_ID = AD_TAB.AD_WINDOW_ID AND AD_TAB.AD_TABLE_ID = AD_TABLE.AD_TABLE_ID AND ( (AD_ROLE.USERLEVEL = 'S' AND AD_TABLE.ACCESSLEVEL IN ('4','7','6')) OR (AD_ROLE.USERLEVEL IN (' CO', ' C') AND AD_TABLE.ACCESSLEVEL IN ('7','6','3','1')) OR (AD_ROLE.USERLEVEL = ' O' AND AD_TABLE.ACCESSLEVEL IN ('3','1','7')) ) AND AD_TAB.SEQNO = (SELECT MIN(SEQNO) FROM AD_TAB t WHERE t.AD_WINDOW_ID = AD_WINDOW.AD_WINDOW_ID) AND NOT EXISTS (SELECT 1 FROM AD_WINDOW_ACCESS WHERE AD_WINDOW_ID = AD_WINDOW.AD_WINDOW_ID AND AD_ROLE_ID = AD_ROLE.AD_ROLE_ID); --AD_WORKFLOW_ACCESS INSERT INTO AD_WorkFlow_Access ( AD_WorkFlow_Access_ID, AD_WorkFlow_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite ) SELECT get_uuid(), AD_WORKFLOW.AD_WORKFLOW_ID, AD_ROLE.AD_ROLE_ID, AD_ROLE.AD_CLIENT_ID, AD_ROLE.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_WORKFLOW, AD_ROLE WHERE AD_ROLE.ISMANUAL = 'N' AND ( (AD_ROLE.USERLEVEL = 'S' AND AD_WORKFLOW.ACCESSLEVEL IN ('4','7','6')) OR (AD_ROLE.USERLEVEL IN (' CO', ' C') AND AD_WORKFLOW.ACCESSLEVEL IN ('7','6','3','1')) OR (AD_ROLE.USERLEVEL = ' O' AND AD_WORKFLOW.ACCESSLEVEL IN ('3','1','7')) ) AND NOT EXISTS (SELECT 1 FROM AD_WORKFLOW_ACCESS WHERE AD_WORKFLOW_ID = AD_WORKFLOW.AD_WORKFLOW_ID AND AD_ROLE_ID = AD_ROLE.AD_ROLE_ID); --Add role 0 to user 100 (Openbravo) INSERT INTO AD_USER_ROLES (AD_USER_ROLES_ID , AD_USER_ID , AD_ROLE_ID, AD_CLIENT_ID , AD_ORG_ID , ISACTIVE , CREATED , CREATEDBY , UPDATED , UPDATEDBY) SELECT get_uuid(), AD_USER_ID, '0', '0', '0', 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0' FROM AD_USER WHERE AD_USER_ID IN ('0', '100') AND NOT EXISTS (SELECT 1 FROM AD_USER_ROLES WHERE AD_USER_ID = AD_USER.AD_USER_ID AND AD_ROLE_ID = '0'); END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.ad_update_access(); publictadfalse23416|125536520`ad_update_pinstance(character varying, character varying, character, numeric, character varying)FUNCTION CREATE FUNCTION ad_update_pinstance(p_pinstance_id character varying, p_ad_user_id character varying, p_isprocessing character, p_result numeric, p_message character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN -- Update AD_PInstance RAISE NOTICE '%','AD_UPDATE_PINSTANCE' ; UPDATE AD_PINSTANCE SET Updated=TO_DATE(NOW()), UpdatedBy=COALESCE(p_AD_User_ID, UpdatedBy), IsProcessing=p_IsProcessing, Result=p_Result, -- 1=success ErrorMsg=p_Message WHERE AD_PInstance_ID=p_PInstance_ID; -- COMMIT; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.ad_update_pinstance(p_pinstance_id character varying, p_ad_user_id character varying, p_isprocessing character, p_result numeric, p_message character varying); publictadfalse23416}125536521ad_update_sequence()FUNCTIONCREATE FUNCTION ad_update_sequence() RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN NULL; --do nothing, just maintained for bacward compatibility END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_update_sequence(); publictadfalse23416~1255365228ad_update_table_identifier(character varying, character)FUNCTIONCREATE FUNCTION ad_update_table_identifier(p_pinstance_id character varying, quick character) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_count NUMERIC:=0; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_sql VARCHAR(4000):=''; --OBTG:VARCHAR2-- Cur_Tables RECORD; BEGIN -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','AD_Update_Table_Identifier - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; -- IF (Cur_Parameter.ParameterName = 'xx') THEN -- p_xx := Cur_Parameter.P_String; -- DBMS_OUTPUT.PUT_LINE(' xx=' || p_xx); -- ELSE -- DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || Cur_Parameter.ParameterName); -- END IF; END LOOP; -- Get Parameter END IF; BEGIN --BODY v_ResultStr:='ExecutingUpdates'; FOR Cur_Tables IN (SELECT TABLENAME FROM AD_TABLE t, AD_SYSTEM_INFO SI WHERE EXISTS (SELECT 1 FROM AD_COLUMN C WHERE T.AD_TABLE_ID = C.AD_TABLE_ID AND (C.UPDATED > SI.LAST_BUILD OR COALESCE(QUICK,'N')='N'))) LOOP v_sql:= Ad_Column_Identifier_Sql(Cur_Tables.TABLENAME) ; UPDATE AD_TABLE SET SQL_RECORD_IDENTIFIER=v_sql WHERE TABLENAME=Cur_Tables.TABLENAME; v_count:=v_count + 1; END LOOP; v_Message:='@Updated@: ' || v_count; ---- <> RAISE NOTICE '%','AD_Update_Table_Identifier - Finished ' || v_Message ; -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; END IF; RETURN; END ; $$ LANGUAGE plpgsql; dDROP FUNCTION public.ad_update_table_identifier(p_pinstance_id character varying, quick character); publictadfalse23416125556471.ad_update_table_identifier0(character varying)FUNCTIONCREATE FUNCTION ad_update_table_identifier0(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN PERFORM AD_UPDATE_TABLE_IDENTIFIER(p_pinstance_id, 'N'); END ; $$ LANGUAGE plpgsql; TDROP FUNCTION public.ad_update_table_identifier0(p_pinstance_id character varying); publictadfalse23416125595320ad_val_rule_mod_trg()FUNCTION) CREATE FUNCTION ad_val_rule_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Val_Rule_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Val_Rule_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Type , '.') != COALESCE(OLD.Type , '.') OR COALESCE(NEW.Code , '.') != COALESCE(OLD.Code , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_val_rule_mod_trg(); publictadfalse23416 125595324ad_wf_node_mod_trg()FUNCTION CREATE FUNCTION ad_wf_node_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_WF_Node_ID; cuerrentModuleID := new.AD_WorkFlow_ID; ELSE cuerrentID := old.AD_WF_Node_ID; cuerrentModuleID := old.AD_WorkFlow_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_WORKFLOW T WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_WORKFLOW_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.AD_Workflow_ID , '.') != COALESCE(OLD.AD_Workflow_ID , '.') OR COALESCE(NEW.IsCentrallyMaintained , '.') != COALESCE(OLD.IsCentrallyMaintained , '.') OR COALESCE(NEW.Action , '.') != COALESCE(OLD.Action , '.') OR COALESCE(NEW.AD_Window_ID , '.') != COALESCE(OLD.AD_Window_ID , '.') OR COALESCE(NEW.Workflow_ID , '.') != COALESCE(OLD.Workflow_ID , '.') OR COALESCE(NEW.AD_Task_ID , '.') != COALESCE(OLD.AD_Task_ID , '.') OR COALESCE(NEW.AD_Process_ID , '.') != COALESCE(OLD.AD_Process_ID , '.') OR COALESCE(NEW.AD_Form_ID , '.') != COALESCE(OLD.AD_Form_ID , '.') OR COALESCE(NEW.Xposition , 0) != COALESCE(OLD.Xposition , 0) OR COALESCE(NEW.Yposition , 0) != COALESCE(OLD.Yposition , 0) OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.ad_wf_node_mod_trg(); publictadfalse23416 125595326ad_wf_node_trg()FUNCTION CREATE FUNCTION ad_wf_node_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_WF_Node Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_WF_Node_Trl ( AD_WF_Node_Trl_ID, AD_WF_Node_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsTranslated ) SELECT get_uuid(), new.AD_WF_Node_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.Help, 'N' FROM AD_Language, AD_Module M, AD_Workflow w WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' and w.ad_workflow_id = new.AD_Workflow_ID AND M.AD_Module_ID = w.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; END IF; -- Inserting -- AD_WF_Node update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) THEN UPDATE AD_WF_Node_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_WF_Node_ID=new.AD_WF_Node_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_wf_node_trg(); publictadfalse23416 125595322ad_wf_nodenext_mod_trg()FUNCTIONh CREATE FUNCTION ad_wf_nodenext_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_WF_NodeNext_ID; cuerrentModuleID := old.AD_WF_NODE_ID; ELSE cuerrentID := old.AD_WF_NodeNext_ID; cuerrentModuleID := NEW.AD_WF_NODE_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M, AD_WORKFLOW T, AD_WF_NODE T1 WHERE M.AD_MODULE_ID = T.AD_MODULE_ID AND T.AD_WORKFLOW_ID = T1.AD_WORKFLOW_ID AND T1.AD_WF_NODE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_WF_Node_ID , '.') != COALESCE(OLD.AD_WF_Node_ID , '.') OR COALESCE(NEW.AD_WF_Next_ID , '.') != COALESCE(OLD.AD_WF_Next_ID , '.') OR COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Condition , '.') != COALESCE(OLD.Condition , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.ad_wf_nodenext_mod_trg(); publictadfalse23416125536528!ad_window_copy(character varying)FUNCTIONCREATE FUNCTION ad_window_copy(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Window_Copy.sql,v 1.5 2003/02/07 05:49:59 jjanke Exp $ *** * Title: Copy Window Content (i.e Tabs and Fields) * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AD_Window_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo_T VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo_F VARCHAR(32); --OBTG:VARCHAR2-- v_NoOfTabs NUMERIC:=0; v_NoOfFields NUMERIC:=0; Cur_Tabs RECORD; Cur_Fields RECORD; v_AD_Module_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='AD_Window_ID') THEN v_AD_Window_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Window_ID=' || v_AD_Window_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; v_ResultStr:='GetEntityType'; --Insert fields in the same module as the window SELECT AD_Module_ID INTO v_AD_Module_ID FROM AD_Window WHERE AD_Window_ID = v_Record_ID; -- Record_ID is the Window_ID to copy to FOR Cur_Tabs IN (SELECT * FROM AD_Tab WHERE AD_Window_ID=v_AD_Window_ID) LOOP -- Get next no SELECT * INTO v_NextNo_T FROM AD_Sequence_Next('AD_Tab', Cur_Tabs.AD_Client_ID) ; -- Insert INSERT INTO AD_Tab ( AD_TAB_ID, AD_Window_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, DESCRIPTION, HELP, AD_TABLE_ID, TabLevel, SEQNO, ISSINGLEROW, ISINFOTAB, ISTRANSLATIONTAB, ISREADONLY, AD_COLUMN_ID, HASTREE, WHERECLAUSE, ORDERBYCLAUSE, COMMITWARNING, AD_PROCESS_ID, PROCESSING, AD_Module_ID ) VALUES ( v_NextNo_T, v_Record_ID, Cur_Tabs.AD_CLIENT_ID, Cur_Tabs.AD_ORG_ID, Cur_Tabs.ISACTIVE, TO_DATE(NOW()), Cur_Tabs.CREATEDBY, TO_DATE(NOW()), Cur_Tabs.UPDATEDBY, Cur_Tabs.NAME, Cur_Tabs.DESCRIPTION, Cur_Tabs.HELP, Cur_Tabs.AD_TABLE_ID, Cur_Tabs.TabLevel, Cur_Tabs.SEQNO, Cur_Tabs.ISSINGLEROW, Cur_Tabs.ISINFOTAB, Cur_Tabs.ISTRANSLATIONTAB, Cur_Tabs.ISREADONLY, Cur_Tabs.AD_COLUMN_ID, Cur_Tabs.HASTREE, Cur_Tabs.WHERECLAUSE, Cur_Tabs.ORDERBYCLAUSE, Cur_Tabs.COMMITWARNING, Cur_Tabs.AD_PROCESS_ID, Cur_Tabs.PROCESSING, v_AD_Module_ID ) ; -- Translate UPDATE AD_Tab_Trl SET Name= (SELECT Name FROM AD_Tab_Trl s WHERE s.AD_Tab_ID=Cur_Tabs.AD_Tab_ID AND s.AD_Language=AD_Tab_Trl.AD_Language ) , Description= (SELECT Description FROM AD_Tab_Trl s WHERE s.AD_Tab_ID=Cur_Tabs.AD_Tab_ID AND s.AD_Language=AD_Tab_Trl.AD_Language ) , Help= (SELECT Help FROM AD_Tab_Trl s WHERE s.AD_Tab_ID=Cur_Tabs.AD_Tab_ID AND s.AD_Language=AD_Tab_Trl.AD_Language ) WHERE AD_Tab_Trl.AD_Tab_ID=v_NextNo_T; -- Copy Fields FOR Cur_Fields IN (SELECT * FROM AD_Field WHERE AD_Tab_ID=Cur_Tabs.AD_Tab_ID) LOOP -- Get next no SELECT * INTO v_NextNo_F FROM AD_Sequence_Next('AD_Field', Cur_Fields.AD_Client_ID) ; -- Insert INSERT INTO AD_Field ( AD_Field_ID, AD_Tab_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsCentrallyMaintained, AD_Column_ID, AD_FieldGroup_ID, ISDISPLAYED, DISPLAYLOGIC, DISPLAYLENGTH, ISREADONLY, SEQNO, SORTNO, ISSAMELINE, ISFIELDONLY, ISENCRYPTED, AD_Module_ID ) VALUES ( v_NextNo_F, v_NextNo_T, Cur_Fields.AD_Client_ID, Cur_Fields.AD_Org_ID, Cur_Fields.IsActive, TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Fields.Name, Cur_Fields.Description, Cur_Fields.Help, Cur_Fields.IsCentrallyMaintained, Cur_Fields.AD_Column_ID, Cur_Fields.AD_FieldGroup_ID, Cur_Fields.ISDISPLAYED, Cur_Fields.DISPLAYLOGIC, Cur_Fields.DISPLAYLENGTH, Cur_Fields.ISREADONLY, Cur_Fields.SEQNO, Cur_Fields.SORTNO, Cur_Fields.ISSAMELINE, Cur_Fields.ISFIELDONLY, Cur_Fields.ISENCRYPTED, v_AD_Module_ID ) ; -- update translation UPDATE AD_Field_Trl SET Name= (SELECT Name FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) , Description= (SELECT Description FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) , Help= (SELECT Help FROM AD_Field_Trl s WHERE s.AD_Field_ID=Cur_Fields.AD_Field_ID AND s.AD_Language=AD_Field_Trl.AD_Language ) WHERE AD_Field_Trl.AD_Field_ID=v_NextNo_F; -- v_NoOfFields:=v_NoOfFields + 1; END LOOP; -- Field v_NoOfTabs:=v_NoOfTabs + 1; END LOOP; -- Tab v_Message:='@Copied@=' || v_NoOfTabs || '/' || v_NoOfFields; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; GDROP FUNCTION public.ad_window_copy(p_pinstance_id character varying); publictadfalse23416125595328ad_window_mod_trg()FUNCTIONRCREATE FUNCTION ad_window_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Window_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Window_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.WindowType , '.') != COALESCE(OLD.WindowType , '.') OR COALESCE(NEW.IsSOTrx , '.') != COALESCE(OLD.IsSOTrx , '.') OR COALESCE(NEW.Processing , '.') != COALESCE(OLD.Processing , '.') OR COALESCE(NEW.AD_Image_ID , '.') != COALESCE(OLD.AD_Image_ID , '.') OR COALESCE(NEW.IsDefault , '.') != COALESCE(OLD.IsDefault , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_window_mod_trg(); publictadfalse23416125595330ad_window_trg()FUNCTIONCREATE FUNCTION ad_window_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Window_Trg.sql,v 1.2 2002/08/26 05:23:32 jjanke Exp $ *** * Title: Window Changes * Description: * - Transaltion * - Sync Name (Workflow, Menu) * - Active State (Menu) ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Window Trigger -- for Translation -- Access IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Window_Trl ( AD_Window_Trl_ID, AD_Window_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsTranslated ) SELECT get_uuid(), new.AD_Window_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.Help, 'N' FROM AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' AND M.AD_Module_ID = new.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; -- Access for all INSERT INTO AD_Window_Access ( AD_Window_Access_ID, AD_Window_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite ) SELECT DISTINCT get_uuid(), new.AD_Window_ID, r.AD_Role_ID, r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y' FROM AD_Role r WHERE isManual='N'; END IF; -- Inserting -- AD_Window update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) THEN UPDATE AD_Menu SET Name=new.Name, Description=new.Description WHERE AD_Window_ID=new.AD_Window_ID and exists (select 1 from ad_module m, ad_module m1 where m.ad_module_id = ad_menu.ad_module_id and m1.ad_module_id = new.ad_module_id and m1.ad_language = m.ad_language); UPDATE AD_Menu_Trl SET Name=new.Name, Description=new.Description, IsTranslated ='Y' WHERE exists (select 1 from ad_module m, ad_module m1, ad_menu where m.ad_module_id = ad_menu.ad_module_id and m1.ad_module_id = new.ad_module_id and ad_menu.AD_WINDOW_ID = new.AD_Window_ID and AD_Menu_Trl.ad_language = m1.ad_language and AD_Menu_Trl.ad_menu_id = ad_menu.ad_menu_id); IF (COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.')) THEN -- Update Menu UPDATE AD_Menu SET IsActive=new.IsActive, Name=new.Name, Description=new.Description WHERE AD_Window_ID=new.AD_Window_ID; -- Update Workflow UPDATE AD_WF_Node SET IsActive=new.IsActive WHERE AD_Window_ID=new.AD_Window_ID; UPDATE AD_WF_Node SET Name=new.Name, Description=new.Description, Help=new.Help WHERE AD_Window_ID=new.AD_Window_ID AND IsCentrallyMaintained='Y'; END IF; -- Translation UPDATE AD_Window_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Window_ID=new.AD_Window_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; &DROP FUNCTION public.ad_window_trg(); publictadfalse23416125595333ad_window_trg2()FUNCTIONCREATE FUNCTION ad_window_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; CUR_DATA RECORD; v_JavaPackage VARCHAR(260); --OBTG:VARCHAR2-- v_ModuleMapping VARCHAR(260); --OBTG:VARCHAR2-- v_TabName VARCHAR(260); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF((COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.IsActive, '.') <> COALESCE(NEW.IsActive, '.') OR COALESCE(old.AD_Module_ID,'.') <> COALESCE(new.AD_Module_ID,'.'))) THEN SELECT (CASE WHEN M.AD_MODULE_ID ='0' THEN NULL ELSE JavaPackage END) INTO v_JavaPackage FROM AD_MODULE M WHERE AD_MODULE_ID = New.AD_Module_ID; IF v_JavaPackage IS NOT NULL THEN v_ModuleMapping := '/'||v_JavaPackage||'.'; v_JavaPackage := v_JavaPackage||'.'||AD_MAPPING_FORMAT(TO_CHAR(NEW.NAME)); ELSE v_ModuleMapping := '/'; v_JavaPackage := AD_MAPPING_FORMAT(TO_CHAR(NEW.NAME)); END IF; FOR CUR_DATA IN ( SELECT MO.AD_MODEL_OBJECT_ID, AD_MAPPING_FORMAT(TO_CHAR(NEW.NAME)) AS WINDOWNAME, AD_MAPPING_FORMAT(TO_CHAR(T.NAME)) AS TABNAME, t.AD_Module_ID, t.AD_Tab_ID FROM AD_MODEL_OBJECT MO, AD_TAB T WHERE MO.AD_TAB_ID=T.AD_TAB_ID AND MO.ACTION='W' AND T.AD_WINDOW_ID=NEW.AD_WINDOW_ID ) LOOP --Add tab's uuid to name for non-core tabs v_TabName := CUR_DATA.TABNAME; IF (CUR_DATA.AD_MODULE_ID!='0') THEN v_TabName := v_TabName||CUR_DATA.AD_Tab_ID; END IF; UPDATE AD_MODEL_OBJECT SET CLASSNAME=('org.openbravo.erpWindows.' || v_JavaPackage || '.' || CUR_DATA.TABNAME), ISACTIVE=NEW.ISACTIVE WHERE AD_MODEL_OBJECT_ID=CUR_DATA.AD_MODEL_OBJECT_ID and classname not like '%ComboReload%'; UPDATE AD_MODEL_OBJECT_MAPPING SET MAPPINGNAME=(v_ModuleMapping || CUR_DATA.WINDOWNAME || '/' || CUR_DATA.TABNAME || '_Relation.html'), ISACTIVE=NEW.ISACTIVE WHERE AD_MODEL_OBJECT_ID=CUR_DATA.AD_MODEL_OBJECT_ID AND MAPPINGNAME LIKE '%_Relation.html'; UPDATE AD_MODEL_OBJECT_MAPPING SET MAPPINGNAME=(v_ModuleMapping || CUR_DATA.WINDOWNAME || '/' || CUR_DATA.TABNAME || '_Edition.html'), ISACTIVE=NEW.ISACTIVE WHERE AD_MODEL_OBJECT_ID=CUR_DATA.AD_MODEL_OBJECT_ID AND MAPPINGNAME LIKE '%_Edition.html'; UPDATE AD_MODEL_OBJECT_MAPPING SET MAPPINGNAME=(v_ModuleMapping || CUR_DATA.WINDOWNAME || '/' || CUR_DATA.TABNAME || '_Excel.xls'), ISACTIVE=NEW.ISACTIVE WHERE AD_MODEL_OBJECT_ID=CUR_DATA.AD_MODEL_OBJECT_ID AND MAPPINGNAME LIKE '%_Excel.xls'; END LOOP; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.ad_window_trg2(); publictadfalse23416125595335ad_window_trl_trg()FUNCTIONCREATE FUNCTION ad_window_trl_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: AD_Window_Trl_Trg.sql,v 1.4 2003/02/18 03:33:22 jjanke Exp $ *** * Title: Window Trl Changes * Description: * - Update Translation in Menu + Workflow ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) THEN -- Update Menu UPDATE AD_Menu_Trl SET Name=new.Name, Description=new.Description WHERE AD_Language=new.AD_Language AND EXISTS ( SELECT 1 FROM AD_Menu m, ad_module mo WHERE m.AD_Menu_ID=AD_Menu_Trl.AD_Menu_ID AND m.AD_Window_ID=new.AD_Window_ID and m.ad_module_id = mo.ad_module_id and mo.ad_language!= new.AD_Language ) ; UPDATE AD_Menu m SET Name=new.Name, Description=new.Description WHERE EXISTS ( SELECT 1 FROM ad_module mo WHERE m.AD_Window_ID=new.AD_Window_ID and m.ad_module_id = mo.ad_module_id and mo.ad_language = new.AD_Language ) ; -- Update Workflow UPDATE AD_WF_Node_Trl SET Name=new.Name, Description=new.Description, Help=new.Help WHERE AD_Language=new.AD_Language AND EXISTS ( SELECT 1 FROM AD_WF_Node n, ad_module m, ad_workflow w WHERE n.AD_WF_Node_ID=AD_WF_Node_Trl.AD_WF_Node_ID AND n.AD_Window_ID=new.AD_Window_ID AND n.IsCentrallyMaintained='Y' and w.ad_workflow_id = n.ad_workflow_id and m.ad_module_id = w.ad_module_id and m.ad_language != new.AD_Language ) ; UPDATE AD_WF_Node n SET Name=new.Name, Description=new.Description, Help=new.Help WHERE EXISTS ( SELECT 1 FROM ad_module m, ad_workflow w WHERE n.AD_Window_ID=new.AD_Window_ID AND n.IsCentrallyMaintained='Y' and w.ad_workflow_id = n.ad_workflow_id and m.ad_module_id = w.ad_module_id and m.ad_language = new.AD_Language ) ; END IF; END IF; -- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; *DROP FUNCTION public.ad_window_trl_trg(); publictadfalse23416125595337ad_workflow_mod_trg()FUNCTION CREATE FUNCTION ad_workflow_mod_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ devTemplate NUMERIC; devModule CHAR(1); cuerrentID VARCHAR(32); --OBTG:VARCHAR2-- cuerrentModuleID VARCHAR(32); --OBTG:VARCHAR2-- vAux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --Check if trying to move object from module not in dev IF (TG_OP = 'UPDATE') THEN IF (COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.')) THEN SELECT COUNT(*) INTO vAux FROM AD_MODULE WHERE AD_MODULE_ID = old.AD_Module_ID AND isindevelopment = 'N'; IF (vAux!=0) THEN RAISE EXCEPTION '%', '@ChangeNotInDevModule@'; --OBTG:-20000-- END IF; END IF; END IF; SELECT COUNT(*) INTO devTemplate FROM AD_MODULE WHERE IsInDevelopment = 'Y' AND Type = 'T'; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN cuerrentID := new.AD_Workflow_ID; cuerrentModuleID := new.AD_Module_ID; ELSE cuerrentID := old.AD_Workflow_ID; cuerrentModuleID := old.AD_Module_ID; END IF; SELECT M.IsInDevelopment INTO devModule FROM AD_MODULE M WHERE M.AD_MODULE_ID = cuerrentModuleID; IF (TG_OP = 'UPDATE' AND devTemplate=0 AND devModule='N') THEN IF ( COALESCE(NEW.AD_Client_ID , '.') != COALESCE(OLD.AD_Client_ID , '.') OR COALESCE(NEW.AD_Org_ID , '.') != COALESCE(OLD.AD_Org_ID , '.') OR COALESCE(NEW.IsActive , '.') != COALESCE(OLD.IsActive , '.') OR COALESCE(NEW.Name , '.') != COALESCE(OLD.Name , '.') OR COALESCE(NEW.Description , '.') != COALESCE(OLD.Description , '.') OR COALESCE(NEW.Help , '.') != COALESCE(OLD.Help , '.') OR COALESCE(NEW.AccessLevel , '.') != COALESCE(OLD.AccessLevel , '.') OR COALESCE(NEW.AD_WF_Node_ID , '.') != COALESCE(OLD.AD_WF_Node_ID , '.') OR COALESCE(NEW.AD_Module_ID , '.') != COALESCE(OLD.AD_Module_ID , '.') OR 1=2) THEN RAISE EXCEPTION '%', 'Cannot update an object in a module not in developement and without an active template'; --OBTG:-20532-- END IF; END IF; IF ((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND devModule='N') THEN RAISE EXCEPTION '%', 'Cannot insert/delete objects in a module not in development.'; --OBTG:-20533-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.ad_workflow_mod_trg(); publictadfalse23416125595339ad_workflow_trg()FUNCTIONV CREATE FUNCTION ad_workflow_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Workflow Trigger -- for Translation -- Access IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AD_Workflow_Trl ( AD_Workflow_Trl_ID, AD_Workflow_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, Help, IsTranslated ) SELECT get_uuid(), new.AD_Workflow_ID, AD_Language.AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.Help, 'N' FROM AD_Language, AD_Module M WHERE AD_Language.IsActive='Y' AND IsSystemLanguage='Y' AND M.AD_Module_ID = new.AD_Module_ID AND M.AD_Language != AD_Language.AD_Language; -- Access for all INSERT INTO AD_WorkFlow_Access ( AD_WorkFlow_ID, AD_Role_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsReadWrite, AD_WorkFlow_Access_ID ) SELECT new.AD_WorkFlow_ID, r.AD_Role_ID, r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y', get_uuid() FROM AD_Role r WHERE isManual='N'; END IF; -- Inserting -- AD_Workflow update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.Help, '.') <> COALESCE(NEW.Help, '.')) THEN UPDATE AD_Workflow_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AD_Workflow_ID=new.AD_Workflow_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; (DROP FUNCTION public.ad_workflow_trg(); publictadfalse23416125536537+add_days(timestamp with time zone, integer)FUNCTIONCREATE FUNCTION add_days(timestamp with time zone, integer) RETURNS date AS $_$ BEGIN RETURN cast($1 AS date) + $2 ; END; $_$ LANGUAGE plpgsql IMMUTABLE; BDROP FUNCTION public.add_days(timestamp with time zone, integer); publictadfalse23416125536538add_days(date, numeric)FUNCTIONCREATE FUNCTION add_days(date, numeric) RETURNS date AS $_$ BEGIN RETURN $1 + cast($2 AS INTEGER) ; END; $_$ LANGUAGE plpgsql IMMUTABLE; .DROP FUNCTION public.add_days(date, numeric); publictadfalse23416125536539+add_days(timestamp with time zone, numeric)FUNCTIONCREATE FUNCTION add_days(timestamp with time zone, numeric) RETURNS date AS $_$ BEGIN RETURN cast($1 AS date) + cast($2 AS integer) ; END; $_$ LANGUAGE plpgsql IMMUTABLE; BDROP FUNCTION public.add_days(timestamp with time zone, numeric); publictadfalse23416125536540-add_months(timestamp with time zone, integer)FUNCTIONCREATE FUNCTION add_months(timestamp with time zone, integer) RETURNS timestamp with time zone AS $_$ begin return $1 + to_interval($2,to_char('months')); END; $_$ LANGUAGE plpgsql IMMUTABLE; DDROP FUNCTION public.add_months(timestamp with time zone, integer); publictadfalse23416125536541add_months(date, numeric)FUNCTIONCREATE FUNCTION add_months(date, numeric) RETURNS timestamp with time zone AS $_$ BEGIN return $1 + to_interval($2::INTEGER,to_char('months')); END; $_$ LANGUAGE plpgsql IMMUTABLE; 0DROP FUNCTION public.add_months(date, numeric); publictadfalse234161255365420add_months(timestamp without time zone, integer)FUNCTIONCREATE FUNCTION add_months(timestamp without time zone, integer) RETURNS timestamp with time zone AS $_$ BEGIN return $1 + to_interval($2,to_char('months')); END; $_$ LANGUAGE plpgsql IMMUTABLE; GDROP FUNCTION public.add_months(timestamp without time zone, integer); publictadfalse234161255365430add_months(timestamp without time zone, numeric)FUNCTIONCREATE FUNCTION add_months(timestamp without time zone, numeric) RETURNS timestamp with time zone AS $_$ BEGIN return $1 + to_interval($2::INTEGER,to_char('months')); END; $_$ LANGUAGE plpgsql IMMUTABLE; GDROP FUNCTION public.add_months(timestamp without time zone, numeric); publictadfalse23416125595341at_command_trg()FUNCTION CREATE FUNCTION at_command_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AT_Command Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO AT_Command_Trl ( AT_Command_Trl_ID, AT_Command_ID, AD_LANGUAGE, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, ArgHelp1, ArgHelp2, ArgHelp3, IsTranslated ) SELECT get_uuid(), NEW.AT_Command_ID, AD_LANGUAGE, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, NEW.Name, NEW.Description, NEW.ArgHelp1, NEW.ArgHelp2, NEW.ArgHelp3, 'N' FROM AD_LANGUAGE WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting -- AT_Command update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.ArgHelp1, 0) <> COALESCE(NEW.ArgHelp1, 0) OR COALESCE(old.ArgHelp2, 0) <> COALESCE(NEW.ArgHelp2, 0) OR COALESCE(old.ArgHelp3, 0) <> COALESCE(NEW.ArgHelp3, 0)) THEN UPDATE AT_Command_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE AT_Command_ID=NEW.AT_Command_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.at_command_trg(); publictadfalse23416125536545at_test_copy(character varying)FUNCTION{CREATE FUNCTION at_test_copy(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AT_Test_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_NoOfLines NUMERIC:=0; v_MaxSeqNo NUMERIC; Cur_Lines RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='AT_Test_ID') THEN v_AT_Test_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AT_Test_ID=' || v_AT_Test_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; SELECT CASE WHEN max(SeqNo) is NULL THEN 0 ELSE max(SeqNo) END INTO v_MaxSeqNo FROM AT_Line WHERE AT_Test_ID=v_Record_ID; -- Record_ID is the Test_ID to copy to v_ResultStr:='InsertLines'; FOR Cur_Lines IN (SELECT * FROM AT_LINE WHERE AT_Test_ID=v_AT_Test_ID) LOOP -- Get next no SELECT * INTO v_NextNo FROM AD_Sequence_Next('AT_Line', Cur_Lines.AD_Client_ID) ; -- Insert INSERT INTO AT_Line ( AT_LINE_ID, AT_TEST_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AT_COMMAND_ID, SEQNO, ARG1, ARG2, ARG3, TYPE, CHILD_TEST, ARGNO, ARGHELP1, ARGHELP2, ARGHELP3 ) VALUES (v_NextNo, v_Record_ID, Cur_Lines.AD_CLIENT_ID, Cur_Lines.AD_ORG_ID, Cur_Lines.ISACTIVE, TO_DATE(NOW()), Cur_Lines.CREATEDBY, TO_DATE(NOW()), Cur_Lines.UPDATEDBY, Cur_Lines.AT_COMMAND_ID, Cur_Lines.SEQNO + v_MaxSeqNo, Cur_Lines.ARG1, Cur_Lines.ARG2, Cur_Lines.ARG3, Cur_Lines.TYPE, Cur_Lines.CHILD_TEST, Cur_Lines.ARGNO, Cur_Lines.ARGHELP1, Cur_Lines.ARGHELP2, Cur_Lines.ARGHELP3) ; v_NoOfLines:=v_NoOfLines + 1; END LOOP; -- Line v_Message:='@Copied@=' || v_NoOfLines || ' lines'; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; EDROP FUNCTION public.at_test_copy(p_pinstance_id character varying); publictadfalse23416125536547!at_test_delete(character varying)FUNCTION CREATE FUNCTION at_test_delete(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_NoOfLines NUMERIC:=0; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; --Count number of lines SELECT count(*) INTO v_NoOfLines FROM AT_LINE WHERE AT_TEST_ID=v_Record_ID GROUP BY AT_TEST_ID; --Delete lines DELETE FROM AT_LINE WHERE AT_TEST_ID=v_Record_ID; v_Message:='@Deleted@=' || v_NoOfLines || ' lines'; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; GDROP FUNCTION public.at_test_delete(p_pinstance_id character varying); publictadfalse23416125536548Rc_acctschema_default_copy(character varying, character varying, character varying)FUNCTION-bCREATE FUNCTION c_acctschema_default_copy(p_pinstance_id character varying, p_client_id character varying, p_acctschema_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_AcctSchema_Default_Copy.sql,v 1.2 2001/11/26 05:25:18 jjanke Exp $ *** * Title: Copy Accounting Schema information to elements * Description: * Existing entities are overwritten) cascade all! ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_AcctSchema_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Cur_Acct RECORD; -- v_Updated NUMERIC:=0; v_Created NUMERIC:=0; v_Updated_Total NUMERIC:=0; v_Created_Total NUMERIC:=0; v_rowcount NUMERIC; v_count NUMERIC; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='AD_Client_ID') THEN v_AD_Client_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Client_ID=' || v_AD_Client_ID ; ELSIF(Cur_Parameter.ParameterName='C_AcctSchema_ID') THEN v_C_AcctSchema_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_ACCTSCHEMA_ID=' || v_C_AcctSchema_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Direct Calls IF(p_Client_ID IS NOT NULL) THEN v_AD_Client_ID:=p_Client_ID; RAISE NOTICE '%',' AD_Client_ID=' || v_AD_Client_ID ; ELSIF(p_AcctSchema_ID IS NOT NULL) THEN v_C_AcctSchema_ID:=p_AcctSchema_ID; RAISE NOTICE '%',' C_ACCTSCHEMA_ID=' || v_C_AcctSchema_ID ; END IF; /** * For all Accounting Schema */ FOR Cur_Acct IN (SELECT * FROM C_AcctSchema_Default WHERE AD_Client_ID=v_AD_Client_ID AND (C_AcctSchema_ID = v_C_AcctSchema_ID OR v_C_AcctSchema_ID IS NULL)) LOOP -- Update existing Product Category UPDATE M_Product_Category_Acct SET P_Revenue_Acct=Cur_Acct.P_Revenue_Acct, P_Expense_Acct=Cur_Acct.P_Expense_Acct, P_Asset_Acct=Cur_Acct.P_Asset_Acct, P_CoGs_Acct=Cur_Acct.P_CoGs_Acct, P_PurchasePriceVariance_Acct=Cur_Acct.P_PurchasePriceVariance_Acct, P_InvoicePriceVariance_Acct=Cur_Acct.P_InvoicePriceVariance_Acct, P_TradeDiscountRec_Acct=Cur_Acct.P_TradeDiscountRec_Acct, P_TradeDiscountGrant_Acct=Cur_Acct.P_TradeDiscountGrant_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE M_Product_Category_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM M_Product_Category p WHERE p.M_Product_Category_ID=M_Product_Category_Acct.M_Product_Category_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new Product Category INSERT INTO M_Product_Category_Acct ( M_Product_Category_Acct_ID, M_Product_Category_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, P_Revenue_Acct, P_Expense_Acct, P_Asset_Acct, P_CoGs_Acct, P_PurchasePriceVariance_Acct, P_InvoicePriceVariance_Acct, P_TradeDiscountRec_Acct, P_TradeDiscountGrant_Acct ) SELECT get_uuid(), p.M_Product_Category_ID, Cur_Acct.C_AcctSchema_ID, p.AD_Client_ID, p.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.P_Revenue_Acct, Cur_Acct.P_Expense_Acct, Cur_Acct.P_Asset_Acct, Cur_Acct.P_CoGs_Acct, Cur_Acct.P_PurchasePriceVariance_Acct, Cur_Acct.P_InvoicePriceVariance_Acct, Cur_Acct.P_TradeDiscountRec_Acct, Cur_Acct.P_TradeDiscountGrant_Acct FROM M_Product_Category p WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM M_Product_Category_Acct pa WHERE pa.M_Product_Category_ID=p.M_Product_Category_ID AND pa.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Product Category = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Business Partner Group UPDATE C_BP_Group_Acct SET C_Receivable_Acct=Cur_Acct.C_Receivable_Acct, C_PrePayment_Acct=Cur_Acct.C_PrePayment_Acct, V_Liability_Acct=Cur_Acct.V_Liability_Acct, V_Liability_Services_Acct=Cur_Acct.V_Liability_Services_Acct, V_PrePayment_Acct=Cur_Acct.V_PrePayment_Acct, PayDiscount_Exp_Acct=Cur_Acct.PayDiscount_Exp_Acct, PayDiscount_Rev_Acct=Cur_Acct.PayDiscount_Rev_Acct, WriteOff_Acct=Cur_Acct.WriteOff_Acct, UnRealizedGain_Acct=Cur_Acct.UnRealizedGain_Acct, UnRealizedLoss_Acct=Cur_Acct.UnRealizedLoss_Acct, RealizedGain_Acct=Cur_Acct.RealizedGain_Acct, RealizedLoss_Acct=Cur_Acct.RealizedLoss_Acct, NotInvoicedReceipts_Acct=Cur_Acct.NotInvoicedReceipts_Acct, UnEarnedRevenue_Acct=Cur_Acct.UnEarnedRevenue_Acct, NotInvoicedRevenue_Acct=Cur_Acct.NotInvoicedRevenue_Acct, NotInvoicedReceivables_Acct=Cur_Acct.NotInvoicedReceivables_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_BP_Group_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_BP_Group_Acct x WHERE x.C_BP_Group_ID=C_BP_Group_Acct.C_BP_Group_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_BP_Group_Acct ( C_BP_Group_Acct_ID, C_BP_Group_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Receivable_Acct, C_PrePayment_Acct, V_Liability_Acct, V_Liability_Services_Acct, V_PrePayment_Acct, PayDiscount_Exp_Acct, PayDiscount_Rev_Acct, WriteOff_Acct, UnRealizedGain_Acct, UnRealizedLoss_Acct, RealizedGain_Acct, RealizedLoss_Acct, NotInvoicedReceipts_Acct, UnEarnedRevenue_Acct, NotInvoicedRevenue_Acct, NotInvoicedReceivables_Acct ) SELECT get_uuid(), x.C_BP_Group_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.C_Receivable_Acct, Cur_Acct.C_PrePayment_Acct, Cur_Acct.V_Liability_Acct, Cur_Acct.V_Liability_Services_Acct, Cur_Acct.V_PrePayment_Acct, Cur_Acct.PayDiscount_Exp_Acct, Cur_Acct.PayDiscount_Rev_Acct, Cur_Acct.WriteOff_Acct, Cur_Acct.UnRealizedGain_Acct, Cur_Acct.UnRealizedLoss_Acct, Cur_Acct.RealizedGain_Acct, Cur_Acct.RealizedLoss_Acct, Cur_Acct.NotInvoicedReceipts_Acct, Cur_Acct.UnEarnedRevenue_Acct, Cur_Acct.NotInvoicedRevenue_Acct, Cur_Acct.NotInvoicedReceivables_Acct FROM C_BP_Group x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_BP_Group_Acct a WHERE a.C_BP_Group_ID=x.C_BP_Group_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Business Group = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Business Partner - Employee UPDATE C_BP_Employee_Acct SET E_Expense_Acct=Cur_Acct.E_Expense_Acct, E_PrePayment_Acct=Cur_Acct.E_PrePayment_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_BP_Employee_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_BP_Employee_Acct x WHERE x.C_BPartner_ID=C_BP_Employee_Acct.C_BPartner_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_BP_Employee_Acct ( C_BP_Employee_Acct_Id, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, E_Expense_Acct, E_PrePayment_Acct ) SELECT get_uuid(), x.C_BPartner_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.E_Expense_Acct, Cur_Acct.E_PrePayment_Acct FROM C_BPartner x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_BP_Employee_Acct a WHERE a.C_BPartner_ID=x.C_BPartner_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Employees = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Warehouse UPDATE M_Warehouse_Acct SET W_Inventory_Acct=Cur_Acct.W_Inventory_Acct, W_Differences_Acct=Cur_Acct.W_Differences_Acct, W_Revaluation_Acct=Cur_Acct.W_Revaluation_Acct, W_InvActualAdjust_Acct=Cur_Acct.W_InvActualAdjust_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE M_Warehouse_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM M_Warehouse_Acct x WHERE x.M_Warehouse_ID=M_Warehouse_Acct.M_Warehouse_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO M_Warehouse_Acct ( M_Warehouse_Acct_ID, M_Warehouse_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, W_Inventory_Acct, W_Differences_Acct, W_Revaluation_Acct, W_InvActualAdjust_Acct ) SELECT get_uuid(), x.M_Warehouse_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.W_Inventory_Acct, Cur_Acct.W_Differences_Acct, Cur_Acct.W_Revaluation_Acct, Cur_Acct.W_InvActualAdjust_Acct FROM M_Warehouse x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM M_Warehouse_Acct a WHERE a.M_Warehouse_ID=x.M_Warehouse_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Warehouse = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Project UPDATE C_Project_Acct SET PJ_Asset_Acct=Cur_Acct.PJ_Asset_Acct, PJ_WIP_Acct=Cur_Acct.PJ_Asset_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_Project_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_Project_Acct x WHERE x.C_Project_ID=C_Project_Acct.C_Project_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_Project_Acct ( C_Project_Acct_ID, C_Project_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, PJ_Asset_Acct, PJ_WIP_Acct ) SELECT get_uuid(), x.C_Project_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.PJ_Asset_Acct, Cur_Acct.PJ_WIP_Acct FROM C_Project x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_Project_Acct a WHERE a.C_Project_ID=x.C_Project_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Project = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Tax UPDATE C_Tax_Acct SET T_Due_Acct=Cur_Acct.T_Due_Acct, T_Liability_Acct=Cur_Acct.T_Liability_Acct, T_Credit_Acct=Cur_Acct.T_Credit_Acct, T_Receivables_Acct=Cur_Acct.T_Receivables_Acct, T_Expense_Acct=Cur_Acct.T_Expense_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_Tax_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_Tax_Acct x WHERE x.C_Tax_ID=C_Tax_Acct.C_Tax_ID) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_Tax_Acct ( C_Tax_Acct_ID, C_Tax_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, T_Due_Acct, T_Liability_Acct, T_Credit_Acct, T_Receivables_Acct, T_Expense_Acct ) SELECT get_uuid(), x.C_Tax_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.T_Due_Acct, Cur_Acct.T_Liability_Acct, Cur_Acct.T_Credit_Acct, Cur_Acct.T_Receivables_Acct, Cur_Acct.T_Expense_Acct FROM C_Tax x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_Tax_Acct a WHERE a.C_Tax_ID=x.C_Tax_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Tax = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- BankAccount UPDATE C_BankAccount_Acct SET B_InTransit_Acct=Cur_Acct.B_InTransit_Acct, B_Asset_Acct=Cur_Acct.B_Asset_Acct, B_Expense_Acct=Cur_Acct.B_Expense_Acct, B_InterestRev_Acct=Cur_Acct.B_InterestRev_Acct, B_InterestExp_Acct=Cur_Acct.B_InterestExp_Acct, B_UnIdentified_Acct=Cur_Acct.B_UnIdentified_Acct, B_UnAllocatedCash_Acct=Cur_Acct.B_UnAllocatedCash_Acct, B_PaymentSelect_Acct=Cur_Acct.B_PaymentSelect_Acct, B_SettlementGain_Acct=Cur_Acct.B_SettlementGain_Acct, B_SettlementLoss_Acct=Cur_Acct.B_SettlementLoss_Acct, B_RevaluationGain_Acct=Cur_Acct.B_RevaluationGain_Acct, B_RevaluationLoss_Acct=Cur_Acct.B_RevaluationLoss_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_BankAccount_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_BankAccount_Acct x WHERE x.C_BankAccount_ID=C_BankAccount_Acct.C_BankAccount_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_BankAccount_Acct ( C_BankAccount_Acct_ID, C_BankAccount_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, B_InTransit_Acct, B_Asset_Acct, B_Expense_Acct, B_InterestRev_Acct, B_InterestExp_Acct, B_UnIdentified_Acct, B_UnAllocatedCash_Acct, B_PaymentSelect_Acct, B_SettlementGain_Acct, B_SettlementLoss_Acct, B_RevaluationGain_Acct, B_RevaluationLoss_Acct ) SELECT get_uuid(), x.C_BankAccount_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.B_InTransit_Acct, Cur_Acct.B_Asset_Acct, Cur_Acct.B_Expense_Acct, Cur_Acct.B_InterestRev_Acct, Cur_Acct.B_InterestExp_Acct, Cur_Acct.B_UnIdentified_Acct, Cur_Acct.B_UnAllocatedCash_Acct, Cur_Acct.B_PaymentSelect_Acct, Cur_Acct.B_SettlementGain_Acct, Cur_Acct.B_SettlementLoss_Acct, Cur_Acct.B_RevaluationGain_Acct, Cur_Acct.B_RevaluationLoss_Acct FROM C_BankAccount x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_BankAccount_Acct a WHERE a.C_BankAccount_ID=x.C_BankAccount_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Bank Account = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Withholding UPDATE C_Withholding_Acct SET Withholding_Acct=Cur_Acct.Withholding_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_Withholding_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_Withholding_Acct x WHERE x.C_Withholding_ID=C_Withholding_Acct.C_Withholding_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_Withholding_Acct ( C_Withholding_Acct_ID, C_Withholding_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Withholding_Acct ) SELECT get_uuid(), x.C_Withholding_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.Withholding_Acct FROM C_Withholding x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_Withholding_Acct a WHERE a.C_Withholding_ID=x.C_Withholding_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Withholding = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Charge UPDATE C_Charge_Acct SET Ch_Expense_Acct=Cur_Acct.Ch_Expense_Acct, Ch_Revenue_Acct=Cur_Acct.Ch_Revenue_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_Charge_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_Charge_Acct x WHERE x.C_Charge_ID=C_Charge_Acct.C_Charge_ID) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_Charge_Acct ( C_Charge_Acct_ID, C_Charge_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Ch_Expense_Acct, Ch_Revenue_Acct ) SELECT get_uuid(), x.C_Charge_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.Ch_Expense_Acct, Cur_Acct.Ch_Revenue_Acct FROM C_Charge x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_Charge_Acct a WHERE a.C_Charge_ID=x.C_Charge_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Charge = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; -- Cashbook UPDATE C_Cashbook_Acct SET CB_Asset_Acct=Cur_Acct.CB_Asset_Acct, CB_Differences_Acct=Cur_Acct.CB_Differences_Acct, CB_CashTransfer_Acct=Cur_Acct.CB_CashTransfer_Acct, CB_Expense_Acct=Cur_Acct.CB_Expense_Acct, CB_Receipt_Acct=Cur_Acct.CB_Receipt_Acct, Updated=TO_DATE(NOW()), UpdatedBy='0' WHERE C_Cashbook_Acct.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID AND EXISTS (SELECT * FROM C_Cashbook_Acct x WHERE x.C_Cashbook_ID=C_Cashbook_Acct.C_Cashbook_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_rowcount; -- Insert new INSERT INTO C_Cashbook_Acct ( C_Cashbook_Acct_ID, C_Cashbook_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, CB_Asset_Acct, CB_Differences_Acct, CB_CashTransfer_Acct, CB_Expense_Acct, CB_Receipt_Acct ) SELECT get_uuid(), x.C_Cashbook_ID, Cur_Acct.C_AcctSchema_ID, x.AD_Client_ID, x.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_Acct.CB_Asset_Acct, Cur_Acct.CB_Differences_Acct, Cur_Acct.CB_CashTransfer_Acct, Cur_Acct.CB_Expense_Acct, Cur_Acct.CB_Receipt_Acct FROM C_Cashbook x WHERE AD_Client_ID=Cur_Acct.AD_Client_ID AND NOT EXISTS (SELECT * FROM C_Cashbook_Acct a WHERE a.C_Cashbook_ID=x.C_Cashbook_ID AND a.C_AcctSchema_ID=Cur_Acct.C_AcctSchema_ID ) ; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Created:=v_rowcount; RAISE NOTICE '%','Cashbook = ' || v_Updated || ' / ' || v_Created ; v_Updated_Total:=v_Updated_Total + v_Updated; v_Created_Total:=v_Created_Total + v_Created; END LOOP; v_Message:='@Created@=' || v_Created_Total || ', @Updated@=' || v_Updated_Total; ---- <> --Extension point for Transitory Account SELECT count(*) INTO v_count FROM DUAL where exists (select 1 from ad_ep_procedures where ad_extension_points_id = 'C13A8C820A9E437CA970FF46D6E00580'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); v_extension_point_id VARCHAR(32) := 'C13A8C820A9E437CA970FF46D6E00580'; BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'AD_Client_ID', v_AD_Client_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'C_AcctSchema_ID', v_C_AcctSchema_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; END IF; -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_acctschema_default_copy(p_pinstance_id character varying, p_client_id character varying, p_acctschema_id character varying); publictadfalse23416125536550?c_acctschema_default_copy(character varying, character varying)FUNCTIONCREATE FUNCTION c_acctschema_default_copy(p_pinstance_id character varying, p_client_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_ACCTSCHEMA_DEFAULT_COPY($1, $2, NULL); END ; $_$ LANGUAGE plpgsql; qDROP FUNCTION public.c_acctschema_default_copy(p_pinstance_id character varying, p_client_id character varying); publictadfalse23416125536551,c_acctschema_default_copy(character varying)FUNCTIONCREATE FUNCTION c_acctschema_default_copy(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_ACCTSCHEMA_DEFAULT_COPY($1, NULL); END ; $_$ LANGUAGE plpgsql; RDROP FUNCTION public.c_acctschema_default_copy(p_pinstance_id character varying); publictadfalse23416125595359c_acctschema_element_trg()FUNCTION%CREATE FUNCTION c_acctschema_element_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Update Valid Combination * when element becomes mandatory **/ v_UpdateIt BOOLEAN:=FALSE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Do we have to update IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN IF(new.IsMandatory='Y') THEN v_UpdateIt:=TRUE; END IF; END IF; -- IF(v_UpdateIt) THEN IF(new.ElementType IN('OO', 'AC')) THEN NULL; -- Mandatory - no need ELSIF(new.ElementType='PR' AND new.M_Product_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET M_Product_ID=new.M_Product_ID WHERE M_Product_ID IS NULL; ELSIF(new.ElementType='BP' AND new.C_BPartner_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_BPartner_ID=new.C_BPartner_ID WHERE C_BPartner_ID IS NULL; ELSIF(new.ElementType='PJ' AND new.C_Project_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_Project_ID=new.C_Project_ID WHERE C_Project_ID IS NULL; ELSIF(new.ElementType='OT' AND new.Org_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET AD_OrgTrx_ID=new.Org_ID WHERE AD_OrgTrx_ID IS NULL; ELSIF(new.ElementType='LT' AND new.C_Location_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_LocTo_ID=new.C_Location_ID WHERE C_LocTo_ID IS NULL; ELSIF(new.ElementType='LF' AND new.C_Location_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_LocFrom_ID=new.C_Location_ID WHERE C_LocFrom_ID IS NULL; ELSIF(new.ElementType='SR' AND new.C_SalesRegion_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_SalesRegion_ID=new.C_SalesRegion_ID WHERE C_SalesRegion_ID IS NULL; ELSIF(new.ElementType='MC' AND new.C_Campaign_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_Campaign_ID=new.C_Campaign_ID WHERE C_Campaign_ID IS NULL; ELSIF(new.ElementType='AY' AND new.C_Activity_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET C_Activity_ID=new.C_Activity_ID WHERE C_Activity_ID IS NULL; ELSIF(new.ElementType='U1' AND new.C_ElementValue_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET User1_ID=new.C_ElementValue_ID WHERE User1_ID IS NULL; ELSIF(new.ElementType='U2' AND new.C_ElementValue_ID IS NOT NULL) THEN UPDATE C_ValidCombination SET User2_ID=new.C_ElementValue_ID WHERE User2_ID IS NULL; END IF; END IF; -- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 1DROP FUNCTION public.c_acctschema_element_trg(); publictadfalse23416125595361c_acctschema_process_trg()FUNCTION8CREATE FUNCTION c_acctschema_process_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC; v_Count2 NUMERIC; --TYPE RECORD IS REFCURSOR; cur_AcctSchemas RECORD; v_c_ACCTSCHEMA_ID c_acctschema.c_acctschema_id%type; BEGIN IF (NEW.ISDATASET='Y') THEN -- Present trigger manages the issue of inserting a row in c_acctschema_process --table with no value for the c_acctschema_id column. In that case, one row will --be inserted for each accounting schema of the client or organization. -- Main scenario for this situation is that a dataset of a module tries to --insert a process for the accounting schema that is being created during an --initial client/organization setup. IF (NEW.C_ACCTSCHEMA_ID IS NULL) THEN SELECT COUNT(1) INTO v_Count FROM AD_ORG_ACCTSCHEMA WHERE AD_CLIENT_ID = NEW.AD_CLIENT_ID AND AD_ORG_ID = NEW.AD_ORG_ID; -- If there exists just one accounting schema for the organization, means trigger --is launched due to a initial organization setup, or entity module management IF (v_Count=1) THEN SELECT C_ACCTSCHEMA_ID INTO v_c_ACCTSCHEMA_ID FROM AD_ORG_ACCTSCHEMA WHERE AD_CLIENT_ID = NEW.AD_CLIENT_ID AND AD_ORG_ID = NEW.AD_ORG_ID; ELSIF (v_Count=0) THEN SELECT COUNT(1) INTO v_Count2 FROM AD_ORG_ACCTSCHEMA WHERE AD_CLIENT_ID=NEW.AD_CLIENT_ID AND AD_ORG_ID='0'; -- If there exists just one schema for the client, means trigger was launched --due to an initial client setup. IF (v_Count2=1) THEN SELECT C_ACCTSCHEMA_ID INTO v_c_ACCTSCHEMA_ID FROM AD_ORG_ACCTSCHEMA WHERE AD_CLIENT_ID = NEW.AD_CLIENT_ID AND AD_ORG_ID = NEW.AD_ORG_ID; ELSE -- No accounting schema was found! RAISE EXCEPTION '%','@NoAcctSchema@'; --OBTG:-20000-- END IF; ELSIF (v_Count>1) THEN -- If there exists more than one accounting schema for the organization then --one row is inserted in c_acctschema_process for each schema of the organization --in except of one, which c_acctschema_id is assigned to the :new.c_acctschema_id SELECT MAX(C_ACCTSCHEMA_ID) INTO v_c_ACCTSCHEMA_ID FROM AD_ORG_ACCTSCHEMA WHERE AD_CLIENT_ID=NEW.AD_CLIENT_ID AND AD_ORG_ID=NEW.AD_ORG_ID; FOR cur_AcctSchemas IN ( SELECT C_ACCTSCHEMA_ID FROM AD_ORG_ACCTSCHEMA WHERE AD_CLIENT_ID=NEW.AD_CLIENT_ID AND AD_ORG_ID=NEW.AD_ORG_ID ) LOOP IF (cur_AcctSchemas.C_ACCTSCHEMA_ID <> v_c_ACCTSCHEMA_ID) THEN INSERT INTO C_ACCTSCHEMA_PROCESS (C_ACCTSCHEMA_PROCESS_ID, C_ACCTSCHEMA_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, AD_ACCTPROCESS_ID, SEQNO) VALUES (GET_UUID(), cur_AcctSchemas.C_ACCTSCHEMA_ID, NEW.AD_CLIENT_ID, NEW.AD_ORG_ID, NEW.ISACTIVE, NEW.AD_ACCTPROCESS_ID, NEW.SEQNO); END IF; END LOOP; END IF; NEW.C_ACCTSCHEMA_ID := v_c_ACCTSCHEMA_ID; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 1DROP FUNCTION public.c_acctschema_process_trg(); publictadfalse23416125595363c_acctschema_trg()FUNCTION CREATE FUNCTION c_acctschema_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; cur_tables RECORD; v_AcctSchema_Table_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; FOR cur_tables IN ( SELECT AD_Table.AD_Table_ID as id, (AD_Table.Name) as name FROM AD_Table WHERE EXISTS ( SELECT * FROM AD_Column c WHERE AD_Table.AD_Table_ID=c.AD_Table_ID AND c.ColumnName='Posted' ) AND AD_Table.isActive='Y' ) LOOP SELECT * INTO v_AcctSchema_Table_ID FROM AD_Sequence_Next('C_AcctSchema_Table', new.AD_ORG_ID) ; INSERT INTO C_ACCTSCHEMA_TABLE ( UPDATEDBY, UPDATED, ISACTIVE, CREATEDBY, CREATED, C_ACCTSCHEMA_TABLE_ID, C_ACCTSCHEMA_ID, AD_TABLE_ID, AD_ORG_ID, AD_CLIENT_ID ) VALUES ( new.UPDATEDBY, TO_DATE(NOW()), 'N', new.CREATEDBY, TO_DATE(NOW()), v_AcctSchema_Table_ID, new.C_ACCTSCHEMA_ID, cur_tables.id, new.AD_ORG_ID, new.AD_CLIENT_ID ) ; END LOOP; UPDATE C_ACCTSCHEMA_TABLE SET ISACTIVE='Y' WHERE AD_TABLE_ID IN (SELECT AD_TABLE_ID FROM AD_TABLE WHERE ISDEFAULTACCT='Y') ; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_acctschema_trg(); publictadfalse23416125595357c_acctschemadel_trg()FUNCTIONCREATE FUNCTION c_acctschemadel_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; DELETE FROM C_ACCTSCHEMA_TABLE WHERE C_ACCTSCHEMA_ID=old.C_ACCTSCHEMA_ID; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.c_acctschemadel_trg(); publictadfalse234161255365563c_add_months2(timestamp without time zone, numeric)FUNCTIONHCREATE FUNCTION c_add_months2(pdate timestamp without time zone, pmonths numeric) RETURNS timestamp without time zone AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2007 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Description: This function is is similar to oracle's add_months function * In case the TIMESTAMP is i.e. 28/02/2007 this function will return 28/03/2007 * while add_moths returns 31/03/2007 ************************************************************************/ pDateAux TIMESTAMP; BEGIN if (last_day(pDate)!=pDate) then return add_months(pdate, pMonths); else pDateAux := add_months(pDate, pMonths); if (to_number(to_char(pDateAux,'DD'))>to_number(to_char(pDate,'DD'))) then return TO_DATE(to_char(pDate,'DD')||to_char(pDateAux,'-MM-YYYY'),'DD-MM-YYYY'); else return pDateAux; end if; end if; END ; $$ LANGUAGE plpgsql; XDROP FUNCTION public.c_add_months2(pdate timestamp without time zone, pmonths numeric); publictadfalse23416125536557Rc_aging_get_scope(timestamp without time zone, numeric, numeric, numeric, numeric)FUNCTION=CREATE FUNCTION c_aging_get_scope(pdate timestamp without time zone, pcol1 numeric, pcol2 numeric, pcol3 numeric, pcol4 numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Description: This function is is similar to oracle's add_months function * In case the TIMESTAMP is i.e. 28/02/2007 this function will return 28/03/2007 * while add_moths returns 31/03/2007 ************************************************************************/ pDateAux TIMESTAMP; BEGIN if (pDate-1 or AD_IsOrgIncluded(new.AD_ORG_ID, AD_Org_ID, new.AD_Client_ID)<>-1) AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) AND D.AD_CLIENT_ID = new.AD_Client_ID ) LOOP INSERT INTO C_BankAccount_Acct ( C_BankAccount_Acct_ID, C_BankAccount_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, B_InTransit_Acct, B_Asset_Acct, B_Expense_Acct, B_InterestRev_Acct, B_InterestExp_Acct, B_UnIdentified_Acct, B_SettlementGain_Acct, B_SettlementLoss_Acct, B_RevaluationGain_Acct, B_RevaluationLoss_Acct, B_PaymentSelect_Acct, B_UnallocatedCash_Acct ) VALUES ( get_uuid(), new.C_BankAccount_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.B_InTransit_Acct, Cur_Defaults.B_Asset_Acct, Cur_Defaults.B_Expense_Acct, Cur_Defaults.B_InterestRev_Acct, Cur_Defaults.B_InterestExp_Acct, Cur_Defaults.B_UnIdentified_Acct, Cur_Defaults.B_SettlementGain_Acct, Cur_Defaults.B_SettlementLoss_Acct, Cur_Defaults.B_RevaluationGain_Acct, Cur_Defaults.B_RevaluationLoss_Acct, Cur_Defaults.B_PaymentSelect_Acct, Cur_Defaults.B_UnallocatedCash_Acct ) ; END LOOP; ELSIF (TG_OP = 'UPDATE') THEN UPDATE C_BANKACCOUNT_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE C_BANKACCOUNT_ID = new.C_BANKACCOUNT_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; *DROP FUNCTION public.c_bankaccount_trg(); publictadfalse23416125595365c_bankaccountiban_trg()FUNCTION1"CREATE FUNCTION c_bankaccountiban_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_IBAN_check NUMERIC; v_Bank VARCHAR(4); --OBTG:NVARCHAR2-- v_Branch VARCHAR(4); --OBTG:NVARCHAR2-- v_DigitBank VARCHAR(1); --OBTG:NVARCHAR2-- v_Location VARCHAR(32); --OBTG:NVARCHAR2-- v_CountryId VARCHAR(2); --OBTG:NVARCHAR2-- v_BankName VARCHAR(60); --OBTG:NVARCHAR2-- v_Length NUMERIC; v_ShortLength NUMERIC; v_BankNameLength NUMERIC; v_CodeAccountLength NUMERIC; v_ProposedDisplayedAccount VARCHAR(512); --OBTG:NVARCHAR2-- v_LimitLength NUMERIC:=50; v_LastNumAccount NUMERIC:=4; v_AccountSeparator VARCHAR(5):='(...)'; --OBTG:NVARCHAR2-- v_BankSeparator VARCHAR(3):='...'; --OBTG:NVARCHAR2-- v_I_AccountNumberOrig VARCHAR(60); --OBTG:NVARCHAR2-- v_I_AccountNumberFinal VARCHAR(600):=''; --OBTG:NVARCHAR2-- v_i_char VARCHAR(2); --OBTG:NVARCHAR2-- v_i_char_ascii NUMERIC; v_i NUMERIC:=1; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Default Accounts for all AcctSchema IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT NAME INTO v_BankName FROM C_BANK WHERE C_BANK_ID=NEW.C_BANK_ID; IF (NEW.CODEACCOUNT IS NOT NULL OR NEW.DIGITCONTROL IS NOT NULL) THEN SELECT CODEBANK, CODEBRANCH, DIGITCONTROL INTO v_Bank, v_Branch, v_DigitBank FROM C_BANK WHERE C_BANK_ID=NEW.C_BANK_ID; IF (v_Bank IS NULL OR v_Branch IS NULL OR v_DigitBank IS NULL) THEN RAISE EXCEPTION '%', 'Bank information is missing.'; --OBTG:-20258-- END IF; END IF; IF (NEW.IBAN IS NOT NULL) THEN v_I_AccountNumberOrig:=SUBSTR(NEW.IBAN, 5, LENGTH(NEW.IBAN)-4); v_CodeAccountLength:=LENGTH(v_I_AccountNumberOrig); WHILE (v_i<=v_CodeAccountLength) LOOP v_i_char:=SUBSTR(v_I_AccountNumberOrig, v_i, 1); v_i_char_ascii:=ASCII(v_i_char); --It is not a number, transforming to number IF ((v_i_char_ascii<48) OR (v_i_char_ascii>57)) THEN v_i_char:=TO_CHAR(v_i_char_ascii-55); END IF; v_I_AccountNumberFinal:=v_I_AccountNumberFinal||v_i_char; v_i:=v_i+1; END LOOP; SELECT MOD(TO_NUMBER(v_I_AccountNumberFinal|| TRIM(TO_CHAR(ASCII(SUBSTR(UPPER(NEW.IBAN),1,1))-55)) ||TRIM(TO_CHAR(ASCII(SUBSTR(UPPER(NEW.IBAN),2,1))-55))|| SUBSTR(NEW.IBAN,3,2) , '999999999999999999999999999999999999999999999999999999999999' ) ,97) AS DC INTO v_IBAN_check FROM DUAL; IF (v_IBAN_check <> 1) THEN RAISE EXCEPTION '%', 'Incorrect IBAN Code.'; --OBTG:-20257-- END IF; SELECT C_LOCATION_ID INTO v_Location FROM C_BANK WHERE C_BANK_ID=NEW.C_BANK_ID; IF (v_Location IS NULL) THEN RAISE EXCEPTION '%', 'Bank does not have country defined.'; --OBTG:-20260-- END IF; SELECT IBANCOUNTRY, IBANNODIGITS INTO v_CountryId, v_Length FROM C_COUNTRY WHERE C_COUNTRY_ID=( SELECT C_COUNTRY_ID FROM C_LOCATION WHERE C_LOCATION_ID=v_Location ); IF ((v_CountryId IS NULL OR v_Length IS NULL) OR (v_CountryId <> SUBSTR(UPPER(NEW.IBAN),1,2) OR v_Length <> LENGTH(NEW.IBAN))) THEN RAISE EXCEPTION '%', 'The IBAN number defined in the bank account tab, must fit the IBAN data of the country defined in the bank tab.'; --OBTG:-20259-- END IF; END IF; IF (NEW.SHOWSPANISH='Y') THEN SELECT CODEBANK, CODEBRANCH, DIGITCONTROL INTO v_Bank, v_Branch, v_DigitBank FROM C_BANK WHERE C_BANK_ID=NEW.C_BANK_ID; SELECT v_BankName || '. ' || v_Bank || '-' || v_Branch || '-' || v_DigitBank || NEW.DIGITCONTROL || '-' || NEW.CODEACCOUNT, LENGTH(v_BankName || '. ' || v_Bank || '-' || v_Branch || '-' || v_DigitBank || NEW.DIGITCONTROL || '-' || NEW.CODEACCOUNT) INTO v_ProposedDisplayedAccount, v_Length FROM DUAL; IF (v_Length > v_LimitLength) THEN SELECT LENGTH(NEW.CODEACCOUNT), LENGTH(v_BankName) INTO v_CodeAccountLength, v_BankNameLength FROM DUAL; --Remove some letters of the bank name SELECT SUBSTR(v_ProposedDisplayedAccount, 1, v_BankNameLength-(v_Length-v_LimitLength+LENGTH(v_BankSeparator)-1)) || v_BankSeparator || SUBSTR(v_ProposedDisplayedAccount, v_BankNameLength+LENGTH(v_BankSeparator)-1, v_Length) INTO v_ProposedDisplayedAccount FROM DUAL; END IF; ELSIF (NEW.SHOWIBAN='Y') THEN SELECT v_BankName || '. ' || SUBSTR(UPPER(NEW.IBAN),1,4) || '-' || SUBSTR(NEW.IBAN, 5, LENGTH(NEW.IBAN)-4), LENGTH(v_BankName || '. ' || SUBSTR(UPPER(NEW.IBAN),1,4) || '-' || SUBSTR(NEW.IBAN, 5, LENGTH(NEW.IBAN)-4)), LENGTH(v_BankName) INTO v_ProposedDisplayedAccount, v_Length, v_BankNameLength FROM DUAL; IF (v_Length > v_LimitLength) THEN SELECT v_Length + LENGTH(v_AccountSeparator) - v_LimitLength, LENGTH(SUBSTR(NEW.IBAN, 5, LENGTH(NEW.IBAN)-4)) INTO v_ShortLength, v_CodeAccountLength FROM DUAL; IF (v_ShortLength < v_CodeAccountLength-v_LastNumAccount) THEN --Remove some account numbers SELECT SUBSTR(v_ProposedDisplayedAccount, 1, v_Length-v_CodeAccountLength+v_CodeAccountLength-v_LastNumAccount-v_ShortLength) || v_AccountSeparator || SUBSTR(v_ProposedDisplayedAccount, v_Length-v_LastNumAccount+1, v_Length) INTO v_ProposedDisplayedAccount FROM DUAL; ELSE --Remove some letters of the bank name SELECT SUBSTR(v_ProposedDisplayedAccount, 1, v_BankNameLength-(v_Length-v_LimitLength+LENGTH(v_BankSeparator)-1)) || v_BankSeparator || SUBSTR(v_ProposedDisplayedAccount, v_BankNameLength+LENGTH(v_BankSeparator)-1, v_Length) INTO v_ProposedDisplayedAccount FROM DUAL; END IF; END IF; ELSE SELECT v_BankName || '. ' || NEW.GENERICACCOUNT, LENGTH(v_BankName || '. ' || NEW.GENERICACCOUNT), LENGTH(v_BankName) INTO v_ProposedDisplayedAccount, v_Length, v_BankNameLength FROM DUAL; IF (v_Length > v_LimitLength) THEN SELECT v_Length + LENGTH(v_AccountSeparator) - v_LimitLength, LENGTH(NEW.GENERICACCOUNT) INTO v_ShortLength, v_CodeAccountLength FROM DUAL; IF (v_ShortLength < v_CodeAccountLength-v_LastNumAccount) THEN --Remove some account numbers SELECT SUBSTR(v_ProposedDisplayedAccount, 1, v_Length-v_CodeAccountLength+v_CodeAccountLength-v_LastNumAccount-v_ShortLength) || v_AccountSeparator || SUBSTR(v_ProposedDisplayedAccount, v_Length-v_LastNumAccount+1, v_Length) INTO v_ProposedDisplayedAccount FROM DUAL; ELSE --Remove some letters of the bank name SELECT SUBSTR(v_ProposedDisplayedAccount, 1, v_BankNameLength-(v_Length-v_LimitLength+LENGTH(v_BankSeparator)-1)) || v_BankSeparator || SUBSTR(v_ProposedDisplayedAccount, v_BankNameLength+LENGTH(v_BankSeparator)-1, v_Length) INTO v_ProposedDisplayedAccount FROM DUAL; END IF; END IF; END IF; NEW.DISPLAYEDACCOUNT:=v_ProposedDisplayedAccount; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'Incorrect IBAN Code.' ; --OBTG:-20257-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.c_bankaccountiban_trg(); publictadfalse23416!125595370c_bankcountry_trg()FUNCTION~ CREATE FUNCTION c_bankcountry_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC; v_OldCountry VARCHAR(32); --OBTG:NVARCHAR2-- v_NewCountry VARCHAR(32); --OBTG:NVARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Default Accounts for all AcctSchema IF(TG_OP = 'UPDATE') THEN -- If Bank information is modified, must be checked that: -- 1: If a IBAN account was declared into this bank, the country of the bank still the same SELECT COUNT(IBAN) INTO v_Count FROM C_BANKACCOUNT WHERE C_BANK_ID=NEW.C_BANK_ID; IF (v_Count <> 0) THEN IF (NEW.C_LOCATION_ID IS NULL) THEN RAISE EXCEPTION '%', 'An IBAN account is defined for this bank. Country must not be changed.' ; --OBTG:-20259-- END IF; SELECT C_COUNTRY_ID INTO v_OldCountry FROM C_LOCATION WHERE C_LOCATION_ID = OLD.C_LOCATION_ID; SELECT C_COUNTRY_ID INTO v_NewCountry FROM C_LOCATION WHERE C_LOCATION_ID = NEW.C_LOCATION_ID; IF (v_OldCountry <> v_NewCountry) THEN RAISE EXCEPTION '%', 'An IBAN account is defined for this bank. Country must not be changed.' ; --OBTG:-20259-- END IF; END IF; -- 2: If an Spanish bank account was declared into this bank, nor bank code, nor branch code, nor digit control are null IF ((NEW.CODEBANK IS NULL) OR (NEW.CODEBRANCH IS NULL) OR (NEW.DIGITCONTROL IS NULL)) THEN SELECT COUNT(CODEACCOUNT) INTO v_Count FROM C_BANKACCOUNT WHERE C_BANK_ID=NEW.C_BANK_ID; IF (v_Count <> 0) THEN RAISE EXCEPTION '%', 'An Spanish account is defined for this bank. Bank Code, Branch Code and Control Digit must be defined' ; --OBTG:-20265-- END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_bankcountry_trg(); publictadfalse23416125536562'c_bankstatement_post(character varying)FUNCTIONuCREATE FUNCTION c_bankstatement_post(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BankStatement_Post.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Post Bank Statments * Description: * - Update Balance and De-Activate ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC; v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_User VARCHAR(32); --OBTG:VARCHAR2-- v_DPManagementDocType_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DPMId VARCHAR(32); --OBTG:varchar2-- v_DPMLineId VARCHAR(32); --OBTG:varchar2-- --Added by P.SAROBE v_C_Debt_Payment_ID VARCHAR(32); --OBTG:VARCHAR2-- v_documentno_Settlement VARCHAR(40); --OBTG:VARCHAR2-- v_documentno_Dp_Management VARCHAR(50); --OBTG:VARCHAR2-- v_column_identifier VARCHAR(200); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_Cancel_Processed VARCHAR(60); v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_Bankstatementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ispaid CHAR(1); v_is_included NUMERIC:=0; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; --Finish added by P.Sarobe -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_BankstatementDebtpayment RECORD; -- Parameter Variables -- Parameter Variables v_Processed CHAR(1) ; v_Posted CHAR(1) ; v_Processing CHAR(1) ; v_count NUMERIC; v_SettlementDocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_settlementID VARCHAR(32) ; --OBTG:varchar2-- v_DocumentNo VARCHAR(50); --OBTG:VARCHAR2-- v_line C_CASHLINE.LINE%TYPE; -- BankAccount v_BA_Currency_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_BS_Date TIMESTAMP; v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter SELECT PROCESSED, POSTED, PROCESSING, AD_Client_ID, AD_Org_ID INTO v_Processed, v_Posted, v_Processing, v_AD_Client_ID, v_AD_Org_ID FROM C_BANKSTATEMENT WHERE C_BankStatement_ID=v_Record_ID FOR UPDATE; IF(v_Processing='Y') THEN RAISE EXCEPTION '%', '@OtherProcessActive@' ; --OBTG:-20000-- END IF; IF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@BankStatementDocumentPosted@' ; --OBTG:-20000-- END IF; UPDATE C_BANKSTATEMENT SET PROCESSING='Y' WHERE C_BANKSTATEMENT_ID = v_Record_ID; IF(NOT FINISH_PROCESS) THEN DECLARE Cur_AutomaticSettlementCancel RECORD; CUR_MANAGEMENTLINES RECORD; v_DP_MANAGEMENT NUMERIC; v_DATEACCT TIMESTAMP; v_DATETRX TIMESTAMP; BEGIN /* * Reversing process */ IF (v_Processed = 'Y') THEN v_ResultStr := 'Reversed'; --Unpost Settlement FOR Cur_AutomaticSettlementCancel IN (SELECT DISTINCT S.C_SETTLEMENT_ID FROM C_DEBT_PAYMENT DP, C_SETTLEMENT S WHERE DP.C_SETTLEMENT_CANCEL_ID = S.C_SETTLEMENT_ID AND DP.C_BANKSTATEMENTLINE_ID IN (SELECT C_BANKSTATEMENTLINE_ID FROM C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT_ID = v_Record_ID) AND S.DOCUMENTNO LIKE '*BSP*%') LOOP -- Reset fact acct DELETE FROM FACT_ACCT WHERE AD_TABLE_ID = '800019' AND RECORD_ID = Cur_AutomaticSettlementCancel.C_SETTLEMENT_ID; UPDATE C_SETTLEMENT SET POSTED='N' WHERE C_SETTLEMENT_ID = Cur_AutomaticSettlementCancel.C_SETTLEMENT_ID; UPDATE C_DEBT_PAYMENT SET C_BANKSTATEMENTLINE_ID = NULL, C_SETTLEMENT_CANCEL_ID = NULL, ISPAID = 'N', CANCEL_PROCESSED = 'N' WHERE C_SETTLEMENT_CANCEL_ID = Cur_AutomaticSettlementCancel.C_SETTLEMENT_ID; PERFORM C_SETTLEMENT_POST(null, Cur_AutomaticSettlementCancel.C_SETTLEMENT_ID); DELETE FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = Cur_AutomaticSettlementCancel.C_SETTLEMENT_ID; END LOOP; --Unpost DP returned from remittances FOR CUR_MANAGEMENTLINES IN (SELECT BSL.C_DP_MANAGEMENT_ID, RL.C_REMITTANCELINE_ID, BSL.C_BANKSTATEMENTLINE_ID, BSL.LINE FROM C_REMITTANCE_TYPE RT, C_REMITTANCE R, C_REMITTANCELINE RL, C_BANKSTATEMENTLINE BSL, C_DEBT_PAYMENT DP, C_DEBT_PAYMENT DP2 WHERE R.C_REMITTANCE_ID = RL.C_REMITTANCE_ID AND RT.C_REMITTANCE_TYPE_ID = R.C_REMITTANCE_TYPE_ID AND RL.C_DEBT_PAYMENT_CANCELLED = BSL.C_DEBT_PAYMENT_ID AND BSL.C_DEBT_PAYMENT_ID = DP.C_DEBT_PAYMENT_ID AND RL.C_DEBT_PAYMENT_ID = DP2.C_DEBT_PAYMENT_ID AND BSL.C_BANKSTATEMENT_ID = v_Record_ID AND RT.STATUS_RETURNED = DP.STATUS AND RT.STATUS_RETURNED = DP2.STATUS AND EXISTS (SELECT 1 FROM C_DP_MANAGEMENT WHERE BSL.C_DP_MANAGEMENT_ID=C_DP_MANAGEMENT.C_DP_MANAGEMENT_ID)) LOOP begin DELETE FROM FACT_ACCT WHERE AD_TABLE_ID = '800176' AND RECORD_ID = CUR_MANAGEMENTLINES.C_DP_MANAGEMENT_ID; UPDATE C_DP_MANAGEMENT SET POSTED='N' WHERE C_DP_MANAGEMENT_ID = CUR_MANAGEMENTLINES.C_DP_MANAGEMENT_ID; PERFORM C_DP_MANAGEMENT_POST(NULL, CUR_MANAGEMENTLINES.C_DP_MANAGEMENT_ID); DELETE FROM C_DP_MANAGEMENTLINE WHERE C_DP_MANAGEMENT_ID = CUR_MANAGEMENTLINES.C_DP_MANAGEMENT_ID; UPDATE C_BANKSTATEMENTLINE SET C_DP_MANAGEMENT_ID = NULL WHERE C_BANKSTATEMENTLINE_ID = CUR_MANAGEMENTLINES.C_BANKSTATEMENTLINE_ID; DELETE FROM C_DP_MANAGEMENT WHERE C_DP_MANAGEMENT_ID = CUR_MANAGEMENTLINES.C_DP_MANAGEMENT_ID; UPDATE C_REMITTANCELINE SET RETURNED = 'N' WHERE C_REMITTANCELINE_ID = CUR_MANAGEMENTLINES.C_REMITTANCELINE_ID; exception when others then -- ROLLBACK; v_ResultStr:='@ErrorUnoprocessingBS@ Line:' ||CUR_MANAGEMENTLINES.LINE|| ': ' || SQLERRM || ' - ' || v_Message; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; end; END LOOP; UPDATE C_DEBT_PAYMENT SET C_BANKSTATEMENTLINE_ID = NULL WHERE C_BANKSTATEMENTLINE_ID IS NOT NULL AND C_BANKSTATEMENTLINE_ID IN (SELECT C_BANKSTATEMENTLINE_ID FROM C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT_ID = v_Record_ID); UPDATE C_BANKSTATEMENT SET PROCESSED = 'N', StatementDifference=NULL, EndingBalance=0, PROCESSING = 'N' WHERE C_BANKSTATEMENT_ID = v_Record_ID; FINISH_PROCESS := true; END IF; END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /* * Checking Restrictions */ -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_BANKSTATEMENT, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_BANKSTATEMENT.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_BANKSTATEMENT.C_BANKSTATEMENT_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_BANKSTATEMENT', 'C_BANKSTATEMENTLINE', v_Record_ID, 'C_BANKSTATEMENT_ID', 'C_BANKSTATEMENT_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOC_PAYMENTS('C_BANKSTATEMENT', 'C_BANKSTATEMENTLINE', v_Record_ID, 'C_BANKSTATEMENT_ID', 'C_BANKSTATEMENT_ID', 'C_DEBT_PAYMENT_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@PaymentsAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) SELECT StatementDate INTO v_BS_Date FROM C_BankStatement WHERE C_BankStatement_ID=v_Record_ID; -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('C_BANKSTATEMENT', v_Record_ID, 'C_BANKSTATEMENT_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_BS_Date, 'CMB', NULL) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; v_ResultStr:='CheckingRestrictions - C_BANKSTATEMENT ORG IS IN C_BANKACCOUNT ORG TREE'; SELECT COUNT(*) INTO v_count FROM C_BANKSTATEMENT c, C_BANKACCOUNT b WHERE c.C_BankStatement_ID=v_Record_ID AND c.C_BANKACCOUNT_ID=b.C_BANKACCOUNT_ID AND Ad_Isorgincluded(c.AD_ORG_ID, b.AD_ORG_ID, b.AD_CLIENT_ID)=-1; IF v_count>0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgBankaccount@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='CheckingRestrictions - C_BANKSTATEMENT ORG IS IN C_DEBT_PAYMENT ORG TREE'; /*--Deprecated by PSarobe--SELECT COUNT(*) INTO v_count FROM (SELECT * FROM (SELECT l.AD_ORG_ID AS A, bp.AD_ORG_ID AS B, c.AD_ORG_ID AS C, c.AD_CLIENT_ID AS D FROM C_BANKSTATEMENT c, C_BANKSTATEMENTLINE cl, C_DEBT_PAYMENT l, C_BPARTNER bp WHERE c.C_BankStatement_ID=cl.C_BankStatement_ID AND c.C_BankStatement_ID=v_Record_ID AND cl.C_DEBT_PAYMENT_ID=l.C_DEBT_PAYMENT_ID AND l.C_BPARTNER_ID=bp.C_BPARTNER_ID ) S GROUP BY A, B, C, D HAVING Ad_Isorgincluded(A, B, D)=-1 OR Ad_Isorgincluded(A, C, D)=-1 ) SS;*/ --Added by PSarobe. Same way as C_CASH_POST SELECT COUNT(*), MAX(cl.Line) INTO v_count, v_line FROM C_BANKSTATEMENT c, C_BANKSTATEMENTLINE cl, C_DEBT_PAYMENT l, C_BPARTNER bp WHERE c.C_BANKSTATEMENT_ID=cl.C_BANKSTATEMENT_ID AND c.C_BANKSTATEMENT_ID=v_Record_ID AND cl.C_DEBT_PAYMENT_ID=l.C_DEBT_PAYMENT_ID AND l.C_BPARTNER_ID=bp.C_BPARTNER_ID AND(Ad_Isorgincluded(l.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1--To be deprecated, to be fixed. This Check restriction should be checked when debt payment is created. Added by PSarobe OR Ad_Isorgincluded(l.AD_ORG_ID, c.AD_ORG_ID, c.AD_CLIENT_ID)=-1) ; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@NotCorrectOrgDebtpaymentBankstatement@' ; --OBTG:-20000-- END IF;--Finish added by PSarobe END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(bsl.Line) INTO v_count, v_line FROM C_BANKSTATEMENTLINE bsl, C_DEBT_PAYMENT dp WHERE bsl.C_BankStatement_ID=v_Record_ID AND bsl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND bsl.C_Currency_ID=dp.C_Currency_ID AND CASE dp.IsReceipt WHEN 'Y' THEN -- If IsReceipt = N, amount*-1 (dp.Amount-coalesce(dp.WriteOffAmt,0)) ELSE(coalesce(dp.WriteOffAmt,0)-dp.Amount) END <>(bsl.TrxAmt) ; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@DebtAmountsSamemoneyNoMatch@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(bsl.Line) INTO v_count, v_line FROM C_BANKSTATEMENTLINE bsl, C_BANKSTATEMENT bs, C_DEBT_PAYMENT dp WHERE bsl.C_BankStatement_ID=bs.C_BankStatement_ID AND bsl.C_BankStatement_ID=v_Record_ID AND bsl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND bsl.C_Currency_ID<>dp.C_Currency_ID AND C_Currency_Round(C_Currency_Convert( (CASE dp.IsReceipt WHEN 'Y' THEN -- If IsReceipt = N, amount*-1 (dp.Amount-coalesce(dp.WriteOffAmt,0)) ELSE(coalesce(dp.WriteOffAmt,0)-dp.Amount) END), dp.C_Currency_ID, bsl.C_Currency_ID, bs.StatementDate, NULL, bs.AD_Client_ID, bs.AD_Org_ID),bsl.C_Currency_ID, null) <> C_Currency_Round(bsl.TrxAmt, bsl.C_Currency_ID, null); IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@DebtAmountsDifferentMoneyNoMatch@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(bsl.C_BANKSTATEMENTLINE_ID) INTO v_count, v_Bankstatementline_ID FROM C_BANKSTATEMENTLINE bsl, C_DEBT_PAYMENT dp WHERE bsl.C_BankStatement_ID=v_Record_ID AND bsl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND C_Debt_Payment_Status(dp.C_SETTLEMENT_CANCEL_ID, dp.Cancel_Processed, dp.Generate_Processed, dp.IsPaid, dp.IsValid, dp.C_CashLine_ID, dp.C_BankStatementLine_ID) NOT IN('P', 'A') ; IF v_count>0 THEN --Added by P.Sarobe. New messages SELECT line, c_Debt_payment_Id INTO v_line, v_C_Debt_Payment_Id FROM C_Bankstatementline WHERE c_Bankstatementline_Id = v_Bankstatementline_ID; SELECT c_Bankstatementline_Id, c_cashline_id, c_settlement_cancel_id, ispaid, cancel_processed INTO v_Bankstatementline_ID, v_CashLine_ID, v_Settlement_Cancel_ID, v_ispaid, v_Cancel_Processed FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID = v_C_Debt_Payment_Id; IF v_Bankstatementline_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_BANKSTATEMENTLINE_ID = v_Bankstatementline_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ManagedDebtPaymentBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_CashLine_ID IS NOT NULL THEN--This is also checked in the unique index C_CASHLINE_DEBT_PAYMENT SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ManagedDebtPaymentCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; IF v_Cancel_Processed='Y' AND v_ispaid='N' THEN SELECT documentno, datetrx INTO v_documentno_Settlement, v_dateSettlement FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = v_Settlement_Cancel_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ManagedDebtPaymentCancel@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF; END IF;--FINISH_PROCESS IF (NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(Line) INTO v_Count, v_Line FROM C_BANKSTATEMENTLINE WHERE C_BankStatement_ID=v_Record_ID AND STMTAMT != TRXAMT-CHARGEAMT-CONVERTCHARGEAMT; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ChargeAmtsDontMatch@'; --OBTG:-20000-- END IF; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(debtpayment_Id) INTO v_count, v_C_Debt_Payment_Id FROM (SELECT min(dp.C_Debt_Payment_ID) as debtpayment_Id FROM C_BANKSTATEMENTLINE bsl, C_DEBT_PAYMENT dp WHERE bsl.C_BankStatement_ID=v_Record_ID AND bsl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID GROUP BY dp.C_Debt_Payment_ID HAVING COUNT(*)>1 ) A; IF v_count>0 THEN --Added by PSarobe. FOR Cur_BankstatementDebtpayment IN (SELECT line FROM c_Bankstatementline WHERE c_Bankstatementline.c_Bankstatement_id=v_Record_ID AND c_Bankstatementline.c_debt_payment_id=v_C_Debt_Payment_Id ORDER BY line) LOOP v_Message:=v_Message||Cur_BankstatementDebtpayment.line||', '; END LOOP; RAISE EXCEPTION '%', '@Inlines@'||v_Message||' '||'@Samedebtpayment@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Generate C_Settlement */ DECLARE CUR_BSLINES_DATES RECORD; Cur_ManagementLines1 RECORD; /* Map error NUMERIC returned by raise_application_error to user-defined exception. */ -- RAISE_EXCEPTION Exception; -- PRAGMA EXCEPTION_INIT(RAISE_EXCEPTION, -20000); BEGIN FOR Cur_ManagementLines1 IN (SELECT BSL.C_DEBT_PAYMENT_ID AS DP1, RT.STATUS_RETURNED, RL.C_DEBT_PAYMENT_ID AS DP2, RL.AD_ORG_ID, R.AD_CLIENT_ID, BSL.DATEACCT, BSL.VALUTADATE, BSL.C_CURRENCY_ID, DP.STATUS, DP2.STATUS AS DP2_STATUS, BSL.UPDATEDBY, RL.C_REMITTANCELINE_ID, BSL.C_BANKSTATEMENTLINE_ID FROM C_REMITTANCE_TYPE RT, C_REMITTANCE R, C_REMITTANCELINE RL, C_BANKSTATEMENTLINE BSL, C_DEBT_PAYMENT DP, C_DEBT_PAYMENT DP2 WHERE R.C_REMITTANCE_ID=RL.C_REMITTANCE_ID AND RT.C_REMITTANCE_TYPE_ID=R.C_REMITTANCE_TYPE_ID AND RL.C_DEBT_PAYMENT_CANCELLED=BSL.C_DEBT_PAYMENT_ID AND BSL.C_DEBT_PAYMENT_ID=DP.C_DEBT_PAYMENT_ID AND RL.C_DEBT_PAYMENT_ID=DP2.C_DEBT_PAYMENT_ID AND BSL.C_BANKSTATEMENT_ID=v_Record_ID AND RL.RETURNED='N' ) LOOP --Create DPManagement v_DPManagementDocType_ID:=Ad_Get_DocType(Cur_ManagementLines1.AD_Client_ID, Cur_ManagementLines1.AD_Org_ID, 'DPM') ; SELECT * INTO v_DPMId FROM Ad_Sequence_Next('C_DP_Management', Cur_ManagementLines1.AD_Org_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DPManagementDocType_ID, v_Record_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_DP_Management', Cur_ManagementLines1.AD_Client_ID, 'Y') ; END IF; INSERT INTO C_DP_Management ( C_DP_MANAGEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, C_DOCTYPE_ID, DATEACCT, C_Currency_ID ) VALUES ( v_DPMId, Cur_ManagementLines1.ad_Client_Id, Cur_ManagementLines1.AD_Org_Id, 'Y', TO_DATE(NOW()), Cur_ManagementLines1.UPDATEDBY, TO_DATE(NOW()), Cur_ManagementLines1.UPDATEDBY, v_DocumentNo, Cur_ManagementLines1.VALUTADATE, v_DPManagementDocType_ID, Cur_ManagementLines1.DATEACCT, Cur_ManagementLines1.C_Currency_ID ) ; SELECT * INTO v_DPMLineId FROM Ad_Sequence_Next('C_DP_ManagementLine', Cur_ManagementLines1.AD_Org_ID) ; INSERT INTO C_DP_ManagementLine ( C_DP_MANAGEMENTLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_DP_MANAGEMENT_ID, STATUS_FROM, STATUS_TO, C_DEBT_PAYMENT_ID ) VALUES ( v_DPMLineId, Cur_ManagementLines1.ad_Client_Id, Cur_ManagementLines1.AD_Org_Id, 'Y', TO_DATE(NOW()), Cur_ManagementLines1.UPDATEDBY, TO_DATE(NOW()), Cur_ManagementLines1.UPDATEDBY, v_DPMId, Cur_ManagementLines1.DP2_STATUS, Cur_ManagementLines1.STATUS_RETURNED, Cur_ManagementLines1.DP2 ) ; SELECT * INTO v_DPMLineId FROM Ad_Sequence_Next('C_DP_ManagementLine', Cur_ManagementLines1.AD_Org_ID) ; INSERT INTO C_DP_ManagementLine ( C_DP_MANAGEMENTLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_DP_MANAGEMENT_ID, STATUS_FROM, STATUS_TO, C_DEBT_PAYMENT_ID ) VALUES ( v_DPMLineId, Cur_ManagementLines1.ad_Client_Id, Cur_ManagementLines1.AD_Org_Id, 'Y', TO_DATE(NOW()), Cur_ManagementLines1.UPDATEDBY, TO_DATE(NOW()), Cur_ManagementLines1.UPDATEDBY, v_DPMId, Cur_ManagementLines1.STATUS, Cur_ManagementLines1.STATUS_RETURNED, Cur_ManagementLines1.DP1 ) ; UPDATE C_REMITTANCELINE SET RETURNED='Y' WHERE C_REMITTANCELINE_ID=Cur_ManagementLines1.C_REMITTANCELINE_ID; UPDATE C_BANKSTATEMENTLINE SET C_DP_MANAGEMENT_ID=v_DPMId WHERE C_BANKSTATEMENTLINE_ID=Cur_ManagementLines1.C_BANKSTATEMENTLINE_ID; PERFORM C_DP_MANAGEMENT_POST(null, v_DPMId) ; END LOOP; v_ResultStr:='GettingBankAccountInfo'; SELECT ba.C_Currency_ID, bs.StatementDate INTO v_BA_Currency_ID, v_BS_Date FROM C_BANKACCOUNT ba, C_BANKSTATEMENT bs WHERE ba.C_BankAccount_ID=bs.C_BankAccount_ID AND bs.C_BankStatement_ID=v_Record_ID; v_SettlementDocType_ID:=Ad_Get_DocType(v_AD_Client_ID, v_AD_Org_ID, 'STT') ; FOR CUR_BSLINES_DATES IN (SELECT DISTINCT bsl.DATEACCT FROM C_BANKSTATEMENTLINE bsl, C_DEBT_PAYMENT dp WHERE bsl.C_BankStatement_ID=v_Record_ID AND bsl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND C_Debt_Payment_Status(dp.C_SETTLEMENT_CANCEL_ID, dp.Cancel_Processed, dp.Generate_Processed, dp.IsPaid, dp.IsValid, dp.C_CashLine_ID, dp.C_BankStatementLine_ID)='P' ) LOOP SELECT * INTO v_settlementID FROM Ad_Sequence_Next('C_Settlement', v_Record_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_SettlementDocType_ID, v_Record_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_AD_Client_ID, 'Y') ; END IF; INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, PROCESSING, PROCESSED, POSTED, C_CURRENCY_ID, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, CREATEFROM, ISGENERATED ) SELECT v_settlementID, AD_Client_ID, AD_Org_ID, 'Y', TO_DATE(NOW()), UpdatedBy, TO_DATE(NOW()), UpdatedBy, '*BSP*'||v_DocumentNo, TRUNC(v_BS_Date), CUR_BSLINES_DATES.DATEACCT, 'B', v_SettlementDocType_ID, 'N', 'N', 'N', v_BA_Currency_ID, NULL, NULL, NULL, NULL, NULL, 'N', 'Y' FROM C_BANKSTATEMENT WHERE C_BankStatement_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET C_SETTLEMENT_CANCEL_ID=v_settlementID, IsPaid='Y' WHERE C_DEBT_PAYMENT.C_Debt_Payment_ID IN (SELECT C_Debt_Payment_ID FROM C_BANKSTATEMENTLINE WHERE C_BankStatement_ID=v_Record_ID AND DateAcct=CUR_BSLINES_DATES.DATEACCT ) AND C_Debt_Payment_Status(C_DEBT_PAYMENT.C_SETTLEMENT_CANCEL_ID, C_DEBT_PAYMENT.Cancel_Processed, C_DEBT_PAYMENT.Generate_Processed, C_DEBT_PAYMENT.IsPaid, C_DEBT_PAYMENT.IsValid, C_DEBT_PAYMENT.C_CashLine_ID, C_DEBT_PAYMENT.C_BankStatementLine_ID)='P'; PERFORM C_SETTLEMENT_POST(NULL, v_settlementID) ; END LOOP; --Added by PSarobe EXCEPTION WHEN RAISE_EXCEPTION THEN IF (SQLERRM LIKE '%@DPAccountdatelaterSettlementdate@') THEN RAISE NOTICE '%',v_ResultStr ; SELECT MAX(C_DP_Management.DOCUMENTNO), MAX(C_Bankstatementline.line) INTO v_documentno_Dp_Management, v_line FROM C_Bankstatement, C_Bankstatementline, C_DP_Management, C_DP_Managementline WHERE C_Bankstatement.C_Bankstatement_Id = C_Bankstatementline.C_BANKSTATEMENT_ID AND C_Bankstatementline.C_DEBT_PAYMENT_ID = C_DP_Managementline.C_DEBT_PAYMENT_ID AND C_DP_Managementline.C_DP_MANAGEMENT_ID = C_DP_Management.C_DP_MANAGEMENT_ID AND C_DP_Management.DATEACCT > C_Bankstatementline.DATEACCT AND C_Bankstatement.C_Bankstatement_Id = v_Record_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||'@DPDebtPaymentManaged@'||v_documentno_Dp_Management||' '||'@DPAccountdatelaterBankstatementlinedate@' ; --OBTG:-20000-- ELSE RAISE NOTICE '%',v_ResultStr; RAISE EXCEPTION '%', SUBSTR(SQLERRM,12,2000) ; --OBTG:-20000-- END IF; WHEN OTHERS THEN RAISE NOTICE '%',v_ResultStr ; RAISE EXCEPTION '%', SQLERRM; END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Update Balances + De-Activate + Conciliate Debt_Payments */ DECLARE v_Total NUMERIC:=0; v_Currency_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- -- Lines Cur_Lines RECORD; BEGIN -- Calculate Total FOR Cur_Lines IN (SELECT * FROM C_BANKSTATEMENTLINE WHERE C_BankStatement_ID=v_Record_ID) LOOP v_ResultStr:='GettingTrxCurrency'; -- Get Debt_Payment Currency and conciliate Debt/Payments IF(Cur_Lines.C_Debt_Payment_ID IS NOT NULL) THEN UPDATE C_DEBT_PAYMENT SET C_BankStatementLine_ID=Cur_Lines.C_BankStatementLine_ID WHERE C_Debt_Payment_ID=Cur_Lines.C_Debt_Payment_ID; /* Lines are converted to the bankAccount currency, this is not necesary SELECT C_Currency_ID INTO v_Currency_ID FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID=Cur_Lines.C_Debt_Payment_ID; */ END IF; v_Total:=v_Total + Cur_Lines.StmtAmt; /* Lines are converted to the bankAccount currency, this is not necesary -- Assume BankAccount Currency for Charge IF(v_Currency_ID IS NULL) THEN v_Currency_ID:=v_BA_Currency_ID; END IF; v_ResultStr:='CalculatingSum'; IF(v_Currency_ID<>v_BA_Currency_ID) THEN v_Total:=v_Total + C_Currency_Convert(Cur_Lines.StmtAmt, v_Currency_ID, v_BA_Currency_ID, v_BS_Date, NULL, Cur_Lines.AD_Client_ID, Cur_Lines.AD_Org_ID) ; ELSE v_Total:=v_Total + Cur_Lines.StmtAmt; END IF; */ END LOOP; -- RAISE NOTICE '%','BankStatement Complete - Total=' || v_Total ; v_ResultStr:='UpdatingRecord'; UPDATE C_BANKSTATEMENT SET StatementDifference=v_Total, EndingBalance=COALESCE(BeginningBalance, 0) + v_Total, Processed='Y', Updated=TO_DATE(NOW()), Processing='N' WHERE C_BankStatement_ID=v_Record_ID; END; END IF;--FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_User, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN -- ROLLBACK; v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; MDROP FUNCTION public.c_bankstatement_post(p_pinstance_id character varying); publictadfalse23416#125595374c_bankstatement_trg()FUNCTIONCREATE FUNCTION c_bankstatement_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BankStatement_Trg.sql,v 1.2 2003/01/27 06:22:11 jjanke Exp $ *** * Title: RO check * Description: ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(old.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; ,DROP FUNCTION public.c_bankstatement_trg(); publictadfalse23416"125595372c_bankstatementline_trg()FUNCTION CREATE FUNCTION c_bankstatementline_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BankStatementLine_Trg.sql,v 1.4 2003/01/27 06:22:11 jjanke Exp $ *** * Title: Update Balance of Statement, RO check * Description: ************************************************************************/ v_Difference NUMERIC:=0; v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RO NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Difference, ID IF(TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_Difference:=new.StmtAmt; v_ID:=new.C_BankStatement_ID; END IF; IF(TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN v_Difference:=v_Difference - old.StmtAmt; v_ID:=old.C_BankStatement_ID; END IF; -- ReadOnly Check /*SELECT COUNT(*) INTO v_RO FROM C_BankStatement WHERE C_BankStatement_ID=v_ID AND Processed='Y'; IF (v_RO > 0) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF;*/ -- Update header UPDATE C_BankStatement SET StatementDifference=StatementDifference + v_Difference, EndingBalance=EndingBalance + v_Difference WHERE C_BankStatement_ID=v_ID; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 0DROP FUNCTION public.c_bankstatementline_trg(); publictadfalse23416125536566mc_base_convert(numeric, character varying, character varying, timestamp without time zone, character varying)FUNCTIONCREATE FUNCTION c_base_convert(p_amount numeric, p_curfrom_id character varying, p_client_id character varying, p_convdate timestamp without time zone, p_org_id character varying) RETURNS numeric AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Base_Convert.sql,v 1.6 2003/03/18 07:08:06 jjanke Exp $ *** * Title: Convert Amount to Base Currency of Client * Description: * Get CurrencyTo from Client * Returns NULL, if conversion not found * Standard Rounding * Test: * SELECT C_Base_Convert(100,116,11,null) FROM DUAL => 64.72 ************************************************************************/ v_CurTo_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Get Currency SELECT c.C_Currency_ID INTO v_CurTo_ID FROM AD_Client c WHERE c.AD_Client_ID=p_Client_ID; -- Same as Currency_Conversion - if currency/rate not found - return 0 IF(v_CurTo_ID IS NULL) THEN RETURN NULL; END IF; -- Same currency IF(p_CurFrom_ID=v_CurTo_ID) THEN RETURN p_Amount; END IF; RETURN C_Currency_Round( C_Currency_Convert(p_Amount, p_CurFrom_ID, v_CurTo_ID, p_ConvDate, null, p_Client_ID, p_Org_ID), v_CurTo_ID, null) ; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_base_convert(p_amount numeric, p_curfrom_id character varying, p_client_id character varying, p_convdate timestamp without time zone, p_org_id character varying); publictadfalse23416125536567Zc_base_convert(numeric, character varying, character varying, timestamp without time zone)FUNCTIONCREATE FUNCTION c_base_convert(p_amount numeric, p_curfrom_id character varying, p_client_id character varying, p_convdate timestamp without time zone) RETURNS numeric AS $_$ DECLARE BEGIN RETURN C_BASE_CONVERT ($1, $2, $3, $4, '0'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_base_convert(p_amount numeric, p_curfrom_id character varying, p_client_id character varying, p_convdate timestamp without time zone); publictadfalse23416&125595381c_bp_bankaccountiban_trg()FUNCTIONCREATE FUNCTION c_bp_bankaccountiban_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: A_ASSET_Trg.sql,v 1.4 2002/10/23 03:16:57 jjanke Exp $ *** * Title: Asset new necord * Description: * - create default Account records ************************************************************************/ v_IBAN_check NUMERIC; v_Bank VARCHAR(4); --OBTG:NVARCHAR2-- v_Branch VARCHAR(4); --OBTG:NVARCHAR2-- v_DigitBank VARCHAR(1); --OBTG:NVARCHAR2-- v_CountryId VARCHAR(2); --OBTG:NVARCHAR2-- v_Length NUMERIC; v_CodeAccountLength NUMERIC; v_I_AccountNumberOrig VARCHAR(60); --OBTG:NVARCHAR2-- v_I_AccountNumberFinal VARCHAR(600):=''; --OBTG:NVARCHAR2-- v_i_char VARCHAR(2); --OBTG:NVARCHAR2-- v_i_char_ascii NUMERIC; v_i NUMERIC:=1; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Default Accounts for all AcctSchema IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN IF (NEW.IBAN IS NOT NULL) THEN v_I_AccountNumberOrig:=SUBSTR(NEW.IBAN, 5, LENGTH(NEW.IBAN)-4); v_CodeAccountLength:=LENGTH(v_I_AccountNumberOrig); WHILE (v_i<=v_CodeAccountLength) LOOP v_i_char:=SUBSTR(v_I_AccountNumberOrig, v_i, 1); v_i_char_ascii:=ASCII(v_i_char); --It is not a number, transforming to number IF ((v_i_char_ascii<48) OR (v_i_char_ascii>57)) THEN v_i_char:=TO_CHAR(v_i_char_ascii-55); END IF; v_I_AccountNumberFinal:=v_I_AccountNumberFinal||v_i_char; v_i:=v_i+1; END LOOP; SELECT MOD(TO_NUMBER(v_I_AccountNumberFinal|| TRIM(TO_CHAR(ASCII(SUBSTR(UPPER(NEW.IBAN),1,1))-55)) ||TRIM(TO_CHAR(ASCII(SUBSTR(UPPER(NEW.IBAN),2,1))-55))|| SUBSTR(NEW.IBAN,3,2) , '999999999999999999999999999999999999999999999999999999999999' ) ,97) AS DC INTO v_IBAN_check FROM DUAL; IF (v_IBAN_check <> 1) THEN RAISE EXCEPTION '%', 'Incorrect IBAN Code.'; --OBTG:-20257-- END IF; SELECT IBANCOUNTRY, IBANNODIGITS INTO v_CountryId, v_Length FROM C_COUNTRY WHERE C_COUNTRY_ID=NEW.C_COUNTRY_ID; IF ((v_CountryId IS NULL OR v_Length IS NULL) OR (v_CountryId <> SUBSTR(UPPER(NEW.IBAN),1,2) OR v_Length <> LENGTH(NEW.IBAN))) THEN RAISE EXCEPTION '%', 'The IBAN number defined in the bank account tab, must fit the IBAN data of the country defined in the bank tab.'; --OBTG:-20259-- END IF; END IF; IF (NEW.SHOWIBAN='Y') THEN NEW.DISPLAYEDACCOUNT:=SUBSTR(NEW.IBAN,1,4) || '-' || SUBSTR(NEW.IBAN, 5, LENGTH(NEW.IBAN)-4); ELSE NEW.DISPLAYEDACCOUNT:=NEW.ACCOUNTNO; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'Incorrect IBAN Code.' ; --OBTG:-20257-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 1DROP FUNCTION public.c_bp_bankaccountiban_trg(); publictadfalse23416125536570Mc_bp_group_acct_copy(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_bp_group_acct_copy(p_pinstance_id character varying, p_bp_group_id character varying, p_c_acctschema_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BP_Group_Acct_Copy.sql,v 1.4 2002/09/27 04:54:37 jjanke Exp $ *** * Title: Copy Acct Info * Description: * Copy Accounting Info to all Business Partner Account Info elements * (existing entries are overwritten) ************************************************************************/ -- Logistics v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_IsProcessing CHAR(1) ; v_IsProcessed VARCHAR(60) ; v_myResult NUMERIC:=1; -- Success -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- v_C_BP_Group_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_AcctSchema_ID VARCHAR(32); --OBTG:VARCHAR2-- -- A Group can only have one client Cur_Acct RECORD; Cur_BPartner RECORD; Cur_BP RECORD; -- v_Deleted NUMERIC:=0; v_Created NUMERIC:=0; rowcount NUMERIC; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='C_BP_Group_ID') THEN v_C_BP_Group_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BP_Group_ID=' || v_C_BP_Group_ID ; ELSIF(Cur_Parameter.ParameterName='C_AcctSchema_ID') THEN v_C_AcctSchema_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_AcctSchema_ID=' || v_C_AcctSchema_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Direct Call IF(p_BP_Group_ID IS NOT NULL) THEN v_C_BP_Group_ID:=p_BP_Group_ID; RAISE NOTICE '%',' C_BP_Group_ID=' || v_C_BP_Group_ID ; ELSIF(p_C_AcctSchema_ID IS NOT NULL) THEN v_C_AcctSchema_ID:=p_C_AcctSchema_ID; RAISE NOTICE '%',' C_AcctSchema_ID=' || v_C_AcctSchema_ID ; END IF; DELETE FROM C_BP_Customer_Acct WHERE EXISTS (SELECT 1 FROM C_BPartner P WHERE P.C_BPartner_ID = C_BP_Customer_Acct.C_BPartner_ID AND P.C_BP_Group_ID = v_C_BP_Group_ID) AND (C_BP_Customer_Acct.C_AcctSchema_ID = v_C_AcctSchema_ID OR v_C_AcctSchema_ID IS NULL); GET DIAGNOSTICS rowcount:=ROW_COUNT; v_Deleted := rowcount; DELETE FROM C_BP_Vendor_Acct WHERE EXISTS (SELECT 1 FROM C_BPartner P WHERE P.C_BPartner_ID = C_BP_Vendor_Acct.C_BPartner_ID AND P.C_BP_Group_ID = v_C_BP_Group_ID) AND (C_BP_Vendor_Acct.C_AcctSchema_ID = v_C_AcctSchema_ID OR v_C_AcctSchema_ID IS NULL); GET DIAGNOSTICS rowcount:=ROW_COUNT; v_Deleted := v_Deleted + rowcount; FOR Cur_BP IN (SELECT P.C_BPartner_ID, P.AD_Client_ID, A.C_AcctSchema_ID, P.AD_Org_ID, C_Receivable_Acct, C_PrePayment_Acct, A.Status FROM C_BPARTNER P, C_BP_GROUP_ACCT A WHERE A.C_BP_GROUP_ID = P.C_BP_GROUP_ID AND P.C_BP_Group_ID = v_C_BP_Group_ID AND (A.C_AcctSchema_ID = v_C_AcctSchema_ID OR v_C_AcctSchema_ID IS NULL) AND EXISTS (SELECT 1 FROM AD_Org_AcctSchema oa WHERE a.C_AcctSchema_ID = oa.C_AcctSchema_ID AND (AD_IsOrgIncluded(oa.AD_Org_ID, P.AD_Org_ID, P.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(P.AD_Org_ID, oa.AD_Org_ID, P.AD_Client_ID)<>-1)) ) LOOP INSERT INTO C_BP_Customer_Acct (C_BP_Customer_Acct_ID, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Receivable_Acct, C_PrePayment_Acct, Status) VALUES (get_uuid(), Cur_BP.C_BPartner_ID, Cur_BP.C_AcctSchema_ID, Cur_BP.AD_Client_ID, Cur_BP.AD_Org_ID,'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_BP.C_Receivable_Acct, Cur_BP.C_PrePayment_Acct, Cur_BP.Status); GET DIAGNOSTICS rowcount:=ROW_COUNT; v_Created := rowcount; END LOOP; FOR Cur_BP IN (SELECT P.C_BPartner_ID, P.AD_Client_ID, A.C_AcctSchema_ID, P.AD_Org_ID, V_Liability_Acct, V_Liability_Services_Acct, V_PrePayment_Acct, Status FROM C_BPARTNER P, C_BP_GROUP_ACCT A WHERE A.C_BP_GROUP_ID = P.C_BP_GROUP_ID AND P.C_BP_Group_ID = v_C_BP_Group_ID AND (A.C_AcctSchema_ID = v_C_AcctSchema_ID OR v_C_AcctSchema_ID IS NULL) AND EXISTS (SELECT 1 FROM AD_Org_AcctSchema oa WHERE a.C_AcctSchema_ID = oa.C_AcctSchema_ID AND (AD_IsOrgIncluded(oa.AD_Org_ID, P.AD_Org_ID, P.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(P.AD_Org_ID, oa.AD_Org_ID, P.AD_Client_ID)<>-1)) ) LOOP INSERT INTO C_BP_Vendor_Acct (C_BP_Vendor_Acct_ID, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, V_Liability_Acct, V_Liability_Services_Acct, V_PrePayment_Acct, Status) VALUES (get_uuid(), Cur_BP.C_BPartner_ID, Cur_BP.C_AcctSchema_ID, Cur_BP.AD_Client_ID, Cur_BP.AD_Org_ID,'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_BP.V_Liability_Acct, Cur_BP.V_Liability_Services_Acct, Cur_BP.V_PrePayment_Acct, Cur_BP.Status); GET DIAGNOSTICS rowcount:=ROW_COUNT; v_Created := v_Created + rowcount; END LOOP; v_Message:='@Deleted@=' || v_Deleted || ', @Updated@=' || v_Created; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_myResult, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_bp_group_acct_copy(p_pinstance_id character varying, p_bp_group_id character varying, p_c_acctschema_id character varying); publictadfalse23416125536572:c_bp_group_acct_copy(character varying, character varying)FUNCTIONCREATE FUNCTION c_bp_group_acct_copy(p_pinstance_id character varying, p_bp_group_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_BP_GROUP_ACCT_COPY($1, $2, NULL); END ; $_$ LANGUAGE plpgsql; nDROP FUNCTION public.c_bp_group_acct_copy(p_pinstance_id character varying, p_bp_group_id character varying); publictadfalse23416125536573'c_bp_group_acct_copy(character varying)FUNCTIONCREATE FUNCTION c_bp_group_acct_copy(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_BP_GROUP_ACCT_COPY($1, NULL); END ; $_$ LANGUAGE plpgsql; MDROP FUNCTION public.c_bp_group_acct_copy(p_pinstance_id character varying); publictadfalse23416'125595384c_bp_group_trg()FUNCTIONCREATE FUNCTION c_bp_group_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BP_Group_Trg.sql,v 1.2 2001/11/26 05:25:19 jjanke Exp $ *** * Title: New Accounting Defaults * Description: ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; v_acc_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT') THEN FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE (AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(new.AD_ORG_ID, AD_Org_ID, new.AD_Client_ID)<>-1) AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID AND AD_Org_AcctSchema.AD_Client_ID = new.AD_Client_ID ) ) LOOP SELECT * INTO v_acc_id FROM Ad_Sequence_Next('C_BP_Group_Acct', Cur_Defaults.AD_Org_Id) ; INSERT INTO C_BP_Group_Acct ( C_BP_Group_Acct_ID, C_BP_Group_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Receivable_Acct, C_PrePayment_Acct, V_Liability_Acct, V_Liability_Services_Acct, V_PrePayment_Acct, PayDiscount_Exp_Acct, PayDiscount_Rev_Acct, WriteOff_Acct, UnRealizedGain_Acct, UnRealizedLoss_Acct, RealizedGain_Acct, RealizedLoss_Acct, NotInvoicedReceipts_Acct, UnEarnedRevenue_Acct, NotInvoicedRevenue_Acct, NotInvoicedReceivables_Acct ) VALUES ( v_acc_id, new.C_BP_Group_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.C_Receivable_Acct, Cur_Defaults.C_PrePayment_Acct, Cur_Defaults.V_Liability_Acct, Cur_Defaults.V_Liability_Services_Acct, Cur_Defaults.V_PrePayment_Acct, Cur_Defaults.PayDiscount_Exp_Acct, Cur_Defaults.PayDiscount_Rev_Acct, Cur_Defaults.WriteOff_Acct, Cur_Defaults.UnRealizedGain_Acct, Cur_Defaults.UnRealizedLoss_Acct, Cur_Defaults.RealizedGain_Acct, Cur_Defaults.RealizedLoss_Acct, Cur_Defaults.NotInvoicedReceipts_Acct, Cur_Defaults.UnEarnedRevenue_Acct, Cur_Defaults.NotInvoicedRevenue_Acct, Cur_Defaults.NotInvoicedReceivables_Acct ) ; END LOOP; ELSIF (TG_OP = 'UPDATE') THEN UPDATE C_BP_GROUP_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE C_BP_GROUP_ID = new.C_BP_GROUP_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_bp_group_trg(); publictadfalse23416q125595386c_bp_salcategory_trg()FUNCTIONRCREATE FUNCTION c_bp_salcategory_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_isCostApplied CHAR(1); v_count NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN SELECT ISCOSTAPPLIED INTO v_isCostApplied FROM C_SALARY_CATEGORY WHERE C_SALARY_CATEGORY_ID=NEW.C_SALARY_CATEGORY_ID; IF (v_isCostApplied='Y') THEN SELECT COUNT(*) INTO v_count FROM C_SALARY_CATEGORY_COST WHERE C_SALARY_CATEGORY_ID=NEW.C_SALARY_CATEGORY_ID; IF (v_count=0) THEN RAISE EXCEPTION '%','@Salary Category without cost@'; --OBTG:-20519-- ELSE SELECT COUNT(*) INTO v_count FROM C_SALARY_CATEGORY_COST WHERE C_SALARY_CATEGORY_ID=NEW.C_SALARY_CATEGORY_ID AND DATEFROM<=NEW.DATEFROM; IF (v_count=0) THEN RAISE EXCEPTION '%','@Cost not available for Dates@'; --OBTG:-20518-- END IF; END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.c_bp_salcategory_trg(); publictadfalse23416125595388c_bp_salcategory_trg2()FUNCTIONT CREATE FUNCTION c_bp_salcategory_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_count NUMERIC; v_dateFrom TIMESTAMP; v_cBPSalCategory VARCHAR(32); --OBTG:varchar2-- --TYPE RECORD IS REFCURSOR; Cur_Employees RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT' OR TG_OP = 'DELETE') THEN FOR Cur_Employees IN (SELECT C_BPARTNER_ID FROM C_BPARTNER WHERE ISEMPLOYEE = 'Y') LOOP SELECT MAX(DATEFROM) INTO v_dateFrom FROM C_BP_SALCATEGORY WHERE C_BP_SALCATEGORY.C_BPARTNER_ID = Cur_Employees.C_BPARTNER_ID; v_cBPSalCategory := null; SELECT COUNT(*) INTO v_count FROM C_BP_SALCATEGORY WHERE C_BP_SALCATEGORY.C_BPARTNER_ID = Cur_Employees.C_BPARTNER_ID AND DATEFROM = v_dateFrom; IF (v_count<>0) THEN SELECT C_SALARY_CATEGORY_ID INTO v_cBPSalCategory FROM C_BP_SALCATEGORY WHERE C_BP_SALCATEGORY.C_BPARTNER_ID = Cur_Employees.C_BPARTNER_ID AND DATEFROM = v_dateFrom; END IF; UPDATE C_BPARTNER SET C_SALARY_CATEGORY_ID = v_cBPSalCategory WHERE C_BPARTNER.C_BPARTNER_ID = Cur_Employees.C_BPARTNER_ID; END LOOP; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.c_bp_salcategory_trg2(); publictadfalse23416125536577,c_bp_socreditused_refresh(character varying)FUNCTIONCREATE FUNCTION c_bp_socreditused_refresh(p_bpartner_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN UPDATE C_BPARTNER SET SO_CreditUsed= (SELECT COALESCE(SUM(C_Base_Convert((Amount - WriteOffAmt), C_Currency_ID, AD_Client_ID, DocDate, AD_Org_ID)), 0) AS TOTAL FROM C_DEBT_PAYMENT_V WHERE C_BPartner_ID=p_BPartner_ID AND C_DEBT_PAYMENT_STATUS(C_SETTLEMENT_CANCEL_ID, Cancel_Processed, Generate_Processed, IsPaid, IsValid, C_CashLine_ID, C_BankStatementLine_ID)='P' ) WHERE C_BPartner_ID=p_BPartner_ID; END ; $$ LANGUAGE plpgsql; QDROP FUNCTION public.c_bp_socreditused_refresh(p_bpartner_id character varying); publictadfalse23416$125595376c_bpartner_location_trg()FUNCTION1 CREATE FUNCTION c_bpartner_location_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BPartner_Location_Trg.sql,v 1.3 2002/10/01 02:23:31 jjanke Exp $ *** * Title: Update Name with (updated) Location details * Description: * Set Name to City * or if not exists to Address1 * or if not exists to "-' ************************************************************************/ --v_City VARCHAR2(60); --v_Address1 VARCHAR2(60); --v_Address2 VARCHAR2(60); v_name VARCHAR(60) ; --OBTG:VARCHAR2-- v_DateNull TIMESTAMP := TO_DATE('01-01-1900', 'DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF NOT(COALESCE(old.C_Location_ID, '0') <> COALESCE(NEW.C_Location_ID, '0') OR COALESCE(old.Updated, v_DateNull) <> COALESCE(NEW.Updated, v_DateNull)) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; /* -- Get Address Info SELECT City, Address1, Address2 INTO v_City, v_Address1, v_Address2 FROM C_Location WHERE C_Location_ID=new.C_Location_ID; -- No City IF (v_City IS NULL) THEN v_City:=v_Address1; END IF; -- No City nor Address 1 IF (v_City IS NULL) THEN v_City:='-'; RAISE NOTICE '%','No Address Info ID=' || new.C_BPartner_Location_ID; END IF; */ -- Set Name IF TG_OP = 'DELETE' THEN v_name:=old.Name; ELSE v_name:=new.Name; END IF; IF(SUBSTR(v_name, 1, 1)='.') THEN new.Name:='.'||C_Location_Name(new.C_Location_ID) ; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%','Not unique - ' || SQLERRM ; new.Name:=C_Location_Name(new.C_Location_ID) ||'('||new.C_Location_ID||')'; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 0DROP FUNCTION public.c_bpartner_location_trg(); publictadfalse23416%125595378c_bpartner_trg()FUNCTIONl3CREATE FUNCTION c_bpartner_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_BPartner_Trg.sql,v 1.4 2002/10/23 03:16:57 jjanke Exp $ *** * Title: Business Partner new necord * Description: * - create default Account records * - add treenode ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; Cur_Defaults2 RECORD; v_xTree_ID VARCHAR(32); --OBTG:varchar2-- v_xParent_ID VARCHAR(32); --OBTG:varchar2-- v_BP_Acct_ID VARCHAR(32); --OBTG:varchar2-- v_C_Receivable_Acct VARCHAR(32); --OBTG:varchar2-- v_C_Prepayment_Acct VARCHAR(32); --OBTG:varchar2-- v_V_Liability_Acct VARCHAR(32); --OBTG:varchar2-- v_V_Liability_Services_Acct VARCHAR(32); --OBTG:varchar2-- v_V_Prepayment_Acct VARCHAR(32); --OBTG:varchar2-- v_E_Expense_Acct VARCHAR(32); --OBTG:varchar2-- v_E_Prepayment_Acct VARCHAR(32); --OBTG:varchar2-- v_seq_name VARCHAR(32); --OBTG:varchar2-- v_Sequence_No VARCHAR(32); --OBTG:varchar2-- v_C_AcctSchema_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Default Accounts for all AcctSchema IF (TG_OP = 'INSERT') THEN v_C_AcctSchema_ID:=null; FOR Cur_Defaults IN ( SELECT distinct AD_IsOrgIncluded(new.AD_Org_ID, a.AD_Org_ID, new.AD_Client_ID), a.ad_sequence_bp_id, a.isbpnewaccount, a.acct_length, a.subacct_length, a.createdby, a.updatedby, a.C_AcctSchema_ID, d1.ad_client_id, d1.C_Receivable_Acct, d1.C_Prepayment_Acct, d1.V_Liability_Acct, d1.V_Liability_Services_Acct, d1.V_Prepayment_Acct, d1.status FROM C_BP_Group_Acct d1, ad_Org_AcctSchema a WHERE d1.C_BP_Group_ID=new.C_BP_Group_ID AND d1.C_AcctSchema_ID = a.C_AcctSchema_ID AND (AD_IsOrgIncluded(a.AD_Org_ID, new.AD_Org_ID, new.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(new.AD_Org_ID, a.AD_Org_ID, new.AD_Client_ID)<>-1) ORDER BY 1 DESC ) LOOP /* Creating new sub account */ -- Customer IF (v_C_AcctSchema_ID is null or v_C_AcctSchema_ID <> Cur_Defaults.C_AcctSchema_ID) THEN SELECT * INTO v_BP_Acct_ID FROM Ad_Sequence_Next('C_BP_Customer_Acct', Cur_Defaults.C_AcctSchema_ID); IF (Cur_Defaults.IsBPNewAccount='Y') THEN /* Retrieving the sequence NUMERIC for sub account. */ SELECT NAME INTO v_seq_name FROM AD_SEQUENCE WHERE AD_SEQUENCE.AD_SEQUENCE_ID=Cur_Defaults.Ad_Sequence_BP_Id; /* Retrieving the receivable account NUMERIC */ SELECT * INTO v_Sequence_No FROM AD_Sequence_Doc(v_seq_name, Cur_Defaults.AD_Client_ID, 'Y'); SELECT * INTO v_C_Receivable_Acct FROM c_validcombination_clone(Cur_Defaults.C_Receivable_Acct, v_Sequence_No, new.Name, Cur_Defaults.acct_length, Cur_Defaults.subacct_length); /* Retrieving the prepayment account NUMERIC */ SELECT * INTO v_C_Prepayment_Acct FROM c_validcombination_clone(Cur_Defaults.C_Prepayment_Acct, v_Sequence_No, new.Name, Cur_Defaults.acct_length, Cur_Defaults.subacct_length); /* Inserting the new account NUMERIC */ INSERT INTO C_BP_Customer_Acct (C_BP_Customer_Acct_ID,C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Receivable_Acct, C_Prepayment_Acct, Status) VALUES (v_BP_Acct_ID,new.C_BPartner_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, v_C_Receivable_Acct, v_C_Prepayment_Acct, Cur_Defaults.Status); ELSE /* Creating default account */ INSERT INTO C_BP_Customer_Acct (C_BP_Customer_Acct_ID,C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Receivable_Acct, C_Prepayment_Acct, Status) VALUES (v_BP_Acct_ID,new.C_BPartner_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.C_Receivable_Acct, Cur_Defaults.C_Prepayment_Acct, Cur_Defaults.Status); END IF; -- Vendor /* Creating new sub account */ SELECT * INTO v_BP_Acct_ID FROM Ad_Sequence_Next('C_BP_Vendor_Acct', Cur_Defaults.C_AcctSchema_ID); IF (Cur_Defaults.IsBPNewAccount='Y') THEN /* Retrieving the liability account NUMERIC */ SELECT * INTO v_V_Liability_Acct FROM c_validcombination_clone(Cur_Defaults.V_Liability_Acct, v_Sequence_No, new.Name, Cur_Defaults.acct_length, Cur_Defaults.subacct_length); /* Retrieving the liability services account NUMERIC */ SELECT * INTO v_V_Liability_Services_Acct FROM c_validcombination_clone(Cur_Defaults.V_Liability_Services_Acct, v_Sequence_No, new.Name, Cur_Defaults.acct_length, Cur_Defaults.subacct_length); /* Retrieving the prepayment account NUMERIC */ SELECT * INTO v_V_Prepayment_Acct FROM c_validcombination_clone(Cur_Defaults.V_Prepayment_Acct, v_Sequence_No, new.Name, Cur_Defaults.acct_length, Cur_Defaults.subacct_length); /* Inserting the new account NUMERIC */ INSERT INTO C_BP_Vendor_Acct (C_BP_Vendor_Acct_ID, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, V_Liability_Acct, V_Liability_Services_Acct, V_Prepayment_Acct, Status) VALUES (v_BP_Acct_ID,new.C_BPartner_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, v_V_Liability_Acct, v_V_Liability_Services_Acct, v_V_Prepayment_Acct, Cur_Defaults.Status); ELSE /* Creating default account */ INSERT INTO C_BP_Vendor_Acct (C_BP_Vendor_Acct_ID, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, V_Liability_Acct, V_Liability_Services_Acct, V_Prepayment_Acct, Status) VALUES (v_BP_Acct_ID,new.C_BPartner_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.V_Liability_Acct, Cur_Defaults.V_Liability_Services_Acct, Cur_Defaults.V_Prepayment_Acct, Cur_Defaults.Status); END IF; END IF; END LOOP; -- Employee v_C_AcctSchema_ID:=null; FOR Cur_Defaults2 IN ( SELECT AD_IsOrgIncluded(new.AD_Org_ID, oa.AD_Org_ID, new.AD_Org_ID), oa.ad_sequence_bp_id, oa.isbpnewaccount, oa.acct_length, oa.subacct_length, oa.createdby, oa.updatedby, d2.E_Expense_Acct, d2.E_Prepayment_Acct, d2.AD_Client_ID, d2.C_AcctSchema_ID FROM C_AcctSchema_Default d2, AD_Org_AcctSchema oa WHERE d2.C_AcctSchema_ID = oa.C_AcctSchema_ID AND oA.AD_Client_ID = d2.AD_Client_ID AND (AD_IsOrgIncluded(oa.AD_Org_ID, new.AD_Org_ID, new.AD_Org_ID)<>-1 OR AD_IsOrgIncluded(new.AD_Org_ID, oa.AD_Org_ID, new.AD_Org_ID)<>-1) ORDER BY 1 DESC ) LOOP /* Employee */ /* Creating new sub account */ IF (v_C_AcctSchema_ID is null or v_C_AcctSchema_ID <> Cur_Defaults2.C_AcctSchema_ID) THEN IF (Cur_Defaults2.IsBPNewAccount='Y') THEN /* Retrieving the Expense account NUMERIC */ SELECT * INTO v_E_Expense_Acct FROM c_validcombination_clone(Cur_Defaults2.E_Expense_Acct, v_Sequence_No, new.Name, Cur_Defaults2.acct_length, Cur_Defaults2.subacct_length); /* Retrieving the Prepayment account NUMERIC */ SELECT * INTO v_E_Prepayment_Acct FROM c_validcombination_clone(Cur_Defaults2.E_Prepayment_Acct, v_Sequence_No, new.Name, Cur_Defaults2.acct_length, Cur_Defaults2.subacct_length); /* Inserting the new account NUMERIC */ INSERT INTO C_BP_Employee_Acct (C_BP_Employee_Acct_ID, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, E_Expense_Acct, E_Prepayment_Acct) VALUES (get_uuid(), new.C_BPartner_ID, Cur_Defaults2.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, v_E_Expense_Acct, v_E_Prepayment_Acct); ELSE INSERT INTO C_BP_Employee_Acct (C_BP_Employee_Acct_ID, C_BPartner_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, E_Expense_Acct, E_Prepayment_Acct) VALUES (get_uuid(), new.C_BPartner_ID, Cur_Defaults2.C_AcctSchema_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults2.E_Expense_Acct, Cur_Defaults2.E_Prepayment_Acct); END IF; v_C_AcctSchema_ID:=Cur_Defaults2.C_AcctSchema_ID; END IF; END LOOP; /* Create TreeNode -- get AD_Tree_ID + ParentID */ SELECT c.AD_Tree_BPartner_ID, n.Node_ID INTO v_xTree_ID, v_xParent_ID FROM AD_ClientInfo c, AD_TreeNodeBP n WHERE c.AD_Tree_BPartner_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=new.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||' Node='||:new.AD_Menu_ID||' Parent='||v_xParent_ID); /* Insert into TreeNode */ INSERT INTO AD_TreeNodeBP (AD_TreeNodeBP_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo) VALUES (get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, v_xTree_ID, new.C_BPartner_ID, v_xParent_ID, (CASE new.IsSummary WHEN 'Y' THEN 100 ELSE 999 END)); -- Summary Nodes first ELSIF (TG_OP = 'UPDATE') THEN UPDATE C_BP_CUSTOMER_ACCT SET AD_ORG_ID = new.AD_Org_ID WHERE C_BPARTNER_ID = new.C_BPartner_ID; UPDATE C_BP_VENDOR_ACCT SET AD_ORG_ID = new.AD_Org_ID WHERE C_BPARTNER_ID = new.C_BPartner_ID; UPDATE C_BP_EMPLOYEE_ACCT SET AD_ORG_ID = new.AD_Org_ID WHERE C_BPARTNER_ID = new.C_BPartner_ID; ELSIF (TG_OP = 'DELETE') THEN DELETE FROM AD_TreeNodeBP WHERE AD_Client_ID = old.AD_Client_ID AND Node_ID = old.C_BPartner_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'C_BPartner InsertTrigger Error: No ClientInfo or parent TreeNode'; --OBTG:-20004-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_bpartner_trg(); publictadfalse23416)125595392c_bstmt_chk_restrictions_trg()FUNCTION CREATE FUNCTION c_bstmt_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC; v_DateNull TIMESTAMP := TO_DATE('01-01-1900', 'DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF (old.Processed='Y' AND ((COALESCE(old.STATEMENTDATE, v_DateNull) <> COALESCE(new.STATEMENTDATE, v_DateNull)) OR(COALESCE(old.C_BANKACCOUNT_ID, '0') <> COALESCE(new.C_BANKACCOUNT_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG: -20501-- END IF; begin SELECT COUNT(*) INTO v_Count FROM C_BankAccount b1, C_BankAccount b2 WHERE b1.C_BankAccount_ID = old.C_BankAccount_ID AND b2.C_BankAccount_ID = new.C_BankAccount_ID AND b2.C_Currency_ID != b1.C_Currency_ID AND EXISTS (SELECT 1 FROM C_BankStatementLine WHERE C_BankStatement_ID = new.C_BankStatement_ID); exception when others then v_Count:=0; end; IF v_Count > 0 THEN RAISE EXCEPTION '%', 'Cannot change between bank account with different currency'; --OBTG:-20503-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(old.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 5DROP FUNCTION public.c_bstmt_chk_restrictions_trg(); publictadfalse23416(125595390c_bstmtline_chk_restrict_trg()FUNCTION= CREATE FUNCTION c_bstmtline_chk_restrict_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_Posted VARCHAR(60) ; v_C_BANKSTATEMENT_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_DateNull TIMESTAMP := TO_DATE('01-01-1900', 'DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_BANKSTATEMENT_ID:=NEW.C_BANKSTATEMENT_ID; ELSE v_C_BANKSTATEMENT_ID:=OLD.C_BANKSTATEMENT_ID; END IF; SELECT PROCESSED, POSTED INTO v_Processed, v_Posted FROM C_BANKSTATEMENT WHERE C_BANKSTATEMENT_ID=v_C_BANKSTATEMENT_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND ((COALESCE(OLD.LINE, 0) <> COALESCE(NEW.LINE, 0)) OR(COALESCE(OLD.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0')) OR(COALESCE(OLD.CHARGEAMT, 0) <> COALESCE(NEW.CHARGEAMT, 0)) OR(COALESCE(OLD.STMTAMT, 0) <> COALESCE(NEW.STMTAMT, 0)) OR(COALESCE(OLD.TRXAMT, 0) <> COALESCE(NEW.TRXAMT, 0)) OR(COALESCE(OLD.C_DEBT_PAYMENT_ID, '0') <> COALESCE(NEW.C_DEBT_PAYMENT_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) )) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(v_Posted='Y' AND ((COALESCE(OLD.DATEACCT, v_DateNull) <> COALESCE(NEW.DATEACCT, v_DateNull)))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 5DROP FUNCTION public.c_bstmtline_chk_restrict_trg(); publictadfalse23416125536583 c_budget_copy(character varying)FUNCTIONjCREATE FUNCTION c_budget_copy(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- Success v_BudgetFrom_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Record Info v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_BudgetLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Period_ID VARCHAR(32); --OBTG:VARCHAR2-- Cur_BudgetLine RECORD; BEGIN v_Result:=1; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.AD_Org_ID, p.AD_Client_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User_ID:=Cur_Parameter.AD_User_ID; v_Org_ID:=Cur_Parameter.AD_Org_ID; v_Client_ID:=Cur_Parameter.AD_Client_ID; IF(Cur_Parameter.ParameterName='C_Budget_ID') THEN v_BudgetFrom_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' BudgetFrom_ID=' || v_BudgetFrom_ID ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' v_Record_ID=' || v_Record_ID ; FOR Cur_BudgetLine IN (SELECT * FROM C_BudgetLine WHERE C_Budget_ID=v_BudgetFrom_ID) LOOP SELECT p1.C_Period_ID INTO v_Period_ID FROM C_Period p1, C_Period p2, C_Budget b WHERE p1.C_Year_ID=b.C_Year_ID AND b.C_Budget_ID=v_Record_ID AND p1.PeriodNo=p2.PeriodNo AND p2.C_Period_ID=Cur_BudgetLine.C_Period_ID; v_ResultStr:='InsertBudgetLines'; SELECT * INTO v_BudgetLine_ID FROM Ad_Sequence_Next('C_BudgetLine', v_Client_ID) ; INSERT INTO C_BudgetLine ( C_Budgetline_ID, AD_Client_ID, AD_Org_ID, Isactive, Created, Createdby, Updated, Updatedby, C_ElementValue_ID, C_Period_ID, C_Currency_ID, C_Uom_ID, Qty, M_Product_ID, C_Bpartner_ID, AD_Orgtrx_ID, C_Salesregion_ID, C_Project_ID, C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID, Description, Seqno, C_Bp_Group_ID, M_Product_Category_ID, C_Budget_ID, Amount, Price ) VALUES ( v_BudgetLine_ID, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_User_ID, TO_DATE(NOW()), v_User_ID, Cur_BudgetLine.C_ElementValue_ID, v_Period_ID, Cur_BudgetLine.C_Currency_ID, Cur_BudgetLine.C_Uom_ID, Cur_BudgetLine.Qty, Cur_BudgetLine.M_Product_ID, Cur_BudgetLine.C_Bpartner_ID, Cur_BudgetLine.AD_Orgtrx_ID, Cur_BudgetLine.C_Salesregion_ID, Cur_BudgetLine.C_Project_ID, Cur_BudgetLine.C_Campaign_ID, Cur_BudgetLine.C_Activity_ID, Cur_BudgetLine.User1_ID, Cur_BudgetLine.User2_ID, Cur_BudgetLine.Description, Cur_BudgetLine.Seqno, Cur_BudgetLine.C_Bp_Group_ID, Cur_BudgetLine.M_Product_Category_ID, v_Record_ID, Cur_BudgetLine.Amount, Cur_BudgetLine.Price ) ; END LOOP; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_User_ID, 'N', v_Result, v_Message) ; RETURN; EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; FDROP FUNCTION public.c_budget_copy(p_pinstance_id character varying); publictadfalse23416*125595394c_budgetline_trg()FUNCTIONCREATE FUNCTION c_budgetline_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: A_ASSET_Trg.sql,v 1.4 2002/10/23 03:16:57 jjanke Exp $ *** * Title: Asset new necord * Description: * - create default Account records ************************************************************************/ v_Type VARCHAR(60); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT BUDGET_TYPE INTO v_Type FROM C_BUDGET WHERE C_BUDGET_ID=NEW.C_BUDGET_ID; IF (v_Type ='F' AND (NEW.C_ACCTSCHEMA_ID IS NULL OR NEW.C_ELEMENTVALUE_ID IS NULL)) THEN RAISE EXCEPTION '%', 'Accounting information missing.'; --OBTG:-20270-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'Accounting information missing.' ; --OBTG:-20270-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; )DROP FUNCTION public.c_budgetline_trg(); publictadfalse23416125536586Ec_calculate_catsalary(character varying, timestamp without time zone)FUNCTIONQCREATE FUNCTION c_calculate_catsalary(pcbpartner character varying, pdate timestamp without time zone) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ vResult VARCHAR(32); BEGIN SELECT c_salary_category_id INTO vResult FROM c_bp_salcategory, (SELECT MAX(datefrom) AS datefrom from c_bp_salcategory where c_bpartner_id= pCBPartner and datefrom<=pDate order by datefrom desc ) AAA WHERE c_bp_salcategory.c_bpartner_id= pCBPartner AND c_bp_salcategory.datefrom = aaa.datefrom; RETURN vResult; END ; $$ LANGUAGE plpgsql; mDROP FUNCTION public.c_calculate_catsalary(pcbpartner character varying, pdate timestamp without time zone); publictadfalse23416125536587Ic_calculatecost_catsalary(character varying, timestamp without time zone)FUNCTIONSCREATE FUNCTION c_calculatecost_catsalary(pcatsal character varying, pdate timestamp without time zone) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ vResult NUMERIC; BEGIN SELECT COST into vResult FROM c_salary_category_cost, (SELECT MAX(datefrom) AS datefrom from c_salary_category_cost where c_salary_category_id= pCatSal and datefrom<=pDate order by datefrom desc ) AAA WHERE c_salary_category_cost.c_salary_category_id = pCatSal AND c_salary_category_cost.datefrom = aaa.datefrom; RETURN vResult; END ; $$ LANGUAGE plpgsql; nDROP FUNCTION public.c_calculatecost_catsalary(pcatsal character varying, pdate timestamp without time zone); publictadfalse23416125595403c_cash_chk_restrictions_trg()FUNCTION CREATE FUNCTION c_cash_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('01-01-1900','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF(old.Processed='Y' AND ((COALESCE(old.STATEMENTDATE, v_DateNull) <> COALESCE(new.STATEMENTDATE, v_DateNull)) OR(COALESCE(old.AD_ORGTRX_ID, '0') <> COALESCE(new.AD_ORGTRX_ID, '0')) OR(COALESCE(old.USER1_ID, '0') <> COALESCE(new.USER1_ID, '0')) OR(COALESCE(old.USER2_ID, '0') <> COALESCE(new.USER2_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(old.Posted='Y' AND ((COALESCE(old.DATEACCT, v_DateNull) <> COALESCE(new.DATEACCT, v_DateNull)) OR(COALESCE(old.C_CAMPAIGN_ID, '0') <> COALESCE(new.C_CAMPAIGN_ID, '0')) OR(COALESCE(old.C_PROJECT_ID, '0') <> COALESCE(new.C_PROJECT_ID, '0')) OR(COALESCE(old.C_ACTIVITY_ID, '0') <> COALESCE(new.C_ACTIVITY_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(old.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 4DROP FUNCTION public.c_cash_chk_restrictions_trg(); publictadfalse23416125536589c_cash_post(character varying)FUNCTION2fCREATE FUNCTION c_cash_post(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere License License * compliance with the License. You may obtain a copy of the License at * http://www.compiere.org/license.html * Software distributed under the License is distributed on an AS IS * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 1999-2009 Openbravo, S.L ************************************************************************* * $Id: C_Cash_Post.sql,v 1.10 2003/03/17 20:32:25 jjanke Exp $ *** * Title: Post Cash Book Entry * Description: * - Create Payment entry for Transfer: DELETED!!! May do it from Settlement * - Create Allocation for Invoices (trigger updates SO_CreditUsed): * - Update Balance and De-Activate ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC; v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_User VARCHAR(32); --OBTG:VARCHAR2-- v_C_Debt_Payment_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- --Added by P.SAROBE v_documentno_Settlement VARCHAR(40); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_Cancel_Processed VARCHAR(60); v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_Bankstatementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ispaid CHAR(1); v_is_included NUMERIC:=0; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; --Finish added by P.Sarobe -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_CashlineDebtpayment RECORD; -- Parameter Variables v_Processed VARCHAR(60); v_Posted VARCHAR(60); v_count NUMERIC; v_SettlementDocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_settlementID VARCHAR(32) ; --OBTG:varchar2-- v_DocumentNo VARCHAR(40) ; v_line C_CASHLINE.LINE%TYPE; -- CashBook v_CB_Currency_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_CB_Date TIMESTAMP; v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Settlement_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_CashBook_ID VARCHAR(32) ; --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter SELECT PROCESSED, POSTED, AD_Org_ID, AD_Client_ID, C_CASHBOOK_ID, DateAcct INTO v_Processed, v_Posted, v_AD_Org_ID, v_AD_Client_ID, v_C_CashBook_ID, v_dateCash FROM C_CASH WHERE C_Cash_ID=v_Record_ID; /* Not needed: payments are updated to pending status SELECT COUNT(*) INTO v_Count FROM C_CASHLINE WHERE C_CASH_ID = v_Record_ID AND C_ORDER_ID IS NOT NULL AND C_DEBT_PAYMENT_ID IS NOT NULL; RAISE NOTICE '%',' Record_ID=' || v_Record_ID; IF (v_Processed = 'Y' AND v_Count>0) THEN v_Message := '@AlreadyPosted@'; v_Result := 0; FINISH_PROCESS := true; END IF; */ IF(NOT FINISH_PROCESS) THEN IF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@CashDocumentPosted@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN DECLARE v_Settlement_Cancel VARCHAR(32):=NULL; --OBTG:VARCHAR2-- CurDebtPaymentOrder RECORD; BEGIN /* * Reversing process */ IF(v_Processed='Y') THEN v_ResultStr:='Reversed'; UPDATE C_CASH SET PROCESSED='N', --ENDINGBALANCE=0, STATEMENTDIFFERENCE=NULL WHERE C_CASH_ID=v_Record_ID; SELECT MAX(S.C_SETTLEMENT_ID) INTO v_Settlement_Cancel FROM C_DEBT_PAYMENT DP, C_SETTLEMENT S WHERE DP.C_SETTLEMENT_CANCEL_ID=S.C_SETTLEMENT_ID AND DP.C_CASHLINE_ID IN (SELECT C_CASHLINE_ID FROM C_CASHLINE WHERE C_CASH_ID=v_Record_ID) AND S.DOCUMENTNO LIKE '*CP*%'; UPDATE C_DEBT_PAYMENT SET C_CASHLINE_ID=NULL WHERE C_CASHLINE_ID IN (SELECT C_CASHLINE_ID FROM C_CASHLINE WHERE C_CASH_ID=v_Record_ID AND CashType IN('O', 'P'));--To be fixed. Cash type ='O' is deprecated. Added by P.Sarobe IF(v_Settlement_Cancel IS NOT NULL) THEN --This is the generated settlement (it only can be one) DELETE FROM FACT_ACCT WHERE AD_TABLE_ID = '800019' AND RECORD_ID = v_Settlement_Cancel; UPDATE C_Settlement set posted='N' where c_Settlement_ID= v_Settlement_Cancel; PERFORM C_SETTLEMENT_POST(NULL, v_Settlement_Cancel) ; UPDATE C_DEBT_PAYMENT SET C_SETTLEMENT_CANCEL_ID=NULL, CANCEL_PROCESSED='N', ISPaid='N' WHERE C_SETTLEMENT_CANCEL_ID=v_Settlement_Cancel; DELETE FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID=v_Settlement_Cancel; END IF; --To be fixed. We are doing the same 'IsPaid' below. Added by P.Sarobe UPDATE C_DEBT_PAYMENT SET ISPaid='N' WHERE c_debt_payment_id IN (SELECT C_DEBT_PAYMENT_ID FROM C_CASHLINE WHERE C_CASH_ID=v_Record_ID AND CashType IN('O', 'P'));--To be fixed. Cash type ='O' is deprecated. Added by P.Sarobe -- This is done to be compatible with old versions. To be Fixed FOR CurDebtPaymentOrder IN (SELECT cl.C_CashLine_ID, cl.C_Debt_Payment_ID FROM C_CASHLINE cl WHERE cl.C_CASH_ID=v_Record_ID AND CASHTYPE='O' AND C_Order_ID IS NOT NULL ) LOOP UPDATE C_CashLine SET C_Debt_Payment_ID=NULL WHERE C_CashLine_ID=CurDebtPaymentOrder.C_CashLine_ID; DELETE FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=CurDebtPaymentOrder.C_Debt_Payment_ID; END LOOP; FINISH_PROCESS:=true; END IF; --v_Processed = 'Y' END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /* * Checking Restrictions */ -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_CASH, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_CASH.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_CASH.C_CASH_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_CASH', 'C_CASHLINE', v_Record_ID, 'C_CASH_ID', 'C_CASH_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOC_PAYMENTS('C_CASH', 'C_CASHLINE', v_Record_ID, 'C_CASH_ID', 'C_CASH_ID', 'C_DEBT_PAYMENT_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@PaymentsAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('C_CASH', v_Record_ID, 'C_CASH_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_dateCash, 'CMC', NULL) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; v_ResultStr:='CheckingRestrictions - C_CASH ORG IS IN C_CASHBOOK ORG TREE'; SELECT COUNT(*) INTO v_count FROM C_CASH, C_CASHBOOK WHERE C_CASH.C_CASHBOOK_ID=C_CASHBOOK.C_CASHBOOK_ID AND NOT (Ad_Isorgincluded(C_CASH.AD_ORG_ID, C_CASHBOOK.AD_ORG_ID, C_CASHBOOK.AD_CLIENT_ID)<>-1 OR Ad_Isorgincluded(C_CASHBOOK.AD_ORG_ID, C_CASH.AD_ORG_ID, C_CASHBOOK.AD_CLIENT_ID)<>-1) AND C_CASH_ID=v_Record_ID; IF v_count>0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgCashbook@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN--To be Fixed. Cash type='O' is deprecated. Added by P.Sarobe v_ResultStr:='CheckingRestrictions - C_CASH ORG IS IN C_ORDER ORG TREE'; SELECT COUNT(*), MAX(cl.Line) INTO v_count, v_line FROM C_CASH c, C_CASHLINE cl, C_ORDER o, C_BPARTNER bp WHERE c.C_CASH_ID=cl.C_CASH_ID AND c.C_CASH_ID=v_Record_ID AND cl.C_ORDER_ID=o.C_ORDER_ID AND o.C_BPARTNER_ID=bp.C_BPARTNER_ID AND (Ad_Isorgincluded(o.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1 OR Ad_Isorgincluded(o.AD_ORG_ID, c.AD_ORG_ID, c.AD_CLIENT_ID)=-1); IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@NotCorrectOrgOrderCashLine@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='CheckingRestrictions - C_CASH ORG IS IN C_DEBT_PAYMENT ORG TREE'; SELECT COUNT(*), MAX(cl.Line) INTO v_count, v_line FROM C_CASH c, C_CASHLINE cl, C_DEBT_PAYMENT l, C_BPARTNER bp WHERE c.C_CASH_ID=cl.C_CASH_ID AND c.C_CASH_ID=v_Record_ID AND cl.C_DEBT_PAYMENT_ID=l.C_DEBT_PAYMENT_ID AND l.C_BPARTNER_ID=bp.C_BPARTNER_ID AND(Ad_Isorgincluded(l.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1 --To be deprecated, to be fixed. This Check restriction should be checked when debt payment is created. Added by PSarobe OR Ad_Isorgincluded(l.AD_ORG_ID, c.AD_ORG_ID, c.AD_CLIENT_ID)=-1) ; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@NotCorrectOrgDebtpaymentCashLine@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS --To be fixed. Cash type='O' to be deprecated. Added by P.Sarobe IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(cl.Line) INTO v_count, v_line FROM C_CASHLINE cl WHERE cl.C_Cash_ID=v_Record_ID AND cl.CASHTYPE='O' AND NOT EXISTS (SELECT 1 FROM C_ORDERLINE ol WHERE ol.C_Order_ID=cl.C_Order_ID AND ol.QTYORDERED<>ol.QTYINVOICED ) ; IF v_count>0 THEN v_Message:='@CashOrderInvoiced@. Line:'||v_line; v_Result:=0; FINISH_PROCESS:=true; END IF; END IF;--FINISH_PROCESS --Until here to be fixed, to be deprecated because of the cahstype='O' IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(cl.Line) INTO v_count, v_line FROM C_CASHLINE cl, C_DEBT_PAYMENT dp WHERE cl.C_Cash_ID=v_Record_ID AND cl.CASHTYPE='P' AND cl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND cl.C_Currency_ID=dp.C_Currency_ID AND CASE dp.IsReceipt WHEN 'Y' THEN -- If IsReceipt = N, amount*-1 (dp.Amount-coalesce(dp.WriteOffAmt,0)) ELSE (coalesce(dp.WriteOffAmt,0)-dp.Amount) END <>(cl.Amount+coalesce(cl.WriteOffAmt,0)) ; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@DebtAmountsSamemoneyNoMatch@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(cl.Line) INTO v_count, v_line FROM C_CASHLINE cl, C_CASH c, C_DEBT_PAYMENT dp WHERE cl.C_Cash_ID=c.C_Cash_ID AND cl.C_Cash_ID=v_Record_ID AND cl.CASHTYPE='P' AND cl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND cl.C_Currency_ID<>dp.C_Currency_ID AND CASE dp.IsReceipt WHEN 'Y' THEN -- If IsReceipt = N, amount*-1 (coalesce(dp.Amount,0)-coalesce(dp.WriteOffAmt,0)) ELSE (coalesce(dp.WriteOffAmt,0)-coalesce(dp.Amount,0)) END <>C_Currency_Round(C_Currency_Convert((coalesce(cl.Amount,0) + coalesce(cl.WriteOffAmt,0)), cl.C_Currency_ID, dp.C_Currency_ID, c.DateAcct, NULL, c.AD_Client_ID, c.AD_Org_ID), dp.C_Currency_ID, NULL) ; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@DebtAmountsDifferentMoneyNoMatch@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(cl.C_CASHLINE_ID) INTO v_count, v_CashLine_ID FROM C_CASHLINE cl, C_DEBT_PAYMENT dp WHERE cl.C_Cash_ID=v_Record_ID AND cl.CASHTYPE='P' AND cl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND C_Debt_Payment_Status(dp.C_SETTLEMENT_CANCEL_ID, dp.Cancel_Processed, dp.Generate_Processed, dp.IsPaid, dp.IsValid, dp.C_CashLine_ID, dp.C_BankStatementLine_ID) NOT IN('P', 'A') ; IF v_count!=0 THEN --Added by P.Sarobe. New messages SELECT line, c_Debt_Payment_ID INTO v_line, v_C_Debt_Payment_Id FROM C_CASHLINE WHERE C_CASHLINE_ID=v_CashLine_ID; SELECT c_Bankstatementline_Id, c_cashline_id, c_settlement_cancel_id, ispaid, cancel_processed INTO v_Bankstatementline_ID, v_CashLine_ID, v_Settlement_Cancel_ID, v_ispaid, v_Cancel_Processed FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID = v_C_Debt_Payment_Id; IF v_Bankstatementline_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_BANKSTATEMENTLINE_ID = v_Bankstatementline_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ManagedDebtPaymentBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_CashLine_ID IS NOT NULL THEN--This is also checked in the unique index C_CASHLINE_DEBT_PAYMENT SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ManagedDebtPaymentCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; IF v_Cancel_Processed='Y' AND v_ispaid='N' THEN SELECT documentno, datetrx INTO v_documentno_Settlement, v_dateSettlement FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = v_Settlement_Cancel_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@ManagedDebtPaymentCancel@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(C_Debt_Payment_ID) INTO v_count, v_C_Debt_Payment_Id FROM --Subquery checks if there are duplicates debt payments for the same cash (SELECT dp.C_Debt_Payment_ID FROM C_CASHLINE cl, C_DEBT_PAYMENT dp WHERE cl.C_Cash_ID=v_Record_ID AND cl.CASHTYPE='P' AND cl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID GROUP BY dp.C_Debt_Payment_ID HAVING COUNT(*)>1 )A; IF v_count>0 THEN --Added by PSarobe. This is also checked in the unique index C_CASHLINE_DEBT_PAYMENT FOR Cur_CashlineDebtpayment IN (SELECT line FROM c_cashline WHERE c_cashline.c_cash_id=v_Record_ID AND c_cashline.c_debt_payment_id=v_C_Debt_Payment_Id) LOOP v_Message:=v_Message||Cur_CashlineDebtpayment.line||', '; END LOOP; RAISE EXCEPTION '%', '@Inlines@'||v_Message||' '||'@Samedebtpayment@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN --To be fixed because of cashtype='O'. Cashtype='O' to be deprecated SELECT COUNT(*), MAX(Line) INTO v_count, v_line FROM C_CASHLINE cl WHERE cl.C_Cash_ID=v_Record_ID AND((cl.CASHTYPE='O' AND C_ORDER_ID IS NULL) OR(cl.CASHTYPE='P' AND C_DEBT_PAYMENT_ID IS NULL) OR(cl.CASHTYPE NOT IN('O', 'P') AND(C_ORDER_ID IS NOT NULL OR C_DEBT_PAYMENT_ID IS NOT NULL))) ; IF v_count>0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@WrongLineTypeAndReferenceCash@'; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Generate C_debt_payment for cashline with order type */ /* Now this goes to c_order_post ALO DECLARE v_debtPaymentID VARCHAR(32); --OBTG:varchar2-- CurCashLinesOrder RECORD; BEGIN FOR CurCashLinesOrder IN (SELECT o.AD_CLIENT_ID, o.AD_ORG_ID, o.ISSOTRX, o.DOCUMENTNO, bp.NAME, o.POREFERENCE, o.C_ORDER_ID, o.C_BPARTNER_ID, o.C_CURRENCY_ID, cl.C_CASHLINE_ID, o.PAYMENTRULE, C_Currency_Convert((cl.Amount + cl.WriteOffAmt), cl.C_Currency_ID, o.C_Currency_ID, c.DateAcct, NULL, c.AD_Client_ID, c.AD_Org_ID) AMT, c.STATEMENTDATE, o.C_PROJECT_ID FROM C_CASHLINE cl, C_ORDER o, C_BPARTNER bp, C_CASH c WHERE cl.C_ORDER_ID = o.C_ORDER_ID AND cl.C_CASH_ID = v_Record_ID AND bp.C_BPARTNER_ID = o.C_BPARTNER_ID AND C.C_CASH_ID = cl.C_CASH_id) LOOP SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID); INSERT INTO C_DEBT_PAYMENT(C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_CANCEL_ID, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_ORDER_ID, C_BPARTNER_ID, C_CURRENCY_ID, C_CASHLINE_ID, C_BANKACCOUNT_ID, C_CASHBOOK_ID, PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, C_BANKSTATEMENTLINE_ID, CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, c_project_id) VALUES (v_debtPaymentID, CurCashLinesOrder.AD_CLIENT_ID, CurCashLinesOrder.AD_ORG_ID, 'Y', TO_DATE(NOW()), v_User, TO_DATE(NOW()), v_User, CurCashLinesOrder.IsSOTrx, NULL, NULL, 'Order No: ' || CurCashLinesOrder.DOCUMENTNO || ' (' || CurCashLinesOrder.Name || (CASE WHEN CurCashLinesOrder.POREFERENCE IS NULL THEN '' ELSE ' .Ref:'||TO_CHAR(CurCashLinesOrder.POREFERENCE) END) || ')', CurCashLinesOrder.C_ORDER_ID, CurCashLinesOrder.C_BPartner_ID, CurCashLinesOrder.C_CURRENCY_ID, NULL,NULL,v_C_CashBook_ID, CurCashLinesOrder.PAYMENTRULE, 'N',(CASE CurCashLinesOrder.IsSOTrx WHEN 'Y' THEN CurCashLinesOrder.AMT ELSE (-1)*CurCashLinesOrder.AMT END),0,CurCashLinesOrder.STATEMENTDATE,'N','Y', NULL,'N','N','N',CurCashLinesOrder.C_PROJECT_ID); UPDATE C_CASHLINE SET C_DEBT_PAYMENT_ID = v_debtPaymentID WHERE C_CASHLINE_ID = CurCashLinesOrder.C_CASHLINE_ID; END LOOP; END; */ /** * Generate C_Settlement */ SELECT COUNT(*) INTO v_count FROM C_CASHLINE cl, C_DEBT_PAYMENT dp WHERE cl.C_Cash_ID=v_Record_ID AND cl.CASHTYPE IN('O', 'P') AND cl.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND C_Debt_Payment_Status(dp.C_SETTLEMENT_CANCEL_ID, dp.Cancel_Processed, dp.Generate_Processed, dp.IsPaid, dp.IsValid, dp.C_CashLine_ID, dp.C_BankStatementLine_ID)='P'; v_ResultStr:='GettingCashBookInfo'; SELECT cb.C_Currency_ID, c.DateAcct INTO v_CB_Currency_ID, v_CB_Date FROM C_CASHBOOK cb, C_CASH c WHERE cb.C_CashBook_ID=c.C_CashBook_ID AND c.C_Cash_ID=v_Record_ID; IF(v_count>0) THEN v_SettlementDocType_ID:=Ad_Get_DocType(v_AD_Client_ID, v_AD_Org_ID, 'STT') ; SELECT * INTO v_settlementID FROM Ad_Sequence_Next('C_Settlement', v_Record_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_SettlementDocType_ID, v_Record_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_AD_Client_ID, 'Y') ; END IF; INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, PROCESSING, PROCESSED, POSTED, C_CURRENCY_ID, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, CREATEFROM, ISGENERATED ) SELECT v_settlementID, AD_Client_ID, AD_Org_ID, 'Y', TO_DATE(NOW()), UpdatedBy, TO_DATE(NOW()), UpdatedBy, '*CP*'||v_DocumentNo, v_CB_Date, v_CB_Date, 'B', v_SettlementDocType_ID, 'N', 'N', 'N', v_CB_Currency_ID, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, 'N', 'Y' FROM C_CASH WHERE C_Cash_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET C_SETTLEMENT_CANCEL_ID=v_settlementID, IsPaid='Y' WHERE C_DEBT_PAYMENT.C_Debt_Payment_ID IN (SELECT C_Debt_Payment_ID FROM C_CASHLINE WHERE C_Cash_ID=v_Record_ID) AND C_Debt_Payment_Status(C_DEBT_PAYMENT.C_SETTLEMENT_CANCEL_ID, C_DEBT_PAYMENT.Cancel_Processed, C_DEBT_PAYMENT.Generate_Processed, C_DEBT_PAYMENT.IsPaid, C_DEBT_PAYMENT.IsValid, C_DEBT_PAYMENT.C_CashLine_ID, C_DEBT_PAYMENT.C_BankStatementLine_ID)='P'; PERFORM C_SETTLEMENT_POST(NULL, v_settlementID) ; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Update Balances + De-Activate + Conciliate Debt_Payments */ DECLARE v_Total NUMERIC:=0; v_Currency_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- -- Lines Cur_Lines RECORD; BEGIN -- Calculate Tital FOR Cur_Lines IN (SELECT * FROM C_CASHLINE WHERE C_Cash_ID=v_Record_ID) LOOP v_ResultStr:='GettingTrxCurrency'; -- Get Debt_Payment Currency and conciliate Debt/Payments IF(Cur_Lines.CashType IN('O', 'P') AND Cur_Lines.C_Debt_Payment_ID IS NOT NULL) THEN UPDATE C_DEBT_PAYMENT SET C_CashLine_ID=Cur_Lines.C_CashLine_ID WHERE C_Debt_Payment_ID=Cur_Lines.C_Debt_Payment_ID; SELECT C_Currency_ID INTO v_Currency_ID FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID=Cur_Lines.C_Debt_Payment_ID; END IF; -- Assume CashBook Currency for Charge /* Lines are in cashbook currency IF(v_Currency_ID IS NULL) THEN v_Currency_ID:=v_CB_Currency_ID; END IF; v_ResultStr:='CalculatingSum'; IF(v_Currency_ID<>v_CB_Currency_ID) THEN v_Total:=v_Total + C_Currency_Convert(Cur_Lines.Amount, v_Currency_ID, v_CB_Currency_ID, v_CB_Date, NULL, Cur_Lines.AD_Client_ID, Cur_Lines.AD_Org_ID) ; ELSE v_Total:=v_Total + Cur_Lines.Amount; END IF; */ v_Total:=v_Total + Cur_Lines.Amount; END LOOP; -- RAISE NOTICE '%','CashJournal Complete - Total=' || v_Total ; v_ResultStr:='UpdatingRecord'; UPDATE C_CASH SET StatementDifference=v_Total, EndingBalance=BeginningBalance + v_Total, Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Cash_ID=v_Record_ID; -- Synchronize Client/Org Ownership UPDATE C_CASHLINE SET AD_Client_ID=v_AD_Client_ID, AD_Org_ID=v_AD_Org_ID WHERE C_Cash_ID=v_Record_ID AND(AD_Client_ID<>v_AD_Client_ID OR AD_Org_ID<>v_AD_Org_ID) ; END; END IF;--FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_User, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; DDROP FUNCTION public.c_cash_post(p_pinstance_id character varying); publictadfalse23416125595405 c_cash_trg()FUNCTIONCREATE FUNCTION c_cash_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Cash_Trg.sql,v 1.2 2002/07/06 03:01:56 jjanke Exp $ *** * Title: Cash Trigger * Description: * Truncate Statement Date * Update Statement Balances when Beginning Balance chages ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Truncate Statement Date new.StatementDate:=TRUNC(new.StatementDate) ; -- Update StatementDifference IF TG_OP = 'UPDATE' THEN IF NEW.BeginningBalance <> OLD.BeginningBalance THEN SELECT COALESCE(SUM(Amount), 0) INTO new.StatementDifference FROM C_CashLine WHERE C_Cash_ID=new.C_Cash_ID; -- Update Ending Balance new.EndingBalance:=new.BeginningBalance + new.StatementDifference; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; #DROP FUNCTION public.c_cash_trg(); publictadfalse23416+125595396c_cashbook_trg()FUNCTION CREATE FUNCTION c_cashbook_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Cashbook_Trg.sql,v 1.2 2002/01/02 04:53:50 jjanke Exp $ *** * Title: New Accounting Defaults * Description: ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'INSERT') THEN FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID UNION SELECT 1 FROM AD_Org_AcctSchema WHERE AD_Org_ID = '0' AND AD_Client_ID = new.AD_Client_ID AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) ) LOOP INSERT INTO C_Cashbook_Acct ( C_Cashbook_Acct_ID, C_Cashbook_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, CB_Asset_Acct, CB_Differences_Acct, CB_Expense_Acct, CB_Receipt_Acct, CB_CashTransfer_Acct ) VALUES ( get_uuid(), new.C_Cashbook_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.CB_Asset_Acct, Cur_Defaults.CB_Differences_Acct, Cur_Defaults.CB_Expense_Acct, Cur_Defaults.CB_Receipt_Acct, Cur_Defaults.CB_CashTransfer_Acct ) ; END LOOP; ELSIF (TG_OP = 'UPDATE') THEN UPDATE C_CASHBOOK_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE C_CASHBOOK_ID = new.C_CASHBOOK_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_cashbook_trg(); publictadfalse23416,125595398c_cashline_chk_restrict_trg()FUNCTIONU CREATE FUNCTION c_cashline_chk_restrict_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_C_CASH_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_CASH_ID:=NEW.C_CASH_ID; ELSE v_C_CASH_ID:=OLD.C_CASH_ID; END IF; SELECT PROCESSED INTO v_Processed FROM C_CASH WHERE C_CASH_ID=v_C_CASH_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND ( (COALESCE(OLD.LINE, 0) <> COALESCE(NEW.LINE, 0)) OR(COALESCE(OLD.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0')) OR(COALESCE(OLD.CASHTYPE, '.') <> COALESCE(NEW.CASHTYPE, '.')) OR(COALESCE(OLD.AMOUNT, 0) <> COALESCE(NEW.AMOUNT, 0)) OR(COALESCE(OLD.DISCOUNTAMT, 0) <> COALESCE(NEW.DISCOUNTAMT, 0)) OR(COALESCE(OLD.WRITEOFFAMT, 0) <> COALESCE(NEW.WRITEOFFAMT, 0)) OR( COALESCE(OLD.C_DEBT_PAYMENT_ID, '0') <> COALESCE(NEW.C_DEBT_PAYMENT_ID, '0') AND(OLD.C_ORDER_ID IS NULL)) OR(COALESCE(OLD.C_ORDER_ID, '0') <> COALESCE(NEW.C_ORDER_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 4DROP FUNCTION public.c_cashline_chk_restrict_trg(); publictadfalse23416-125595400c_cashline_trg()FUNCTIONkCREATE FUNCTION c_cashline_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_CashLine_Trg.sql,v 1.18 2003/03/17 20:32:24 jjanke Exp $ *** * Title: Manage Allocations * Description: * Prevent changing invoice lines * When Inserting and we have an invoice * Create Allocation Line (Trigger updates C_BPartner.SO_CreditUsed) * Update C_Currency_ID of line * Update Cash Balance (Header) **** UPDATE C_CashLine cl SET C_Currency_ID = (SELECT C_Currency_ID FROM C_Invoice i WHERE i.C_Invoice_ID=cl.C_Invoice_ID) WHERE C_Currency_ID IS NULL AND C_Invoice_ID IS NOT NULL; UPDATE C_CashLine cl SET C_Currency_ID = (SELECT C_Currency_ID FROM C_BankAccount b WHERE b.C_BankAccount_ID=cl.C_BankAccount_ID) WHERE C_Currency_ID IS NULL AND C_BankAccount_ID IS NOT NULL; UPDATE C_CashLine cl SET C_Currency_ID = (SELECT b.C_Currency_ID FROM C_Cash c, C_CashBook b WHERE c.C_Cash_ID=cl.C_Cash_ID AND c.C_CashBook_ID=b.C_CashBook_ID) WHERE C_Currency_ID IS NULL; ************************************************************************/ v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_Currency_ID VARCHAR(32) := NULL; --OBTG:varchar2-- -- CashBook v_CB_Currency_ID VARCHAR(32); --OBTG:varchar2-- v_CB_Date TIMESTAMP; -- v_Difference NUMERIC:= 0; v_Client_ID VARCHAR(32); --OBTG:varchar2-- v_Org_ID VARCHAR(32); --OBTG:varchar2-- v_Cash_ID VARCHAR(32); --OBTG:varchar2-- v_Debt_Payment_ID VARCHAR(32) := NULL; --OBTG:varchar2-- v_RO NUMERIC; -- v_Trace VARCHAR(2000) := 'CashLine: '; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; /** Cannot change generated invoice data */ /* Correction by I. Ciordia: tg_op = 'DELETE' and tg_op = 'UPDATE' generated cashlines is allowed. Control is transfered to cashPost IF (TG_OP = 'DELETE') THEN IF (old.C_Debt_Payment_ID IS NOT NULL AND old.IsGenerated = 'Y') THEN RAISE EXCEPTION '%', 'Cannot delete line with generated Invoice'; --OBTG:-20102-- END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF (old.C_Invoice_ID IS NOT NULL AND old.IsGenerated='Y' AND new.IsGenerated='Y') THEN RAISE EXCEPTION '%', 'Cannot change line with generated Invoice'; --OBTG:-20102-- END IF; END IF; End correction ICiordia*/ /** * Fill Variables */ IF (TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN v_Difference := v_Difference - old.Amount; v_Client_ID := old.AD_Client_ID; v_Org_ID := old.AD_Org_ID; v_Cash_ID := old.C_Cash_ID; v_Debt_Payment_ID := old.C_Debt_Payment_ID; END IF; IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_Difference := v_Difference + new.Amount; v_Client_ID := new.AD_Client_ID; v_Org_ID := new.AD_Org_ID; v_Cash_ID := new.C_Cash_ID; v_Debt_Payment_ID := new.C_Debt_Payment_ID; END IF; -- Get CashBook Currenncy, Date SELECT cb.C_Currency_ID, c.DateAcct INTO v_CB_Currency_ID, v_CB_Date FROM C_CashBook cb, C_Cash c WHERE cb.C_CashBook_ID=c.C_CashBook_ID AND c.C_Cash_ID=v_Cash_ID; -- Get Invoice Currency IF (v_Debt_Payment_ID IS NOT NULL) THEN SELECT C_Currency_ID INTO v_Currency_ID FROM C_Debt_Payment WHERE C_Debt_Payment_ID = v_Debt_Payment_ID; END IF; -- Assume CashBook Currency for Charge IF (v_Currency_ID IS NULL) THEN v_Currency_ID := v_CB_Currency_ID; END IF; -- v_Trace := v_Trace || ' Difference=' || v_Difference || ', Cash_ID=' || v_Cash_ID || ', Invoice_ID=' || v_Invoice_ID || ', Currency_ID=' || v_Currency_ID || ', CB_Currency_ID=' || v_CB_Currency_ID; /** * Update CashBook Line */ IF (NOT TG_OP = 'DELETE') THEN new.C_Currency_ID := v_CB_Currency_ID; END IF; /** * Update CashBook Header */ -- Convert to CashBook Currency IF (v_Currency_ID <> v_CB_Currency_ID) THEN v_Difference := C_Currency_Convert(v_Difference, v_Currency_ID, v_CB_Currency_ID, v_CB_Date, null, v_Client_ID, v_Org_ID); END IF; -- Update header UPDATE C_Cash SET StatementDifference = StatementDifference + v_Difference, EndingBalance = EndingBalance + v_Difference WHERE C_Cash_ID = v_Cash_ID; -- v_Trace := v_Trace || ' > ' || SQL%ROWCOUNT || ' < Difference=' || v_Difference; -- INSERT INTO AD_TRACE (What) VALUES (v_Trace); IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_cashline_trg(); publictadfalse23416125536596(c_changeprojectstatus(character varying)FUNCTIONCREATE FUNCTION c_changeprojectstatus(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_resultstr VARCHAR (2000) := ''; --OBTG:VARCHAR2-- v_message VARCHAR (2000) := ''; --OBTG:VARCHAR2-- v_result NUMERIC:= 1; -- 0=failure v_record_id VARCHAR(32); --OBTG:varchar2-- v_ad_user_id VARCHAR(32); --OBTG:varchar2-- --TYPE RECORD IS REFCURSOR; cur_parameter RECORD; v_p_projectstatus VARCHAR(60); v_projectstatus VARCHAR(60); v_created NUMERIC:= 0; finish_process BOOLEAN := FALSE; BEGIN -- Get Parameters v_resultstr := 'ReadingParameters'; FOR cur_parameter IN (SELECT i.record_id, i.ad_user_id, p.parametername, p.p_string, p.p_number, p.p_date, p.p_date_to FROM ad_pinstance i LEFT JOIN ad_pinstance_para p ON i.ad_pinstance_id = p.ad_pinstance_id WHERE i.ad_pinstance_id = p_pinstance_id ORDER BY p.seqno) LOOP v_record_id := cur_parameter.record_id; v_ad_user_id := cur_parameter.ad_user_id; IF (cur_parameter.parametername = 'ChangeProjectStatus') THEN v_p_projectstatus := cur_parameter.p_string; RAISE NOTICE '%',' ChangeProjectStatus=' || v_p_projectstatus; ELSE RAISE NOTICE '%','*** Unknown Parameter='|| cur_parameter.parametername; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_record_id; -- Check that we have some restrictions v_resultstr := 'CheckRestriction'; IF (v_p_projectstatus IS NULL) THEN RAISE EXCEPTION '%', '@Notprojectstatus@'; --OBTG:-20000-- END IF; IF (NOT finish_process) THEN v_resultstr := 'Verify status'; SELECT projectstatus INTO v_projectstatus FROM c_project WHERE c_project_id = v_record_id; IF v_projectstatus IS NULL THEN RAISE EXCEPTION '%', '@Notstatusdefined@'; --OBTG:-20000-- ELSIF (v_projectstatus = 'NF' OR v_projectstatus = 'OP') THEN IF (v_p_projectstatus <> 'OR' AND v_p_projectstatus <> 'OU') THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'; --OBTG:-20000-- END IF; ELSIF (v_projectstatus = 'OR') THEN IF (v_p_projectstatus <> 'OC') THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'; --OBTG:-20000-- END IF; ELSIF (v_projectstatus = 'OC') THEN RAISE EXCEPTION '%', '@Projectclose@'; --OBTG:-20000-- END IF; END IF; --FINISH_PROCESS IF (NOT finish_process) THEN IF v_p_projectstatus = 'OR' THEN PERFORM C_CHANGEPROJECTSTATUSTOORDER(p_pinstance_id); ELSIF v_p_projectstatus = 'OC' THEN PERFORM C_CLOSEPROJECT(p_pinstance_id); ELSE UPDATE c_project SET projectstatus = v_p_projectstatus WHERE c_project_id = v_record_id; -- COMMIT; END IF; RETURN; END IF;--FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_message; PERFORM AD_UPDATE_PINSTANCE(p_pinstance_id, NULL, 'N', v_result, v_message); RETURN; EXCEPTION WHEN OTHERS THEN v_resultstr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_resultstr; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_pinstance_id, NULL, 'N', 0, v_resultstr); -- Commented by cromero 19102006 RETURN; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.c_changeprojectstatus(p_pinstance_id character varying); publictadfalse23416125536598/c_changeprojectstatustoorder(character varying)FUNCTIONE>CREATE FUNCTION c_changeprojectstatustoorder(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_M_Discountschema_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_ProjectStatus VARCHAR(60) ; v_projectcategory VARCHAR(60); v_temppricelist VARCHAR(60); v_Created NUMERIC:=0; v_PriceListVersion VARCHAR(32); --OBTG:varchar2-- v_PriceList VARCHAR(32); --OBTG:varchar2-- v_PriceListVersionPO VARCHAR(32); --OBTG:varchar2-- v_PriceListPO VARCHAR(32); --OBTG:varchar2-- v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_TotalPhases NUMERIC; v_TotalLines NUMERIC; v_BPName VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_SupplierName VARCHAR(2000):=''; --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get PARAMETERS v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, i.AD_Client_ID, i.AD_Org_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.P_Date_To FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='ChangeProjectStatus') THEN v_ProjectStatus:=Cur_Parameter.P_String; RAISE NOTICE '%',' ChangeProjectStatus=' || v_ProjectStatus ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Check that we have some restrictions v_ResultStr:='CheckRestriction'; IF(v_ProjectStatus IS NULL) THEN RAISE EXCEPTION '%', '@Notprojectstatus@'; --OBTG:-20000-- ELSIF v_ProjectStatus<>'OR' THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN DECLARE Cur_SO RECORD; Cur_Lines RECORD; Cur_LinesPO RECORD; BEGIN v_ResultStr:='StartLoop'; FOR Cur_SO IN (SELECT * FROM C_PROJECT WHERE C_PROJECT_ID=v_Record_ID) LOOP v_AD_Client_ID:=Cur_SO.AD_Client_ID; v_AD_Org_ID:=Cur_SO.AD_Org_ID; IF Cur_SO.C_BPARTNER_ID IS NULL THEN RAISE EXCEPTION '%', '@NoprojectBusinesspartner@'; --OBTG:-20000-- /* Eliminado a peticion de Huesker ELSIF Cur_SO.AD_USER_ID IS NULL THEN v_Message := 'ContactNotFound'; v_Result := 0; FINISH_PROCESS := true; EXIT; */ ELSIF Cur_SO.C_BPARTNER_LOCATION_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @ShiptoNotdefined@'; --OBTG:-20000-- ELSIF Cur_SO.BILLTO_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @BillToNotdefined@'; --OBTG:-20000-- ELSIF Cur_SO.C_PAYMENTTERM_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PaymenttermNotdefined@'; --OBTG:-20000-- ELSIF Cur_SO.C_CURRENCY_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectCurrencyNotFound@'; --OBTG:-20000-- ELSIF Cur_SO.M_WAREHOUSE_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectWarehouseNotFound@'; --OBTG:-20000-- ELSIF Cur_SO.SALESREP_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectSalesRepNotFound@'; --OBTG:-20000-- END IF; /*Added in order to work with Multiphase Project*/ IF Cur_SO.PROJECTCATEGORY<>'S' THEN SELECT COUNT(*) INTO v_TotalLines FROM C_PROJECTLINE WHERE C_PROJECT_ID=v_Record_ID; IF v_TotalLines=0 THEN RAISE EXCEPTION '%', '@NoProjectLines@'; --OBTG:-20000-- END IF; ELSE SELECT COUNT(*) INTO v_TotalPhases FROM C_PROJECTPHASE WHERE C_PROJECT_ID=v_Record_ID; IF v_TotalPhases=0 THEN RAISE EXCEPTION '%', '@NoProjectPhases@'; --OBTG:-20000-- END IF; END IF; /*In order to create a particular price list for the current project, project must be a service project and Create Temporary Price List option must be checked*/ IF (Cur_SO.PROJECTCATEGORY<>'S' AND Cur_SO.CREATETEMPPRICELIST='Y') THEN SELECT * INTO v_PriceList FROM Ad_Sequence_Next('M_PriceList', v_AD_Client_ID) ; SELECT NAME INTO v_BPName FROM C_BPARTNER WHERE C_BPARTNER_ID = Cur_SO.C_BPARTNER_ID; INSERT INTO m_pricelist ( M_PRICELIST_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, DESCRIPTION, ISSOPRICELIST, C_Currency_ID ) VALUES ( v_PriceList, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, (Cur_SO.value || ' - ' || v_BPName), (Cur_SO.value || ' - ' || v_BPName), 'Y', Cur_SO.C_Currency_ID ) ; SELECT * INTO v_PriceListVersion FROM Ad_Sequence_Next('M_PriceList_Version', v_AD_Client_ID) ; SELECT MIN(M_DISCOUNTSCHEMA_ID) INTO v_M_Discountschema_ID FROM M_DISCOUNTSCHEMA WHERE ISACTIVE='Y' AND AD_CLIENT_ID=v_AD_Client_ID AND AD_ORG_ID IN ((SELECT '0' AS org FROM dual) UNION (SELECT AD_ORG_ID AS org FROM AD_ORG WHERE AD_CLIENT_ID=v_AD_Client_ID AND (AD_ISORGINCLUDED(AD_ORG_ID,v_AD_Org_ID,AD_CLIENT_ID) <> -1) OR (AD_ISORGINCLUDED(v_AD_Org_ID,AD_ORG_ID,AD_CLIENT_ID) <> -1))) AND CREATED = (SELECT MIN(CREATED) FROM M_DISCOUNTSCHEMA WHERE ISACTIVE='Y' AND AD_CLIENT_ID=v_AD_Client_ID AND AD_ORG_ID IN ((SELECT '0' AS org FROM dual) UNION (SELECT AD_ORG_ID AS org FROM AD_ORG WHERE AD_CLIENT_ID=v_AD_Client_ID AND (AD_ISORGINCLUDED(AD_ORG_ID,v_AD_Org_ID,AD_CLIENT_ID) <> -1) OR (AD_ISORGINCLUDED(v_AD_Org_ID,AD_ORG_ID,AD_CLIENT_ID) <> -1)))) ; IF v_M_Discountschema_ID IS NULL THEN RAISE EXCEPTION '%', '@NoPLSchema@'; --OBTG:-20000-- END IF; INSERT INTO M_PRICELIST_VERSION ( M_PRICELIST_VERSION_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, DESCRIPTION, M_PRICELIST_ID, M_DISCOUNTSCHEMA_ID, VALIDFROM ) VALUES ( v_PriceListVersion, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, (Cur_SO.value || ' - ' ||v_BPName|| ' - ' ||TRUNC(TO_DATE(NOW()), 'DD')), (Cur_SO.value || ' - ' ||v_BPName|| ' - ' ||TRUNC(TO_DATE(NOW()), 'DD')), v_PriceList, v_M_Discountschema_ID, TRUNC(TO_DATE(NOW()), 'DD') ) ; FOR Cur_Lines IN (SELECT * FROM C_PROJECTLINE WHERE C_PROJECT_ID=v_Record_ID) LOOP INSERT INTO M_PRODUCTPRICE ( M_PRODUCTPRICE_ID, M_PRICELIST_VERSION_ID, M_PRODUCT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, PRICELIST, PRICESTD, PRICELIMIT ) VALUES ( get_uuid(), v_PriceListVersion, Cur_Lines.M_Product_ID, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, Cur_Lines.PLANNEDPRICE, Cur_Lines.PLANNEDPRICE, Cur_Lines.PLANNEDPRICE ) ; END LOOP; SELECT COUNT(*) INTO v_TotalLines FROM C_PROJECTLINE WHERE C_PROJECT_ID=v_Record_ID AND PLANNEDPOPRICE IS NOT NULL; IF v_TotalLines>0 THEN SELECT * INTO v_PriceListPO FROM Ad_Sequence_Next('M_PriceList', v_AD_Client_ID) ; SELECT max(bp.name) INTO v_SupplierName FROM c_project p, c_project_vendor pv, c_bpartner bp WHERE p.c_project_id = v_Record_ID AND p.c_project_id = pv.c_project_id AND pv.c_bpartner_id = bp.c_bpartner_id AND pv.isactive = 'Y'; IF (v_SupplierName IS NULL) THEN v_SupplierName := ''; END IF; INSERT INTO m_pricelist ( M_PRICELIST_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, DESCRIPTION, ISSOPRICELIST, C_Currency_ID ) VALUES ( v_PriceListPO, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, (Cur_SO.value || ' - ' ||v_SupplierName), (Cur_SO.value || ' - ' ||v_SupplierName), 'N', Cur_SO.C_Currency_ID ) ; SELECT * INTO v_PriceListVersionPO FROM Ad_Sequence_Next('M_PriceList_Version', v_AD_Client_ID) ; SELECT MIN(M_DISCOUNTSCHEMA_ID) INTO v_M_Discountschema_ID FROM M_DISCOUNTSCHEMA WHERE ISACTIVE='Y' AND AD_CLIENT_ID=v_AD_Client_ID AND AD_ORG_ID IN ((SELECT '0' AS org FROM dual) UNION (SELECT AD_ORG_ID AS org FROM AD_ORG WHERE AD_CLIENT_ID=v_AD_Client_ID AND (AD_ISORGINCLUDED(AD_ORG_ID,v_AD_Org_ID,AD_CLIENT_ID) <> -1) OR (AD_ISORGINCLUDED(v_AD_Org_ID,AD_ORG_ID,AD_CLIENT_ID) <> -1))) AND CREATED = (SELECT MIN(CREATED) FROM M_DISCOUNTSCHEMA WHERE ISACTIVE='Y' AND AD_CLIENT_ID=v_AD_Client_ID AND AD_ORG_ID IN ((SELECT '0' AS org FROM dual) UNION (SELECT AD_ORG_ID AS org FROM AD_ORG WHERE AD_CLIENT_ID=v_AD_Client_ID AND (AD_ISORGINCLUDED(AD_ORG_ID,v_AD_Org_ID,AD_CLIENT_ID) <> -1) OR (AD_ISORGINCLUDED(v_AD_Org_ID,AD_ORG_ID,AD_CLIENT_ID) <> -1)))) ; IF v_M_Discountschema_ID IS NULL THEN RAISE EXCEPTION '%', '@NoPLSchema@'; --OBTG:-20000-- END IF; INSERT INTO M_PRICELIST_VERSION ( M_PRICELIST_VERSION_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, DESCRIPTION, M_PRICELIST_ID, M_DISCOUNTSCHEMA_ID, VALIDFROM ) VALUES ( v_PriceListVersionPO, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, (Cur_SO.value || ' - ' ||v_SupplierName|| ' - ' ||TRUNC(TO_DATE(NOW()), 'DD')), (Cur_SO.value || ' - ' ||v_SupplierName||' - ' ||TRUNC(TO_DATE(NOW()), 'DD')), v_PriceListPO, v_M_Discountschema_ID, TRUNC(TO_DATE(NOW()), 'DD') ) ; FOR Cur_LinesPO IN (SELECT * FROM C_PROJECTLINE WHERE C_PROJECT_ID=v_Record_ID AND PLANNEDPOPRICE IS NOT NULL ) LOOP INSERT INTO M_PRODUCTPRICE ( M_PRODUCTPRICE_ID, M_PRICELIST_VERSION_ID, M_PRODUCT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, PRICELIST, PRICESTD, PRICELIMIT ) VALUES ( get_uuid(), v_PriceListVersionPO, Cur_LinesPO.M_Product_ID, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, Cur_LinesPO.PLANNEDPOPRICE, Cur_LinesPO.PLANNEDPOPRICE, Cur_LinesPO.PLANNEDPOPRICE ) ; END LOOP; ELSE SELECT MIN(M_PRICELIST_ID) INTO v_PriceListPO FROM M_PRICELIST WHERE ISSOPRICELIST='N' AND ISACTIVE='Y' AND AD_CLIENT_ID=v_AD_Client_ID; END IF; END IF; END LOOP; IF v_PriceListPO IS NOT NULL THEN UPDATE C_PROJECT_VENDOR SET m_pricelist_id=v_PriceListPO WHERE c_project_id=v_Record_ID; END IF; /*In order to update the price list of the current project, project must be a service project and Create Temporary Price List option must be checked*/ SELECT projectcategory, createtemppricelist INTO v_projectcategory, v_temppricelist FROM c_project WHERE c_project_id = v_Record_ID; IF (v_projectcategory<>'S' AND v_temppricelist='Y') THEN UPDATE C_PROJECT SET projectstatus=v_ProjectStatus, m_pricelist_id=v_PriceList WHERE c_project_id=v_Record_ID; ELSE UPDATE C_PROJECT SET projectstatus=v_ProjectStatus WHERE c_project_id=v_Record_ID; END IF; END; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; UDROP FUNCTION public.c_changeprojectstatustoorder(p_pinstance_id character varying); publictadfalse23416125595407c_charge_trg()FUNCTIONO CREATE FUNCTION c_charge_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * New Accounting Defaults */ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'INSERT') THEN FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) ) LOOP INSERT INTO C_Charge_Acct ( C_Charge_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, CH_Expense_Acct, CH_Revenue_Acct ) VALUES ( new.C_Charge_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.CH_Expense_Acct, Cur_Defaults.CH_Revenue_Acct ) ; END LOOP; ELSIF (TG_OP = 'UPDATE') THEN UPDATE C_CHARGE_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE C_CHARGE_ID = new.C_CHARGE_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.c_charge_trg(); publictadfalse23416125536601gc_chk_open_period(character varying, timestamp without time zone, character varying, character varying)FUNCTION CREATE FUNCTION c_chk_open_period(p_orgid character varying, p_date timestamp without time zone, p_doctype character varying, p_doctype_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Returns 1 if the period is opened for the selected organization, TIMESTAMP and doctype ************************************************************************/ v_available_period NUMERIC:=0; BEGIN -- Check the period control is opened IF (p_doctype_id IS NOT NULL) THEN SELECT COUNT(C_Period_ID) INTO v_available_period FROM C_Period WHERE p_date>=STARTDATE AND p_date=STARTDATE AND p_date'OC' THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN v_ResultStr:='StartLoop'; IF (v_projectcategory<>'S' AND v_temppricelist='Y') THEN UPDATE M_PRICELIST_VERSION SET ISACTIVE='N', updated=TO_DATE(NOW()), updatedby=v_AD_User_ID WHERE M_PRICELIST_ID IN ( SELECT M_PRICELIST_ID FROM C_PROJECT WHERE C_PROJECT_ID=v_p_Record_ID) ; UPDATE M_PRICELIST SET ISACTIVE='N', updated=TO_DATE(NOW()), updatedby=v_AD_User_ID WHERE M_PRICELIST_ID IN ( SELECT M_PRICELIST_ID FROM C_PROJECT WHERE C_PROJECT_ID=v_p_Record_ID) ; UPDATE M_PRICELIST_VERSION SET ISACTIVE='N', updated=TO_DATE(NOW()), updatedby=v_AD_User_ID WHERE M_PRICELIST_ID IN ( SELECT M_PRICELIST_ID FROM C_PROJECT_VENDOR WHERE C_PROJECT_ID=v_p_Record_ID) ; UPDATE M_PRICELIST SET ISACTIVE='N', updated=TO_DATE(NOW()), updatedby=v_AD_User_ID WHERE M_PRICELIST_ID IN ( SELECT M_PRICELIST_ID FROM C_PROJECT_VENDOR WHERE C_PROJECT_ID=v_p_Record_ID) ; END IF; UPDATE C_PROJECT SET projectstatus=v_ProjectStatus, DATEFINISH=TO_DATE(NOW()), updated=TO_DATE(NOW()), updatedby=v_AD_User_ID WHERE c_project_id=v_p_Record_ID; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; GDROP FUNCTION public.c_closeproject(p_pinstance_id character varying); publictadfalse23416125536604$c_commission_copy(character varying)FUNCTION^CREATE FUNCTION c_commission_copy(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Commission_Copy.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Copy lines from another Commission * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables p_C_Commission_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='C_Commission_ID') THEN p_C_Commission_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_Commission_ID=' || p_C_Commission_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Copy Lines from p_C_Commission_ID to Record_ID DECLARE CUR_Commission RECORD; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- BEGIN FOR CUR_Commission IN (SELECT * FROM C_CommissionLine WHERE C_Commission_ID=p_C_Commission_ID AND IsActive='Y' ) LOOP v_ResultStr:='CopyLines'; -- Get SeqNo SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_CommissionLine', CUR_Commission.AD_Client_ID) ; -- Insert INSERT INTO C_CommissionLine ( C_CommissionLine_ID, C_Commission_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Line, Description, AmtSubtract, AmtMultiplier, QtySubtract, QtyMultiplier, IsPositiveOnly, M_Product_Category_ID, M_Product_ID, C_BP_Group_ID, C_BPartner_ID, C_SalesRegion_ID ) VALUES ( v_NextNo, v_Record_ID, CUR_Commission.AD_Client_ID, CUR_Commission.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', CUR_Commission.Line, CUR_Commission.Description, CUR_Commission.AmtSubtract, CUR_Commission.AmtMultiplier, CUR_Commission.QtySubtract, CUR_Commission.QtyMultiplier, CUR_Commission.IsPositiveOnly, CUR_Commission.M_Product_Category_ID, CUR_Commission.M_Product_ID, CUR_Commission.C_BP_Group_ID, CUR_Commission.C_BPartner_ID, CUR_Commission.C_SalesRegion_ID ) ; END LOOP; END; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; JDROP FUNCTION public.c_commission_copy(p_pinstance_id character varying); publictadfalse23416125536606'c_commission_process(character varying)FUNCTIONg9CREATE FUNCTION c_commission_process(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /****************************************************************************** * The contents of this file are subject to the Compiere License Version 1.1 * ("License"); You may not use this file except in compliance with the License * You may obtain a copy of the License at http://www.compiere.org/license.html * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2006 Openbravo S.L. ******************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables p_StartDate TIMESTAMP; -- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Name VARCHAR(90) ; --OBTG:VARCHAR2-- v_Currency VARCHAR(10) ; --OBTG:VARCHAR2-- v_FrequencyType VARCHAR(60); v_DocBasisType VARCHAR(60); v_ListDetails VARCHAR(60); v_SalesRep_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- v_StartDate TIMESTAMP; v_EndDate TIMESTAMP; v_C_CommissionRun_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_NextNo VARCHAR(32) ; --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(40) ; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='StartDate') THEN p_StartDate:=Cur_Parameter.P_Date; RAISE NOTICE '%',' StartDate=' || p_StartDate ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; /** * Create Header + Determine TIMESTAMP Range */ v_ResultStr:='ReadingRecord'; SELECT AD_Client_ID, AD_Org_ID, Name, FrequencyType, DocBasisType, ListDetails, C_BPartner_ID INTO v_AD_Client_ID, v_AD_Org_ID, v_Name, v_FrequencyType, v_DocBasisType, v_ListDetails, v_SalesRep_ID FROM C_Commission WHERE C_Commission_ID=v_Record_ID; -- SELECT ISO_Code INTO v_Currency FROM C_Currency cur, C_Commission com WHERE cur.C_Currency_ID=com.C_Currency_ID AND com.C_Commission_ID=v_Record_ID; -- v_ResultStr:='CalculatingHeader'; IF(p_StartDate IS NULL) THEN p_StartDate:=TO_DATE(NOW()) ; END IF; -- IF(v_FrequencyType='Q') THEN -- Quarter v_StartDate:=TRUNC(p_StartDate, 'Q') ; v_EndDate:=TRUNC(v_StartDate+93, 'Q') -1; ELSIF(v_FrequencyType='W') THEN -- Weekly v_StartDate:=TRUNC(p_StartDate, 'DAY') ; v_EndDate:=TRUNC(v_StartDate+7, 'DAY') -1; ELSE -- Month v_StartDate:=TRUNC(p_StartDate, 'MM') ; v_EndDate:=TRUNC(v_StartDate+32, 'MM') -1; END IF; -- Name 01-Jan-2000 - 31-Jan-2001 - USD v_Name:=v_Name || ' ' || TO_CHAR(v_StartDate) || ' - ' || TO_CHAR(v_EndDate) || ' - ' || v_Currency; SELECT * INTO v_C_CommissionRun_ID FROM AD_Sequence_Next('C_CommissionRun', v_AD_Client_ID) ; SELECT * INTO v_DocumentNo FROM AD_Sequence_Doc('DocumentNo_C_CommissionRun', v_AD_Client_ID, 'Y') ; RAISE NOTICE '%','Create: ' || v_DocumentNo || ' - ' || v_Name ; v_ResultStr:='InsertingHeader'; INSERT INTO C_CommissionRun ( C_CommissionRun_ID, C_Commission_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, DocumentNo, Description, StartDate, GrandTotal, Processing, Processed ) VALUES ( v_C_CommissionRun_ID, v_Record_ID, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_DocumentNo, v_Name, v_StartDate, 0, 'N', 'N' ) ; -- v_ResultStr:='Update Record'; UPDATE C_Commission SET DateLastRun=TO_DATE(NOW()) WHERE C_Commission_ID=v_Record_ID; /** * Calculate Lines */ DECLARE CUR_CLine RECORD; TYPE_Ref REFCURSOR; v_rc TYPE_REF%TYPE; -- v_Cmd VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_C_CommissionAmt_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- v_C_Currency_ID C_CommissionDetail.C_Currency_ID%TYPE; v_Amt C_CommissionDetail.ActualAmt%TYPE; v_Qty C_CommissionDetail.ActualQty%TYPE; v_C_OrderLine_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_C_InvoiceLine_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Reference C_CommissionDetail.Reference%TYPE; v_Info C_CommissionDetail.Info%TYPE; -- BEGIN FOR CUR_CLine IN (SELECT * FROM C_CommissionLine WHERE C_Commission_ID=v_Record_ID AND IsActive='Y') LOOP v_ResultStr:='InsertingAmt'; -- For every Commission Line create empty Amt line (updated by Detail) SELECT * INTO v_C_CommissionAmt_ID FROM AD_Sequence_Next('C_CommissionAmt', v_AD_Client_ID) ; INSERT INTO C_CommissionAmt ( C_CommissionAmt_ID, C_CommissionRun_ID, C_CommissionLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, ConvertedAmt, ActualQty, CommissionAmt ) VALUES ( v_C_CommissionAmt_ID, v_C_CommissionRun_ID, CUR_CLine.C_CommissionLine_ID, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 0, 0, 0 ) ; -- Calculation done by Trigger -- DBMS_OUTPUT.PUT_LINE('- ' || CUR_CLine.Line); v_ResultStr:='AssemblingDynSQL'; -- Receipt Basis IF(v_DocBasisType='R') THEN v_ResultStr:='To develope'; /*IF (v_ListDetails = 'Y') THEN v_Cmd := 'SELECT h.C_Currency_ID, l.LineNetAmt, l.QtyInvoiced, ' || 'NULL, l.C_InvoiceLine_ID, p.DocumentNo || ''_'' || h.DocumentNo, COALESCE(prd.Name,l.Description) ' || 'FROM C_Payment p, C_Invoice h, C_InvoiceLine l LEFT JOIN M_Product prd ON l.M_Product_ID = prd.M_Product_ID ' || 'WHERE p.C_Invoice_ID = h.C_Invoice_ID' || ' AND p.DocStatus IN (''CL'',''CO'')' || ' AND h.C_Invoice_ID = l.C_Invoice_ID' || ' AND h.AD_Client_ID = '':1''' || ' AND h.DateInvoiced >= to_date('':2'')' || ' AND h.DateInvoiced < to_date('':3'') +1'; || ' '; ELSE v_Cmd := 'SELECT h.C_Currency_ID, SUM(l.LineNetAmt) AS Amt, SUM(l.QtyInvoiced) AS Qty, ' || 'NULL, NULL, NULL, NULL ' || 'FROM C_Payment p, C_Invoice h, C_InvoiceLine l ' || 'WHERE p.C_Invoice_ID = h.C_Invoice_ID' || ' AND p.DocStatus IN (''CL'',''CO'')' || ' AND h.C_Invoice_ID = l.C_Invoice_ID' || ' AND h.AD_Client_ID = '':1''' || ' AND h.DateInvoiced >= to_date('':2'')' || ' AND h.DateInvoiced < to_date('':3'') +1'; END IF;*/ -- Invoice Basis ELSIF(v_DocBasisType='I') THEN IF(v_ListDetails='Y') THEN v_Cmd:='SELECT h.C_Currency_ID, l.LineNetAmt, l.QtyInvoiced, ' || 'NULL, l.C_InvoiceLine_ID, h.DocumentNo, substr(COALESCE(prd.Name,l.Description),1,60) ' || 'FROM C_Invoice h, C_InvoiceLine l LEFT JOIN M_Product prd ON l.M_Product_ID = prd.M_Product_ID ' || 'WHERE h.C_Invoice_ID = l.C_Invoice_ID' || ' AND h.DocStatus IN (''CL'',''CO'')' || ' AND h.ISSOTRX = ''Y''' || ' AND h.AD_Client_ID = '':1''' || ' AND h.DateInvoiced >= to_date('':2'')' || ' AND h.DateInvoiced < to_date('':3'') +1'; ELSE v_Cmd:='SELECT h.C_Currency_ID, SUM(l.LineNetAmt) AS Amt, SUM(l.QtyInvoiced) AS Qty, ' || 'NULL, NULL, NULL, NULL ' || 'FROM C_Invoice h, C_InvoiceLine l ' || 'WHERE h.C_Invoice_ID = l.C_Invoice_ID' || ' AND h.DocStatus IN (''CL'',''CO'')' || ' AND h.ISSOTRX = ''Y''' || ' AND h.AD_Client_ID = '':1''' || ' AND h.DateInvoiced >= to_date('':2'')' || ' AND h.DateInvoiced < to_date('':3'') +1'; END IF; -- Order Basis ELSE IF(v_ListDetails='Y') THEN v_Cmd:='SELECT h.C_Currency_ID, l.LineNetAmt, l.QtyOrdered, ' || 'l.C_OrderLine_ID, NULL, h.DocumentNo, substr(COALESCE(prd.Name,l.Description),1,60) ' || 'FROM C_Order h, C_OrderLine l LEFT JOIN M_Product prd ON l.M_Product_ID = prd.M_Product_ID ' || 'WHERE h.C_Order_ID = l.C_Order_ID' || ' AND h.DocStatus IN (''CL'',''CO'')' || ' AND h.ISSOTRX = ''Y''' || ' AND h.AD_Client_ID = '':1''' || ' AND h.DateOrdered >= to_date('':2'')' || ' AND h.DateOrdered < to_date('':3'') +1'; ELSE v_Cmd:='SELECT h.C_Currency_ID, SUM(l.LineNetAmt) AS Amt, SUM(l.QtyOrdered) AS Qty, ' || 'NULL, NULL, NULL, NULL ' || 'FROM C_Order h, C_OrderLine l ' || 'WHERE h.C_Order_ID = l.C_Order_ID' || ' AND h.DocStatus IN (''CL'',''CO'')' || ' AND h.ISSOTRX = ''Y''' || ' AND h.AD_Client_ID = '':1''' || ' AND h.DateOrdered >= to_date('':2'')' || ' AND h.DateOrdered < to_date('':3'') +1'; END IF; END IF; -- CommissionOrders/Invoices IF(CUR_CLine.CommissionOrders='Y') THEN v_Cmd:=v_Cmd || ' AND h.SalesRep_ID = (SELECT AD_User_ID FROM AD_User WHERE C_BPartner_ID=''' || v_SalesRep_ID || ''')'; END IF; -- Organization IF(CUR_CLine.Org_ID IS NOT NULL) THEN v_Cmd:=v_Cmd || ' AND h.AD_Org_ID=''' || CUR_CLine.Org_ID || ''''; END IF; -- BPartner IF(CUR_CLine.C_BPartner_ID IS NOT NULL) THEN v_Cmd:=v_Cmd || ' AND h.C_BPartner_ID=''' || CUR_CLine.C_BPartner_ID || ''''; END IF; -- BPartner Group IF(CUR_CLine.C_BP_Group_ID IS NOT NULL) THEN v_Cmd:=v_Cmd || ' AND h.C_BPartner_ID IN' || '(SELECT C_BPartner_ID FROM C_BPartner WHERE C_BP_Group_ID=''' || CUR_CLine.C_BP_Group_ID || ''')'; END IF; -- Sales Region IF(CUR_CLine.C_SalesRegion_ID IS NOT NULL) THEN v_Cmd:=v_Cmd || ' AND h.C_BPartner_Location_ID IN ' || '(SELECT C_BPartner_Location_ID FROM C_BPartner_Location WHERE C_SalesRegion_ID=''' || CUR_CLine.C_SalesRegion_ID || ''')'; END IF; -- Product IF(CUR_CLine.M_Product_ID IS NOT NULL) THEN v_Cmd:=v_Cmd || ' AND l.M_Product_ID=''' || CUR_CLine.M_Product_ID || ''''; END IF; -- Product Category IF(CUR_CLine.M_Product_Category_ID IS NOT NULL) THEN v_Cmd:=v_Cmd || ' AND l.M_Product_ID IN ' || '(SELECT M_Product_ID FROM M_Product WHERE M_Product_Category_ID=''' || CUR_CLine.M_Product_Category_ID ||''')'; END IF; -- Grouping IF(v_ListDetails<>'Y') THEN v_Cmd:=v_Cmd || ' GROUP BY h.C_Currency_ID'; END IF; -- -- DBMS_OUTPUT.PUT_LINE('- ' || CUR_CLine.Line || ' SQL=' || SUBSTR(v_Cmd, 1, 200)); -- DBMS_OUTPUT.PUT_LINE(SUBSTR(v_Cmd, 200,200)); -- DBMS_OUTPUT.PUT_LINE(SUBSTR(v_Cmd, 400)); -- v_ResultStr:='OpenDynCursor'; SELECT REPLACE(REPLACE(REPLACE(v_Cmd, ':1', to_char(v_AD_Client_ID)), ':2', to_char(v_StartDate)), ':3', to_char(v_EndDate)) INTO v_Cmd FROM DUAL; OPEN v_rc FOR EXECUTE v_Cmd; LOOP v_ResultStr:='FetchingData'; FETCH v_rc INTO v_C_Currency_ID, v_Amt, v_Qty, v_C_OrderLine_ID, v_C_InvoiceLine_ID, v_Reference, v_Info; EXIT WHEN NOT FOUND ; --OBTG:v_rc-- -- v_ResultStr:='InsertingDetail'; SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_CommissionDetail', v_AD_Client_ID) ; INSERT INTO C_CommissionDetail ( C_CommissionDetail_ID, C_CommissionAmt_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Currency_ID, ActualAmt, ConvertedAmt, ActualQty, C_OrderLine_ID, C_InvoiceLine_ID, Reference, Info ) VALUES ( v_NextNo, v_C_CommissionAmt_ID, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_C_Currency_ID, v_Amt, 0, v_Qty, -- Conversion done by Trigger v_C_OrderLine_ID, v_C_InvoiceLine_ID, v_Reference, v_Info ) ; -- -- DBMS_OUTPUT.PUT_LINE(' ' || v_Reference || ' - ' || v_Amt || ' - ' || v_Qty); END LOOP; CLOSE v_rc; -- END LOOP; -- For every Commission Line END; v_Message:='@CommissionRun@ = ' || v_DocumentNo || ' - ' || v_Name; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; MDROP FUNCTION public.c_commission_process(p_pinstance_id character varying); publictadfalse23416125595409c_commissionamt_trg()FUNCTION\ CREATE FUNCTION c_commissionamt_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Update Header GrandTotal * Convert Amount to Commission Currrency * Calculate Commission Amount */ v_AmtSubtract NUMERIC; v_AmtMultiplier NUMERIC; v_QtySubtract NUMERIC; v_QtyMultiplier NUMERIC; v_IsPositiveOnly CHAR(1) ; -- v_Result NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE' OR TG_OP = 'DELETE') THEN -- DBMS_OUTPUT.PUT_LINE('C_CommissionAmt_Trg - Subtract'); -- Subtract old Amount from Header UPDATE C_CommissionRun SET GrandTotal=GrandTotal - old.CommissionAmt WHERE C_CommissionRun_ID=old.C_CommissionRun_ID; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN -- DBMS_OUTPUT.PUT_LINE('C_CommissionAmt_Trg - Get Info'); -- Get Info From CommissionLine SELECT AmtSubtract, AmtMultiplier, QtySubtract, QtyMultiplier, IsPositiveOnly INTO v_AmtSubtract, v_AmtMultiplier, v_QtySubtract, v_QtyMultiplier, v_IsPositiveOnly FROM C_CommissionLine WHERE C_CommissionLine_ID=new.C_CommissionLine_ID; -- Quantities v_Result :=(new.ActualQty - v_QtySubtract) * v_QtyMultiplier; IF(v_IsPositiveOnly='Y' AND v_Result < 0) THEN v_Result:=0; END IF; -- Amount new.CommissionAmt:=v_Result; v_Result :=(new.ConvertedAmt - v_AmtSubtract) * v_AmtMultiplier; IF(v_IsPositiveOnly='Y' AND v_Result < 0) THEN v_Result:=0; END IF; new.CommissionAmt:=new.CommissionAmt + v_Result; -- Add new Amount to Header -- DBMS_OUTPUT.PUT_LINE('C_CommissionAmt_Trg - Add'); UPDATE C_CommissionRun SET GrandTotal=GrandTotal + new.CommissionAmt WHERE C_CommissionRun_ID=new.C_CommissionRun_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.c_commissionamt_trg(); publictadfalse23416.125595411c_commissiondetail_trg()FUNCTIONh CREATE FUNCTION c_commissiondetail_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Update Commission Amount Line * Convert Amount to Commission Currrency */ v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ConvDate TIMESTAMP; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE' OR TG_OP = 'DELETE') THEN -- DBMS_OUTPUT.PUT_LINE('C_CommissionDetail_Trg - Subtract'); -- Subtract old Amount/Qty from Amount UPDATE C_CommissionAmt SET ConvertedAmt=ConvertedAmt - old.ConvertedAmt, ActualQty=ActualQty - old.ActualQty WHERE C_CommissionAmt_ID=old.C_CommissionAmt_ID; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN -- DBMS_OUTPUT.PUT_LINE('C_CommissionDetail_Trg - Get Info'); -- Get Info From CommissionRun SELECT cr.StartDate, c.C_Currency_ID INTO v_ConvDate, v_C_Currency_ID FROM C_Commission c, C_CommissionRun cr, C_CommissionAmt ca WHERE ca.C_CommissionAmt_ID=new.C_CommissionAmt_ID AND cr.C_CommissionRun_ID=ca.C_CommissionRun_ID AND cr.C_Commission_ID=c.C_Commission_ID; -- Convert new.ConvertedAmt:=C_Currency_Convert(new.ActualAmt, new.C_Currency_ID, v_C_Currency_ID, v_ConvDate, 'S', new.AD_Client_ID, new.AD_Org_ID) ; -- Add new Amount/Qty to Amount -- DBMS_OUTPUT.PUT_LINE('C_CommissionDetail_Trg - Add'); UPDATE C_CommissionAmt SET ConvertedAmt=ConvertedAmt + new.ConvertedAmt, ActualQty=ActualQty + new.ActualQty WHERE C_CommissionAmt_ID=new.C_CommissionAmt_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.c_commissiondetail_trg(); publictadfalse23416125536610*c_commissionrun_process(character varying)FUNCTION^$CREATE FUNCTION c_commissionrun_process(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /****************************************************************************** * The contents of this file are subject to the Compiere License Version 1.1 * ("License"); You may not use this file except in compliance with the License * You may obtain a copy of the License at http://www.compiere.org/license.html * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo S.L. ******************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000) := ''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000) := ''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:varchar2-- v_Result NUMERIC(10) := 1; -- Success -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables CUR_ComRun RECORD; -- v_C_DocType_ID VARCHAR(32); --OBTG:varchar2-- v_C_Invoice_ID VARCHAR(32); --OBTG:varchar2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(40); --OBTG:VARCHAR2-- v_SalesRep_ID VARCHAR(32); --OBTG:varchar2-- -- v_C_BPartner_ID VARCHAR(32); --OBTG:varchar2-- v_C_BPartner_Location_ID VARCHAR(32); --OBTG:varchar2-- v_partnername VARCHAR(100); --OBTG:VARCHAR2-- v_C_PaymentTerm_ID VARCHAR(32); --OBTG:varchar2-- v_C_Currency_ID VARCHAR(32); --OBTG:varchar2-- v_PaymentRule VARCHAR(60); v_M_PriceList_ID VARCHAR(32); --OBTG:varchar2-- v_POReference VARCHAR(20); --OBTG:varchar2-- v_Product_ID VARCHAR(32); --OBTG:varchar2-- v_Tax_ID VARCHAR(32); --OBTG:varchar2-- v_UOM_ID VARCHAR(32); --OBTG:varchar2-- v_IsDiscountPrinted CHAR(1); v_CommissionName VARCHAR(60); FINISH_PROCESS BOOLEAN := false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID; v_ResultStr := 'PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL); BEGIN --BODY -- Get Parameters v_ResultStr := 'ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo) LOOP v_Record_ID := Cur_Parameter.Record_ID; -- IF (Cur_Parameter.ParameterName = 'xx') THEN -- xx := Cur_Parameter.P_String; -- DBMS_OUTPUT.PUT_LINE(' xx=' || xx); -- ELSE -- DBMS_OUTPUT.PUT_LINE('*** Unknown Parameter=' || Cur_Parameter.ParameterName); -- END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID; FOR CUR_ComRun IN (SELECT * FROM C_COMMISSIONRUN WHERE C_CommissionRun_ID = v_Record_ID) LOOP /** * Create Header */ v_ResultStr := 'GetDocTypeInfo'; v_C_DocType_ID := Ad_Get_DocType(CUR_ComRun.AD_Client_ID,CUR_ComRun.AD_Org_ID, 'API'); DECLARE Cur_Data RECORD; BEGIN FOR Cur_Data IN (SELECT com.Name, com.C_Currency_ID, com.C_BPartner_ID, pl.C_BPartner_Location_ID, PaymentRulePO, PO_PaymentTerm_ID, PO_PriceList_ID, POReference, IsDiscountPrinted, p.SalesRep_ID, com.M_Product_ID, C_UOM_ID, p.name as bpartnername FROM C_BPARTNER p, C_COMMISSION com LEFT JOIN C_BPARTNER_LOCATION pl ON com.C_BPartner_ID = pl.C_BPartner_ID LEFT JOIN M_Product prd ON com.M_Product_ID = prd.M_Product_ID WHERE com.C_Commission_ID = CUR_ComRun.C_Commission_ID AND com.C_BPartner_ID = p.C_BPartner_ID) LOOP v_CommissionName:=Cur_Data.Name; v_C_Currency_ID:=Cur_Data.C_Currency_ID; v_C_BPartner_ID:=Cur_Data.C_BPartner_ID; v_C_BPartner_Location_ID:=Cur_Data.C_BPartner_Location_ID; v_PaymentRule:=Cur_Data.PaymentRulePO; v_C_PaymentTerm_ID:=Cur_Data.PO_PaymentTerm_ID; v_M_PriceList_ID:=Cur_Data.PO_PriceList_ID; v_POReference:=Cur_Data.POReference; v_IsDiscountPrinted:=Cur_Data.IsDiscountPrinted; v_SalesRep_ID:=Cur_Data.SalesRep_ID; v_Product_ID:=Cur_Data.M_Product_ID; v_UOM_ID:=Cur_Data.C_UOM_ID; v_partnername:=Cur_Data.bpartnername; EXIT; END LOOP; END; -- IF (v_PaymentRule IS NULL) THEN v_PaymentRule := 'P'; END IF; IF (v_IsDiscountPrinted IS NULL) THEN v_IsDiscountPrinted := 'N'; END IF; IF (v_Product_ID IS NULL) THEN RAISE EXCEPTION '%', '@Commission@ '||v_CommissionName||' @InvoicedProductNotdefined@'; --OBTG:-20000-- END IF; IF (v_C_BPartner_Location_ID IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@ '||v_partnername||' @ShiptoNotdefined@'; --OBTG:-20000-- END IF; IF (v_C_PaymentTerm_ID IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@ '||v_partnername||' @PaymenttermNotdefined@'; --OBTG:-20000-- END IF; IF (v_M_PriceList_ID IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@ '||v_partnername||' @PricelistNotdefined@'; --OBTG:-20000-- END IF; IF (NOT FINISH_PROCESS) THEN -- v_ResultStr := 'GetDocSequenceInfo'; SELECT * INTO v_C_Invoice_ID FROM Ad_Sequence_Next('C_Invoice', CUR_ComRun.AD_Client_ID); SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_C_DocType_ID, CUR_ComRun.AD_Client_ID, 'Y'); IF (v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Invoice', CUR_ComRun.AD_Client_ID, 'Y'); END IF; IF (v_DocumentNo IS NULL) THEN v_DocumentNo := CUR_ComRun.DocumentNo; END IF; -- RAISE NOTICE '%',' Invoice_ID=' || v_C_Invoice_ID || ' DocumentNo=' || v_DocumentNo; -- v_ResultStr := 'InsertInvoice ' || v_C_Invoice_ID; INSERT INTO C_INVOICE (C_Invoice_ID, C_Order_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsSOTrx, DocumentNo, DocStatus, DocAction, Processing, Processed, C_DocType_ID, C_DocTypeTarget_ID, Description, SalesRep_ID, DateInvoiced, DatePrinted, IsPrinted, DateAcct, TaxDate, C_PaymentTerm_ID, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, POReference, DateOrdered, IsDiscountPrinted, C_Currency_ID, PaymentRule, C_Charge_ID, ChargeAmt, TotalLines, GrandTotal, M_PriceList_ID, C_Campaign_ID, C_Project_ID, C_Activity_ID) VALUES (v_C_Invoice_ID, NULL, CUR_ComRun.AD_Client_ID, CUR_ComRun.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'N', v_DocumentNo, 'DR', 'CO', 'N', 'N', v_C_DocType_ID, v_C_DocType_ID, CUR_ComRun.Description, v_SalesRep_ID, CUR_ComRun.Updated, NULL, 'N', CUR_ComRun.Updated, CUR_ComRun.Updated, -- DateInvoiced=DateAcct v_C_PaymentTerm_ID, v_C_BPartner_ID, v_C_BPartner_Location_ID, NULL, v_POReference, CUR_ComRun.Updated, v_IsDiscountPrinted, v_C_Currency_ID, v_PaymentRule, NULL, 0, 0, 0, v_M_PriceList_ID, NULL, NULL, NULL); -- One line with Total (TODO: Tax, UOM) v_Tax_ID := C_Gettax (v_Product_ID,CUR_ComRun.Updated,CUR_ComRun.AD_Org_ID,NULL,v_C_BPartner_Location_ID,v_C_BPartner_Location_ID,NULL,'N'); v_ResultStr := 'InsertLine'; SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', CUR_ComRun.AD_Client_ID); INSERT INTO C_INVOICELINE (C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID --MODIFIED BY F.IRIAZABAL , QUANTITYORDER, M_PRODUCT_UOM_ID, PriceStd, M_Offer_ID) VALUES (v_NextNo, CUR_ComRun.AD_Client_ID, CUR_ComRun.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_C_Invoice_ID, NULL, NULL, 10, NULL, v_Product_ID, 1, CUR_ComRun.GrandTotal, CUR_ComRun.GrandTotal, CUR_ComRun.GrandTotal, CUR_ComRun.GrandTotal, NULL, 0, v_UOM_ID, v_Tax_ID --MODIFIED BY F.IRIAZABAL , NULL, NULL, CUR_ComRun.GrandTotal, NULL); UPDATE C_CommissionRun SET C_Invoice_ID = v_C_Invoice_ID WHERE C_CommissionRun_ID = v_Record_ID; END IF;--FINISH_PROCESS v_Message := '@InvoiceDocumentno@ ' || v_DocumentNo; END LOOP;--FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message); RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr); RETURN; END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.c_commissionrun_process(p_pinstance_id character varying); publictadfalse23416/125595413c_conversion_rate_trg()FUNCTIONKCREATE FUNCTION c_conversion_rate_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Conversion_Rate_Trg.sql,v 1.3 2002/10/08 13:25:46 jjanke Exp $ *** * Title: Set ToDate * Description: * If there is no valid ToDate set it to arbitrary end date ************************************************************************/ v_Count NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --RAISE_APPLICATION_ERROR (-20506, 'Cannot modify used rate'); IF(new.ValidTo IS NULL) THEN -- If there is no end date, set it to X new.ValidTo:=TO_DATE('31-12-9999', 'DD-MM-YYYY') ; END IF; --Check for invalid dates IF new.ValidTo < new.ValidFrom THEN RAISE EXCEPTION '%', 'Date To is lower than Date From'; --OBTG:-20505-- END IF; IF TG_OP = 'UPDATE' THEN --Check for changes of used rates /*select count(*) into v_Count from c_bankstatement b, c_bankstatementline bs, c_debt_payment p where bs.c_debt_payment_id = p.c_debt_payment_id and b.c_bankstatement_id = bs.c_bankstatement_id and p.C_currency_id = old.C_Currency_ID and bs.C_currency_id = old.C_Currency_ID_TO and b.StatementDate between old.ValidFrom and old.ValidTo and ((not (b.StatementDate between new.ValidFrom and new.ValidTo)) or (new.C_Currency_ID != old.C_Currency_ID) or (new.C_Currency_ID_To != old.C_Currency_ID_To) or (new.MultiplyRate != old.MultiplyRate) ) and processed ='Y';*/ select count(*) into v_count from fact_acct f, c_acctschema s where f.c_acctschema_id = s.c_acctschema_id and f.c_currency_id = old.C_Currency_ID and s.c_currency_id = old.C_Currency_ID_TO and f.dateacct between old.ValidFrom and old.ValidTo and ((not (f.dateacct between new.ValidFrom and new.ValidTo)) or (new.C_Currency_ID != old.C_Currency_ID) or (new.C_Currency_ID_To != old.C_Currency_ID_To) or (new.MultiplyRate != old.MultiplyRate) ); IF v_count>0 THEN RAISE EXCEPTION '%', 'Cannot modify used rate'; --OBTG:-20506-- END IF; END IF; IF TG_OP = 'DELETE' THEN /*select count(*) into v_Count from c_bankstatement b, c_bankstatementline bs, c_debt_payment p where bs.c_debt_payment_id = p.c_debt_payment_id and b.c_bankstatement_id = bs.c_bankstatement_id and p.C_currency_id = old.C_Currency_ID and bs.C_currency_id = old.C_Currency_ID_TO and b.StatementDate between old.ValidFrom and old.ValidTo and processed ='Y';*/ select count(*) into v_count from fact_acct f, c_acctschema s where f.c_acctschema_id = s.c_acctschema_id and f.c_currency_id = old.C_Currency_ID and s.c_currency_id = old.C_Currency_ID_TO and f.dateacct between old.ValidFrom and old.ValidTo; IF v_count>0 THEN RAISE EXCEPTION '%', 'Cannot modify used rate'; --OBTG:-20506-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; .DROP FUNCTION public.c_conversion_rate_trg(); publictadfalse234160125595415c_conversion_rate_trg2()FUNCTIONlCREATE FUNCTION c_conversion_rate_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; --check for repeated dates select count(*) into v_Count from c_Conversion_Rate r1, c_Conversion_Rate r2 where ((r1.VALIDFROM between r2.ValidFrom and r2.ValidTo) or (r1.VALIDTo between r2.ValidFrom and r2.ValidTo)) and r1.C_CURRENCY_ID = r2.C_Currency_ID and r1.C_Currency_ID_To = r2.C_Currency_ID_To and r1.c_Conversion_Rate_ID != r2.c_Conversion_Rate_ID and r1.ad_client_id = r2.ad_client_id; if v_Count > 0 then RAISE EXCEPTION '%', 'There are different conversion rates with same dates'; --OBTG:-20504-- end if; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.c_conversion_rate_trg2(); publictadfalse23416125536614'c_copy_project_lines(character varying)FUNCTION*CREATE FUNCTION c_copy_project_lines(pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_NoOfLines NUMERIC:=0; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- -- Copy Cur_ProjectLine RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Record_ID is the Tab_ID to copy to v_ResultStr:='Copying'; FOR Cur_ProjectLine IN (SELECT C_ProjectLine.* FROM C_ProjectLine, C_Project, C_ProjectProposal WHERE C_Project.C_PROJECT_ID=C_ProjectLine.C_PROJECT_ID AND C_Project.C_PROJECT_ID=C_ProjectProposal.C_PROJECT_ID AND C_ProjectProposal.C_PROJECTPROPOSAL_ID=v_Record_ID ) LOOP -- Get next no SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_ProjectProposalLine', Cur_ProjectLine.AD_Client_ID) ; -- Insert INSERT INTO C_PROJECTPROPOSALLINE ( C_PROJECTPROPOSALLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_PROJECTPROPOSAL_ID, LINENO, M_PRODUCT_ID, QTY, PRICE, DESCRIPTION, PRODUCT_VALUE, PRODUCT_NAME, PRODUCT_DESCRIPTION ) VALUES ( v_NextNo, Cur_ProjectLine.AD_Client_ID, Cur_ProjectLine.AD_Org_ID, Cur_ProjectLine.IsActive, TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_Record_ID, Cur_ProjectLine.Line, Cur_ProjectLine.M_Product_ID, Cur_ProjectLine.PlannedQty, Cur_ProjectLine.PlannedPrice, Cur_ProjectLine.Description, Cur_ProjectLine.Product_Value, Cur_ProjectLine.Product_Name, Cur_ProjectLine.Product_Description ) ; -- update translation -- v_NoOfLines:=v_NoOfLines + 1; END LOOP; v_Message:='@Copied@=' || v_NoOfLines ; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; KDROP FUNCTION public.c_copy_project_lines(pinstance_id character varying); publictadfalse234161125595417c_country_trg()FUNCTIONm CREATE FUNCTION c_country_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_COUNTRY_Trl ( C_COUNTRY_Trl_ID, C_COUNTRY_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsTranslated, Name, Description, RegionName, DisplaySequence ) SELECT get_uuid(), new.C_COUNTRY_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, 'N', new.Name, new.Description, new.RegionName, new.DisplaySequence FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.RegionName,'.') <> COALESCE(new.RegionName,'.') OR COALESCE(old.DisplaySequence,'.') <> COALESCE(new.DisplaySequence,'.') ) THEN -- Translation UPDATE C_COUNTRY_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_COUNTRY_ID=new.C_COUNTRY_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; &DROP FUNCTION public.c_country_trg(); publictadfalse23416125536617.c_create_pinvoice_from_outs(character varying)FUNCTION 8CREATE FUNCTION c_create_pinvoice_from_outs(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Description: * - Create purchase invoice from sales shipments and inventory movements ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_DateFrom TIMESTAMP; v_DateTo TIMESTAMP; v_Warehouse_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_BPartner_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_ReferenceNo VARCHAR(40) ; --OBTG:NVARCHAR2-- v_DateInvoiced TIMESTAMP; v_User_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- v_Project_ID VARCHAR(32):='0'; --OBTG:VARCHAR2-- v_Doctype_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Invoice_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(60) ; --OBTG:NVARCHAR2-- v_PaymentRule VARCHAR(60) ; v_PaymentTerm_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Currency_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_IsTaxIncluded CHAR(1) ; v_NoRecords NUMERIC:=0; v_InvoiceLine_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_auxQty NUMERIC; v_auxQtyTotal NUMERIC; v_line NUMERIC; v_priceList NUMERIC; v_priceActual NUMERIC; v_priceLimit NUMERIC; v_Tax_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_BPLocation_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- Outs: shipments and inventory movements Cur_Outs RECORD; -- Pend: orderlines-inoutlines not invoiced Cur_Pend RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, i.UpdatedBy FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_User_ID:=Cur_Parameter.UpdatedBy; IF(Cur_Parameter.ParameterName='DateFrom') THEN v_DateFrom:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DateFrom=' || v_DateFrom ; ELSIF(Cur_Parameter.ParameterName='DateTo') THEN v_DateTo:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DateTo=' || v_DateTo ; ELSIF(Cur_Parameter.ParameterName='M_Warehouse_ID') THEN v_Warehouse_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' M_Warehouse_ID=' || v_Warehouse_ID ; ELSIF(Cur_Parameter.ParameterName='C_BPartner_ID') THEN v_BPartner_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BPartner_ID=' || v_BPartner_ID ; ELSIF(Cur_Parameter.ParameterName='ReferenceNo') THEN v_ReferenceNo:=Cur_Parameter.P_String; RAISE NOTICE '%',' ReferenceNo=' || v_ReferenceNo ; ELSIF(Cur_Parameter.ParameterName='DateInvoiced') THEN v_DateInvoiced:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DateInvoiced=' || v_DateInvoiced ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter FOR Cur_Outs IN (SELECT s.AD_Client_ID, s.AD_Org_ID, p.C_Project_ID, pv.M_PriceList_ID, sl.M_Product_ID, sl.MovementQty, sl.C_UOM_ID, sl.M_AttributeSetInstance_ID, sl.quantityOrder, sl.M_Product_UOM_ID FROM M_INOUT s, M_INOUTLINE sl, C_PROJECT p, C_PROJECT_VENDOR pv, M_LOCATOR l WHERE s.M_InOut_ID=sl.M_InOut_ID AND s.C_Project_ID=p.C_Project_ID AND p.C_Project_ID=pv.C_Project_ID AND sl.M_Locator_ID=l.M_Locator_ID AND s.IsSOTrx='Y' AND s.MovementDate>=v_DateFrom AND s.MovementDate0 UNION ALL SELECT s.AD_Client_ID, s.AD_Org_ID, p.C_Project_ID, pv.M_PriceList_ID, sl.M_Product_ID, sl.MovementQty, sl.C_UOM_ID, sl.M_AttributeSetInstance_ID, sl.quantityOrder, sl.M_Product_UOM_ID FROM M_MOVEMENT s, M_MOVEMENTLINE sl, C_PROJECT p, C_PROJECT_VENDOR pv, M_LOCATOR l WHERE s.M_Movement_ID=sl.M_Movement_ID AND s.C_Project_ID=p.C_Project_ID AND p.C_Project_ID=pv.C_Project_ID AND sl.M_Locator_ID=l.M_Locator_ID AND s.MovementDate>=v_DateFrom AND s.MovementDate0 ORDER BY C_Project_ID, M_Product_ID, C_UOM_ID, M_Product_UOM_ID ) LOOP v_BPLocation_ID:=C_Getbplocationid(v_BPartner_ID, 'B') ; IF(v_Project_ID<>Cur_Outs.C_Project_ID) THEN v_NoRecords:=v_NoRecords + 1; v_Project_ID:=Cur_Outs.C_Project_ID; v_line:=0; v_DocType_ID:=Ad_Get_Doctype(Cur_Outs.AD_Client_ID, Cur_Outs.AD_Org_ID, 'API') ; -- SELECT * INTO v_Invoice_ID FROM Ad_Sequence_Next('C_Invoice', Cur_Outs.AD_Client_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DocType_ID, Cur_Outs.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Invoice', Cur_Outs.AD_Client_ID, 'Y') ; END IF; SELECT PAYMENTRULEPO, PO_PAYMENTTERM_ID INTO v_PaymentRule, v_PaymentTerm_ID FROM C_BPARTNER WHERE C_BPartner_ID=v_BPartner_ID; SELECT C_Currency_ID, IsTaxIncluded INTO v_Currency_ID, v_IsTaxIncluded FROM M_PRICELIST WHERE M_PriceList_ID=Cur_Outs.M_PriceList_ID; -- RAISE NOTICE '%',' Invoice_ID=' || v_Invoice_ID || ' DocumentNo=' || v_DocumentNo ; v_ResultStr:='InsertInvoice ' || v_Invoice_ID; INSERT INTO C_INVOICE ( C_INVOICE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISSOTRX, DOCUMENTNO, DOCSTATUS, DOCACTION, PROCESSING, PROCESSED, POSTED, C_DOCTYPE_ID, C_DOCTYPETARGET_ID, C_ORDER_ID, DESCRIPTION, ISPRINTED, SALESREP_ID, DATEINVOICED, TAXDATE, DATEPRINTED, DATEACCT, C_BPARTNER_ID, C_BPARTNER_LOCATION_ID, POREFERENCE, ISDISCOUNTPRINTED, DATEORDERED, C_CURRENCY_ID, PAYMENTRULE, C_PAYMENTTERM_ID, C_CHARGE_ID, CHARGEAMT, TOTALLINES, GRANDTOTAL, M_PRICELIST_ID, ISTAXINCLUDED, C_CAMPAIGN_ID, C_PROJECT_ID, C_ACTIVITY_ID, CREATEFROM, GENERATETO, AD_USER_ID, COPYFROM, ISSELFSERVICE ) VALUES ( v_Invoice_ID, Cur_Outs.AD_Client_ID, Cur_Outs.AD_Org_ID, 'Y', TO_DATE(NOW()), v_User_ID, TO_DATE(NOW()), v_User_ID, 'N', v_DocumentNo, 'DR', 'CO', 'N', 'N', 'N', '0', v_DocType_ID, NULL, NULL, 'N', NULL, v_DateInvoiced, v_DateInvoiced, NULL, v_DateInvoiced, v_BPartner_ID, v_BPLocation_ID, v_ReferenceNo, 'Y', NULL, v_Currency_ID, v_PaymentRule, v_PaymentTerm_ID, NULL, 0, 0, 0, Cur_Outs.M_PriceList_ID, v_IsTaxIncluded, NULL, v_Project_ID, NULL, 'N', 'N', NULL, 'N', 'N' ) ; END IF; v_auxQtyTotal:=0; SELECT MAX(PRICELIST), MAX(PRICESTD), MAX(PRICELIMIT) INTO v_priceList, v_priceActual, v_priceLimit FROM M_PRODUCTPRICE WHERE M_PriceList_Version_ID= (SELECT MIN(M_PriceList_Version_ID) FROM M_PRICELIST_VERSION WHERE M_PriceList_ID=Cur_Outs.M_PriceList_ID ) AND M_Product_ID=Cur_Outs.M_Product_ID; v_Tax_ID:=C_Gettax(Cur_Outs.M_Product_ID, v_DateInvoiced, Cur_Outs.AD_Org_ID, v_Warehouse_ID, v_BPLocation_ID, v_BPLocation_ID, v_Project_ID, 'N') ; FOR Cur_Pend IN (SELECT dl.M_INOUTLINE_ID, ol.C_ORDERLINE_ID, (dl.MovementQty - COALESCE(A.QTY, 0)) AS qty FROM M_INOUTLINE dl LEFT JOIN C_ORDERLINE ol ON dl.C_OrderLine_ID=ol.C_OrderLine_ID LEFT JOIN C_ORDER o ON ol.C_Order_ID=o.C_Order_ID LEFT JOIN (SELECT M_InOutLine_ID, COALESCE(SUM(QTY), 0) AS QTY FROM M_MATCHINV WHERE C_InvoiceLine_ID IS NOT NULL GROUP BY M_InOutLine_ID ) A ON dl.M_InOutLine_ID=A.M_InOutLine_ID, M_INOUT d WHERE d.M_InOut_ID=dl.M_InOut_ID AND d.IsSOTrx='N' AND dl.MovementQty<>COALESCE(A.QTY, 0) AND d.C_BPartner_ID=v_BPartner_ID AND dl.M_Product_ID=Cur_Outs.M_Product_ID AND(dl.M_ATTRIBUTESETInstance_ID=Cur_Outs.M_AttributeSetInstance_ID OR Cur_Outs.M_AttributeSetInstance_ID IS NULL) ORDER BY d.MOVEMENTDATE, d.M_InOut_ID ) LOOP v_auxQty:=LEAST(Cur_Outs.MovementQty-v_auxQtyTotal, Cur_Pend.qty) ; v_auxQtyTotal:=v_auxQtyTotal + v_auxQty; v_line:=v_line + 10; SELECT * INTO v_InvoiceLine_ID FROM Ad_Sequence_Next('C_InvoiceLine', Cur_Outs.AD_Client_ID) ; INSERT INTO C_INVOICELINE ( C_INVOICELINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_INVOICE_ID, C_ORDERLINE_ID, M_INOUTLINE_ID, LINE, DESCRIPTION, M_PRODUCT_ID, QTYINVOICED, PRICELIST, PRICEACTUAL, PRICELIMIT, LINENETAMT, C_CHARGE_ID, CHARGEAMT, C_UOM_ID, C_TAX_ID, S_RESOURCEASSIGNMENT_ID, TAXAMT, M_ATTRIBUTESETINSTANCE_ID, ISDESCRIPTION, QUANTITYORDER, M_PRODUCT_UOM_ID, PriceStd ) VALUES ( v_InvoiceLine_ID, Cur_Outs.AD_Client_ID, Cur_Outs.AD_Org_ID, 'Y', TO_DATE(NOW()), v_User_ID, TO_DATE(NOW()), v_User_ID, v_Invoice_ID, Cur_Pend.C_OrderLine_ID, Cur_Pend.M_InOutLine_ID, v_line, NULL, Cur_Outs.M_Product_ID, v_auxQty, v_priceList, M_Get_Offers_Price(v_DateInvoiced, v_BPartner_ID, Cur_Outs.M_Product_ID, v_priceActual, v_auxQty, Cur_Outs.M_PriceList_ID), v_priceLimit, ROUND(M_Get_Offers_Price(v_DateInvoiced, v_BPartner_ID, Cur_Outs.M_Product_ID, v_priceActual, v_auxQty, Cur_Outs.M_PriceList_ID) *v_auxQty, 2), NULL, 0, Cur_Outs.C_UOM_ID, v_Tax_ID, NULL, 0, Cur_Outs.M_AttributeSetInstance_ID, 'N', Cur_Outs.quantityOrder*(v_auxQty/Cur_Outs.MovementQty), Cur_Outs.M_Product_UOM_ID, v_priceActual ) ; IF(v_auxQtyTotal>=Cur_Outs.MovementQty) THEN EXIT; END IF; END LOOP; IF(v_auxQtyTotal> v_Message:=v_Message || '@Created@: ' || v_NoRecords; -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_Message ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_Message) ; END ; $$ LANGUAGE plpgsql; TDROP FUNCTION public.c_create_pinvoice_from_outs(p_pinstance_id character varying); publictadfalse23416z125536619c_create_temporary_tables()FUNCTIONCREATE FUNCTION c_create_temporary_tables() RETURNS character varying AS $$ BEGIN -- create temporary tables. This function is used in M_PRICELIST_CREATE() and M_PRODUCT_BOM_CHECK() functions. -- This function has been created as a result of fix for bug 0005229: Temporary tables T_Selection and T_Selection2 have been ported from v2.22 to 2.35 improperly drop table if exists C_TEMP_SELECTION; CREATE GLOBAL TEMPORARY TABLE C_TEMP_SELECTION ( C_TEMP_SELECTION_ID character varying(32) NOT NULL, CONSTRAINT C_TEMP_SELECTION_key PRIMARY KEY (C_TEMP_SELECTION_ID) ) ON COMMIT DELETE ROWS; drop table if exists C_TEMP_SELECTION2; CREATE GLOBAL TEMPORARY TABLE C_TEMP_SELECTION2 ( QUERY_ID character varying(32) NOT NULL, C_TEMP_SELECTION_ID character varying(32) NOT NULL, CONSTRAINT C_TEMP_SELECTION2_key PRIMARY KEY (QUERY_ID, C_TEMP_SELECTION_ID) ) ON COMMIT PRESERVE ROWS; RETURN null; END; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.c_create_temporary_tables(); publictadfalse23416125536620c_currency_convert(numeric, character varying, character varying, timestamp without time zone, character varying, character varying, character varying)FUNCTIONW CREATE FUNCTION c_currency_convert(p_amount numeric, p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying, p_org_id character varying) RETURNS numeric AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Currency_Convert.sql,v 1.8 2003/03/17 20:32:24 jjanke Exp $ *** * Title: Convert Amount (using IDs) * Description: * from CurrencyFrom_ID to CurrencyTo_ID * Returns NULL, if conversion not found * Standard Rounding * Test: * SELECT C_Currency_Convert(100,116,100,null,null) FROM DUAL => 64.72 ************************************************************************/ v_Rate NUMERIC; BEGIN -- Return Amount IF(p_Amount=0 OR p_CurFrom_ID=p_CurTo_ID) THEN RETURN p_Amount; END IF; -- Return NULL IF(p_Amount IS NULL OR p_CurFrom_ID IS NULL OR p_CurTo_ID IS NULL) THEN RETURN NULL; END IF; -- Get Rate v_Rate:=C_Currency_Rate(p_CurFrom_ID, p_CurTo_ID, p_ConvDate, p_RateType, p_Client_ID, p_Org_ID) ; IF(v_Rate IS NULL) THEN RETURN NULL; END IF; -- Standard Precision RETURN C_Currency_Round(p_Amount * v_Rate, p_CurTo_ID, null) ; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%',SQLERRM ; RAISE EXCEPTION '%', SQLERRM; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_convert(p_amount numeric, p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying, p_org_id character varying); publictadfalse23416125536621c_currency_convert(numeric, character varying, character varying, timestamp without time zone, character varying, character varying)FUNCTION[CREATE FUNCTION c_currency_convert(p_amount numeric, p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN C_CURRENCY_CONVERT ($1, $2, $3, $4, $5, $6, '0'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_convert(p_amount numeric, p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying); publictadfalse23416125536622qc_currency_convert(numeric, character varying, character varying, timestamp without time zone, character varying)FUNCTION8CREATE FUNCTION c_currency_convert(p_amount numeric, p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN C_CURRENCY_CONVERT ($1, $2, $3, $4, $5, '0'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_convert(p_amount numeric, p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying); publictadfalse23416125536623c_currency_convert0(numeric, character varying, character varying, timestamp without time zone, character varying, character varying, character varying)FUNCTION CREATE FUNCTION c_currency_convert0(p_amount numeric, p_curfrom character varying, p_curto character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying, p_org_id character varying) RETURNS numeric AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Currency_Convert0.sql,v 1.4 2003/03/17 20:32:24 jjanke Exp $ *** * Title: Convert Amount (using currency codes) * Description: * from CurrencyFrom_ID to CurrencyTo_ID * standard precision * Returns NULL, if conversion not found * Test: * SELECT C_Currency_Convert0(100,'CND','USD',null,null) FROM DUAL => 64.72 ************************************************************************/ v_CurFrom_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_CurTo_ID VARCHAR(32):=NULL; --OBTG:varchar2-- BEGIN -- Nothing to do IF(p_CurFrom=p_CurTo OR p_Amount=0 OR p_Amount IS NULL) THEN RETURN p_Amount; END IF; -- Get Currency_ID SELECT MAX(C_Currency_ID) INTO v_CurFrom_ID FROM C_Currency WHERE ISO_Code=p_CurFrom; SELECT MAX(C_Currency_ID) INTO v_CurTo_ID FROM C_Currency WHERE ISO_Code=p_CurTo; -- Currency not found IF(v_CurFrom_ID IS NULL OR v_CurTo_ID IS NULL) THEN RETURN NULL; END IF; -- Convert it RETURN C_Currency_Convert(p_amount, v_CurFrom_ID, v_CurTo_ID, p_ConvDate, p_RateType, p_Client_ID, p_Org_ID) ; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_convert0(p_amount numeric, p_curfrom character varying, p_curto character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying, p_org_id character varying); publictadfalse23416125536624$c_currency_isosym(character varying)FUNCTION*CREATE FUNCTION c_currency_isosym(p_currency_id character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. * Test: * SELECT C_CURRENCY_ISOSYM('100') FROM DUAL => (USD-$) ************************************************************************/ v_isocode VARCHAR(10); --OBTG:NVARCHAR2-- v_symbol VARCHAR(10); --OBTG:NVARCHAR2-- v_isosymbol VARCHAR(30); --OBTG:NVARCHAR2-- BEGIN v_isosymbol := '('; SELECT ISO_CODE, CURSYMBOL INTO v_isocode, v_symbol FROM C_CURRENCY WHERE C_CURRENCY_ID = p_currency_id; IF (v_isocode IS NOT NULL AND v_symbol IS NOT NULL) THEN v_isosymbol := v_isosymbol || v_isocode || '-' || v_symbol; ELSIF (v_isocode IS NOT NULL) THEN v_isosymbol := v_isosymbol || v_isocode; ELSIF (v_symbol IS NOT NULL) THEN v_isosymbol := v_isosymbol || v_symbol; END IF; v_isosymbol := v_isosymbol || ')'; RETURN v_isosymbol; END ; $_$ LANGUAGE plpgsql; IDROP FUNCTION public.c_currency_isosym(p_currency_id character varying); publictadfalse23416125536625c_currency_rate(character varying, character varying, timestamp without time zone, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_currency_rate(p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying, p_org_id character varying) RETURNS numeric AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Currency_Rate.sql,v 1.5 2003/03/17 20:32:24 jjanke Exp $ *** * Title: Return Conversion Rate * Description: * from CurrencyFrom_ID to CurrencyTo_ID * Returns NULL, if rate not found * Test * SELECT C_Currency_Rate(116, 100, null, null) FROM DUAL; => .647169 ************************************************************************/ -- Currency From variables v_cf_IsEuro char(1); -- Triangle v_CurrencyFrom VARCHAR(32); v_CurrencyTo VARCHAR(32); v_CurrencyEuro VARCHAR(32); -- v_ConvDate TIMESTAMP := TO_DATE(NOW()); v_RateType VARCHAR(60) := 'S'; v_Rate NUMERIC; v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_ClientName VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_OrgName VARCHAR(2000):=''; --OBTG:VARCHAR2-- BEGIN -- No Conversion IF(p_CurFrom_ID = p_CurTo_ID) THEN RETURN 1; END IF; -- Default Parameter IF(p_ConvDate IS NOT NULL) THEN v_ConvDate := p_ConvDate; END IF; IF(p_RateType IS NOT NULL) THEN v_RateType := p_RateType; END IF; -- Flexible Rates v_CurrencyFrom := p_CurFrom_ID; v_CurrencyTo := p_CurTo_ID; -- Get Rate DECLARE --TYPE RECORD IS REFCURSOR; CUR_Rate RECORD; BEGIN FOR CUR_Rate IN (SELECT MultiplyRate FROM C_Conversion_Rate WHERE C_Currency_ID = v_CurrencyFrom AND C_Currency_ID_To = v_CurrencyTo AND ConversionRateType = v_RateType AND v_ConvDate BETWEEN ValidFrom AND ValidTo AND AD_Client_ID IN ('0', p_Client_ID) AND AD_Org_ID IN ('0', p_Org_ID) AND IsActive = 'Y' ORDER BY AD_Client_ID DESC, AD_Org_ID DESC, ValidFrom DESC ) LOOP v_Rate := CUR_Rate.MultiplyRate; EXIT; -- only first END LOOP; END; -- Not found IF(v_Rate IS NULL) THEN RAISE NOTICE '%','v_CurrencyFrom:'||v_CurrencyFrom||'-v_CurrencyTo:'||v_CurrencyTo||'-v_RateType:'||v_RateType||'-v_ConvDate'||v_ConvDate||'-p_Client_ID:'||p_Client_ID||'-p_Org_ID:'||p_Org_ID ; RAISE NOTICE '%','Conversion Rate Not Found' ; SELECT ad_client.name INTO v_ClientName FROM ad_client WHERE ad_client.ad_client_id = p_Client_ID; SELECT ad_org.name INTO v_OrgName FROM ad_org WHERE ad_org.ad_org_id = p_Org_ID; IF (v_CurrencyFrom IS NULL OR v_CurrencyTo IS NULL OR v_ConvDate IS NULL OR v_ClientName IS NULL OR v_OrgName IS NULL) THEN RETURN NULL; ELSE v_Message:='@NoConversionRate@' || ' ' || C_CURRENCY_ISOSYM(v_CurrencyFrom) || ' ' || '@to@' || ' ' || C_CURRENCY_ISOSYM(v_CurrencyTo) || ' ' || '@ForDate@' || ' ''' || TO_CHAR(v_ConvDate) || ''', ' || '@Client@' || ' ''' || v_ClientName || ''' ' || '@And@' || ' ' || '@ACCS_AD_ORG_ID_D@' || ' ''' || v_OrgName || '''.'; RAISE EXCEPTION '%', v_Message; --OBTG:-20000-- END IF; END IF; -- Currency From was EMU RETURN v_Rate; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%',SQLERRM ; RAISE EXCEPTION '%', SQLERRM; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_rate(p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying, p_org_id character varying); publictadfalse23416125536627xc_currency_rate(character varying, character varying, timestamp without time zone, character varying, character varying)FUNCTION?CREATE FUNCTION c_currency_rate(p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN C_CURRENCY_RATE ($1, $2, $3, $4, $5, '0'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_rate(p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying, p_client_id character varying); publictadfalse23416125536628ec_currency_rate(character varying, character varying, timestamp without time zone, character varying)FUNCTIONCREATE FUNCTION c_currency_rate(p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN C_CURRENCY_RATE ($1, $2, $3, $4, '0'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_currency_rate(p_curfrom_id character varying, p_curto_id character varying, p_convdate timestamp without time zone, p_ratetype character varying); publictadfalse23416125536629?c_currency_round(numeric, character varying, character varying)FUNCTIONCREATE FUNCTION c_currency_round(p_amount numeric, p_curto_id character varying, p_costing character varying) RETURNS numeric AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Currency_Round.SQL,v 1.3 2003/03/17 20:32:24 jjanke Exp $ *** * Title: Round amount for Traget Currency * Description: * Round Amount using Costing or Standard Precision * Returns unmodified amount if currency not found * Test: * SELECT C_Currency_Round(C_Currency_Convert(100,116,100,null,null),100,null) FROM DUAL => 64.72 ************************************************************************/ v_StdPrecision NUMERIC; v_CostPrecision NUMERIC; BEGIN -- Nothing to convert IF(p_Amount IS NULL OR p_CurTo_ID IS NULL) THEN RETURN p_Amount; END IF; -- Ger Precision SELECT MAX(StdPrecision), MAX(CostingPrecision) INTO v_StdPrecision, v_CostPrecision FROM C_Currency WHERE C_Currency_ID = p_CurTo_ID; -- Currency Not Found IF(v_StdPrecision IS NULL) THEN RETURN p_Amount; END IF; IF(p_Costing = 'Y') THEN RETURN ROUND(p_Amount, v_CostPrecision) ; END IF; RETURN ROUND(p_Amount, v_StdPrecision) ; END ; $_$ LANGUAGE plpgsql; tDROP FUNCTION public.c_currency_round(p_amount numeric, p_curto_id character varying, p_costing character varying); publictadfalse23416125536630@c_currency_symbol(character varying, numeric, character varying)FUNCTION CREATE FUNCTION c_currency_symbol(p_currency_id character varying, p_amount numeric, p_onlysymbol character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. * Test: * SELECT C_CURRENCY_SYMBOL('100', 20000, 'N') FROM DUAL => $ 20000 * SELECT C_CURRENCY_SYMBOL('102', 20000, 'Y') FROM DUAL => € ************************************************************************/ v_issymbolright CHAR(1); v_symbol VARCHAR(10); --OBTG:NVARCHAR2-- v_isocode VARCHAR(10); --OBTG:NVARCHAR2-- v_amountsymbol VARCHAR(60); --OBTG:NVARCHAR2-- BEGIN v_amountsymbol := p_amount; SELECT ISSYMBOLRIGHTSIDE, CURSYMBOL, ISO_CODE INTO v_issymbolright, v_symbol, v_isocode FROM C_CURRENCY WHERE C_CURRENCY_ID = p_currency_id; IF (p_onlysymbol = 'Y') THEN IF (v_symbol IS NULL) THEN v_amountsymbol := v_isocode; ELSE v_amountsymbol := v_symbol; END IF; ELSE IF (v_issymbolright = 'Y') THEN IF (v_symbol IS NOT NULL) THEN v_amountsymbol := v_amountsymbol || ' ' || v_symbol; ELSE v_amountsymbol := v_amountsymbol || ' ' || v_isocode; END IF; ELSE IF (v_symbol IS NOT NULL) THEN v_amountsymbol := v_symbol || ' ' || v_amountsymbol; ELSE v_amountsymbol := v_isocode || ' ' || v_amountsymbol; END IF; END IF; END IF; RETURN v_amountsymbol; END ; $_$ LANGUAGE plpgsql; {DROP FUNCTION public.c_currency_symbol(p_currency_id character varying, p_amount numeric, p_onlysymbol character varying); publictadfalse234161125595419c_currency_trg()FUNCTIONCREATE FUNCTION c_currency_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_CURRENCY_Trl ( C_CURRENCY_Trl_ID, C_CURRENCY_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsTranslated, CurSymbol, Description ) SELECT get_uuid(), new.C_CURRENCY_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, 'N', new.CurSymbol, new.Description FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.CurSymbol, '.') <> COALESCE(NEW.CurSymbol, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.')) THEN -- Translation UPDATE C_CURRENCY_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_CURRENCY_ID=new.C_CURRENCY_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_currency_trg(); publictadfalse234161255366326c_datedayinmonth(numeric, timestamp without time zone)FUNCTIONaCREATE FUNCTION c_datedayinmonth(p_day numeric, p_date timestamp without time zone) RETURNS timestamp without time zone AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Description: return the last TIMESTAMP that is allowed to invoice orders ************************************************************************/ v_DateAux TIMESTAMP; BEGIN v_DateAux := LAST_DAY(p_Date) ; IF(TO_NUMBER(TO_CHAR(v_DateAux, 'DD')) > p_Day) THEN v_DateAux := TO_DATE(LPAD(TO_CHAR(p_Day), 2, '0') ||'/'||TO_CHAR(p_Date, 'MM/YYYY'), 'DD/MM/YYYY') ; END IF; RETURN v_DateAux; END ; $$ LANGUAGE plpgsql; ZDROP FUNCTION public.c_datedayinmonth(p_day numeric, p_date timestamp without time zone); publictadfalse23416125536633'c_db_percentage_paid(character varying)FUNCTIONCREATE FUNCTION c_db_percentage_paid(p_debt_payment_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_percentaje NUMERIC; v_Status CHAR; --TYPE RECORD IS REFCURSOR; CUR_SETTLEMENT RECORD; BEGIN v_Status := C_DEBT_PAYMENT_STATUS0(p_Debt_Payment_ID); IF (v_Status IN ('C', 'A')) THEN v_percentaje := 1; ELSIF (v_Status = 'W') THEN SELECT SUM(C_DB_PERCENTAGE_PAID(DBG.C_Debt_Payment_ID)* C_Currency_Convert(DBG.amount,DBG.C_Currency_ID,DBC.C_Currency_ID, TO_DATE(NOW()), null, DBC.AD_Client_ID, DBC.AD_Org_ID))/ SUM(C_Currency_Convert(DBG.amount,DBG.C_Currency_ID,DBC.C_Currency_ID, TO_DATE(NOW()), null, DBC.AD_Client_ID, DBC.AD_Org_ID)) INTO v_percentaje FROM C_Debt_Payment DBC, C_Debt_Payment DBG WHERE DBC.C_Settlement_Cancel_ID = DBG.C_Settlement_Generate_ID AND DBC.C_Debt_Payment_ID = p_Debt_Payment_ID; ELSE v_percentaje := 0; END IF; RETURN ROUND(v_percentaje,4); END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.c_db_percentage_paid(p_debt_payment_id character varying); publictadfalse234162125595421c_debt_payment_bal_trg()FUNCTION CREATE FUNCTION c_debt_payment_bal_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Qty NUMERIC:=0; v_Processed VARCHAR(60) ; v_C_DEBT_PAYMENT_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'DELETE') THEN v_C_DEBT_PAYMENT_ID:=old.C_DEBT_PAYMENT_ID; ELSE v_C_DEBT_PAYMENT_ID:=new.C_DEBT_PAYMENT_ID; END IF; SELECT C_SETTLEMENT.PROCESSED INTO v_Processed FROM C_SETTLEMENT, C_DEBT_PAYMENT WHERE C_SETTLEMENT.C_SETTLEMENT_ID=C_DEBT_PAYMENT.C_SETTLEMENT_GENERATE_ID AND C_DEBT_PAYMENT.C_DEBT_PAYMENT_ID=v_C_DEBT_PAYMENT_ID; IF(v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(TG_OP = 'DELETE') THEN v_Qty:=-1 *(old.AmountCredit - old.AmountDebit) ; END IF; IF(TG_OP = 'UPDATE') THEN v_Qty :=(new.AmountCredit - new.AmountDebit) -(old.AmountCredit - old.AmountDebit) ; END IF; IF(TG_OP = 'INSERT') THEN v_Qty :=(new.AmountCredit - new.AmountDebit) ; END IF; IF(TG_OP = 'INSERT') THEN UPDATE C_Debt_Payment SET GLItemAmt=COALESCE(GLItemAmt, 0) + v_Qty WHERE C_Debt_Payment_ID=new.C_Debt_Payment_ID; ELSE UPDATE C_Debt_Payment SET GLItemAmt=COALESCE(GLItemAmt, 0) + v_Qty WHERE C_Debt_Payment_ID=old.C_Debt_Payment_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.c_debt_payment_bal_trg(); publictadfalse23416125536635/c_debt_payment_balancing_rep(character varying)FUNCTIONCREATE FUNCTION c_debt_payment_balancing_rep(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_DebtPaymentBalancing RECORD; v_C_Debt_Payment_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_C_Debt_Payment_Balancing VARCHAR(32) ; --OBTG:VARCHAR2-- v_AmountCredit NUMERIC(10) ; v_AmountDebit NUMERIC(10) ; v_Amount NUMERIC(10) ; v_IsDirectPosting CHAR(1) ; v_Posted VARCHAR(60) ; --OBTG:VARCHAR2-- v_IsReceipt CHAR(1) ; v_Processed VARCHAR(60) ; --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY SELECT i.Record_ID, i.AD_User_ID INTO v_Record_ID, v_AD_User_ID FROM AD_PINSTANCE i WHERE i.AD_PInstance_ID=p_PInstance_ID; RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; SELECT C_DEBT_PAYMENT.C_DEBT_PAYMENT_ID, SUM(C_DEBT_PAYMENT_BAL_REPLACE.AMOUNTDEBIT), SUM(C_DEBT_PAYMENT_BAL_REPLACE.AMOUNTCREDIT), C_DEBT_PAYMENT.ISRECEIPT INTO v_C_Debt_Payment_ID, v_AmountDebit, v_AmountCredit, v_IsReceipt FROM C_DEBT_PAYMENT_BAL_REPLACE, C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT.C_DEBT_PAYMENT_ID=C_DEBT_PAYMENT_BAL_REPLACE.C_DEBT_PAYMENT_ID and C_DEBT_PAYMENT.C_DEBT_PAYMENT_id = (select c_debt_payment_id from C_DEBT_PAYMENT_BAL_REPLACE where C_DEBT_PAYMENT_BAL_REPLACE_ID=v_Record_ID) GROUP BY C_DEBT_PAYMENT.C_DEBT_PAYMENT_ID, C_DEBT_PAYMENT.ISRECEIPT; SELECT POSTED, PROCESSED INTO v_Posted, v_Processed FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID= (SELECT C_SETTLEMENT_GENERATE_ID FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID ) ; IF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@SettlementDocumentPosted@' ; --OBTG:-20000-- ELSE SELECT ISDIRECTPOSTING INTO v_IsDirectPosting FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID; IF(v_IsDirectPosting='N') THEN SELECT COALESCE(MAX(POSTED), 'N') INTO v_Posted FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID= ( SELECT C_SETTLEMENT_CANCEL_ID FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID ) ; IF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@SettlementCancelPosted@' ; --OBTG:-20000-- END IF; END IF; END IF; IF(NOT FINISH_PROCESS) THEN IF(v_IsReceipt='N') THEN v_Amount:=v_AmountDebit - v_AmountCredit; ELSE v_Amount:=v_AmountCredit - v_AmountDebit; END IF; SELECT AMOUNT INTO v_AmountDebit FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID; v_Amount:=v_Amount - v_AmountDebit; IF(v_Amount=0) THEN IF(v_Processed='Y') THEN UPDATE C_SETTLEMENT SET PROCESSED='N' WHERE C_SETTLEMENT_ID= (SELECT C_SETTLEMENT_GENERATE_ID FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID ) ; END IF; DELETE FROM C_DEBT_PAYMENT_BALANCING WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID; FOR Cur_DebtPaymentBalancing in (SELECT AMOUNTDEBIT, AMOUNTCREDIT, C_DEBT_PAYMENT_ID, C_GLITEM_ID, ISACTIVE, CREATEDBY, UPDATEDBY, AD_CLIENT_ID, AD_ORG_ID FROM C_DEBT_PAYMENT_BAL_REPLACE WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID ) LOOP SELECT * INTO v_C_Debt_Payment_Balancing FROM Ad_Sequence_Next('C_Debt_Payment_Balancing', v_C_Debt_Payment_ID) ; INSERT INTO C_DEBT_PAYMENT_BALANCING ( C_DEBT_PAYMENT_BALANCING_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AMOUNTDEBIT, AMOUNTCREDIT, C_GLITEM_ID, C_DEBT_PAYMENT_ID ) VALUES ( v_C_Debt_Payment_Balancing, Cur_DebtPaymentBalancing.AD_CLIENT_ID, Cur_DebtPaymentBalancing.AD_ORG_ID, Cur_DebtPaymentBalancing.ISACTIVE, TO_DATE(NOW()), Cur_DebtPaymentBalancing.CREATEDBY, TO_DATE(NOW()), Cur_DebtPaymentBalancing.UPDATEDBY, Cur_DebtPaymentBalancing.AMOUNTDEBIT, Cur_DebtPaymentBalancing.AMOUNTCREDIT, Cur_DebtPaymentBalancing.C_GLITEM_ID, Cur_DebtPaymentBalancing.C_DEBT_PAYMENT_ID ) ; END LOOP; DELETE FROM C_DEBT_PAYMENT_BAL_REPLACE WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID; IF(v_Processed='Y') THEN UPDATE C_SETTLEMENT SET PROCESSED='Y' WHERE C_SETTLEMENT_ID= (SELECT C_SETTLEMENT_GENERATE_ID FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID=v_C_Debt_Payment_ID ) ; END IF; ELSE RAISE EXCEPTION '%', '@ProcessFailed@' ; --OBTG:-20000-- END IF; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; UDROP FUNCTION public.c_debt_payment_balancing_rep(p_pinstance_id character varying); publictadfalse23416125536637(c_debt_payment_change(character varying)FUNCTIONCREATE FUNCTION c_debt_payment_change(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_Aux NUMERIC; v_GetOutSettlement VARCHAR(60):='N'; --OBTG:VARCHAR2-- v_IsPaid CHAR(1) ; v_WriteOffAmt NUMERIC; FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, i.AD_USER_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='GetOutSettlement') THEN v_GetOutSettlement:=Cur_Parameter.P_String; RAISE NOTICE '%',' GetOutSettlement=' || v_GetOutSettlement ; ELSIF(Cur_Parameter.ParameterName='CheckIsPaid') THEN v_IsPaid:=Cur_Parameter.P_String; RAISE NOTICE '%',' IsPaid=' || v_IsPaid ; ELSIF(Cur_Parameter.ParameterName='NewWriteOffAmt') THEN v_WriteOffAmt:=Cur_Parameter.P_Number; RAISE NOTICE '%',' WriteOffAmt=' || v_WriteOffAmt ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; /* * Checking Restrictions */ v_ResultStr:='CheckingRestrictions'; SELECT COUNT(*) INTO v_Aux FROM C_Debt_Payment p WHERE p.C_Debt_Payment_ID=v_Record_ID AND C_DEBT_PAYMENT_STATUS(p.C_SETTLEMENT_CANCEL_ID, p.Cancel_Processed, p.Generate_Processed, p.IsPaid, p.IsValid, p.C_CashLine_ID, p.C_BankStatementLine_ID) IN('I', 'P') ; IF v_Aux=0 THEN RAISE EXCEPTION '%', '@DebtPaymentNotPending@'; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN IF(v_GetOutSettlement='Y') THEN UPDATE C_DEBT_PAYMENT SET UPDATED=TO_DATE(NOW()), UPDATEDBY=v_AD_User_ID, ISPAID='N', C_SETTLEMENT_CANCEL_ID=NULL, WRITEOFFAMT=0 WHERE C_Debt_Payment_ID=v_Record_ID; ELSE UPDATE C_DEBT_PAYMENT SET UPDATED=TO_DATE(NOW()), UPDATEDBY=v_AD_User_ID, -- ISPAID=v_IsPaid, WRITEOFFAMT=v_WriteOffAmt WHERE C_Debt_Payment_ID=v_Record_ID; END IF; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.c_debt_payment_change(p_pinstance_id character varying); publictadfalse23416125536639(c_debt_payment_create(character varying)FUNCTION &CREATE FUNCTION c_debt_payment_create(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; --Parameter variables v_C_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Amount NUMERIC; v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PaymentRule VARCHAR(60) ; --OBTG:VARCHAR2-- v_DatePlanned TIMESTAMP; v_IsReceipt VARCHAR(1) ; --OBTG:VARCHAR2-- v_Description VARCHAR(60) ; --OBTG:VARCHAR2-- v_Status VARCHAR(60); --OBTG:VARCHAR2-- --Local variables v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_settlementID VARCHAR(32):=NULL; --OBTG:varchar2-- v_SettlementDocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_SDocumentNo C_SETTLEMENT.DocumentNo%TYPE; v_debtPaymentID VARCHAR(32) ; --OBTG:varchar2-- v_CBankAccount_ID C_BankStatement.C_BankAccount_ID%TYPE; v_C_BankCurrency VARCHAR(32); --OBTG:VARCHAR2-- v_BS_Date TIMESTAMP; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, i.AD_USER_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='C_BPartner_ID') THEN v_C_BPartner_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BPartner_ID=' || v_C_BPartner_ID ; ELSIF(Cur_Parameter.ParameterName='Amount') THEN v_Amount:=Cur_Parameter.P_Number; RAISE NOTICE '%',' Amount=' || v_Amount ; ELSIF(Cur_Parameter.ParameterName='C_Currency_ID') THEN v_C_Currency_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_Currency_ID=' || v_C_Currency_ID ; ELSIF(Cur_Parameter.ParameterName='PaymentRule') THEN v_PaymentRule:=Cur_Parameter.P_String; RAISE NOTICE '%',' v_PaymentRule=' || v_PaymentRule ; ELSIF(Cur_Parameter.ParameterName='Dateplanned') THEN v_DatePlanned:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DatePlanned=' || v_DatePlanned ; ELSIF(Cur_Parameter.ParameterName='IsReceipt') THEN v_IsReceipt:=Cur_Parameter.p_String; RAISE NOTICE '%',' IsReceipt='||v_IsReceipt ; ELSIF(Cur_Parameter.ParameterName='Description') THEN v_Description:=Cur_Parameter.p_String; RAISE NOTICE '%',' Description='||v_Description ; ELSIF(Cur_Parameter.ParameterName='Status') THEN v_Status:=Cur_Parameter.p_String; RAISE NOTICE '%',' Status='||v_Status ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; --Read bank statement v_ResultStr:='ReadingBankStatementLine '||v_record_Id; SELECT L.AD_Client_ID, L.AD_Org_ID, B.C_BankAccount_ID INTO v_Client_ID, v_AD_Org_ID, v_CBankAccount_ID FROM C_BankStatementLine L, C_BankStatement B WHERE L.C_BankStatementLine_ID=v_Record_ID AND L.C_BankStatement_ID=B.C_BankStatement_ID; --Insert Settlement v_ResultStr:='InsertingSettlement'; v_SettlementDocType_ID:=Ad_Get_DocType(v_Client_ID, v_AD_Org_ID, TO_CHAR('STT')) ; SELECT * INTO v_settlementID FROM Ad_Sequence_Next('C_Settlement', v_Record_ID) ; SELECT * INTO v_SDocumentNo FROM Ad_Sequence_Doctype(v_SettlementDocType_ID, v_Record_ID, 'Y') ; IF(v_SDocumentNo IS NULL) THEN SELECT * INTO v_SDocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_Client_ID, 'Y') ; END IF; INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, PROCESSING, PROCESSED, POSTED, C_CURRENCY_ID, Description, ISGENERATED ) /*, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, CREATEFROM)*/ VALUES ( v_SettlementID, v_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, '*DPC*'||v_SDocumentNo, trunc(TO_DATE(NOW())), trunc(TO_DATE(NOW())), 'C', v_SettlementDocType_ID, 'N', 'N', 'N', v_C_Currency_ID, v_Description, 'Y' ) ; --Insert generated debt payment v_ResultStr:='InsertingGeneratedDebtPayement'; SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID) ; INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_INVOICE_ID, C_BPARTNER_ID, C_CURRENCY_ID, /* C_CASHLINE_ID, C_BANKACCOUNT_ID, C_CASHBOOK_ID,*/ PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, /*C_BANKSTATEMENTLINE_ID,*/ CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, STATUS_INITIAL ) VALUES ( v_debtPaymentID, v_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_IsReceipt, v_settlementID, v_Description, null, v_C_BPartner_ID, v_C_Currency_ID, v_PaymentRule, 'N', v_Amount*(-1), 0, v_DatePlanned, 'N', 'Y', 'N', 'N', 'Y', v_Status ) ; SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID) ; --We insert it in the positive side of the bank account INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_INVOICE_ID, C_BPARTNER_ID, C_CURRENCY_ID, /* C_CASHLINE_ID,*/ C_BANKACCOUNT_ID, /*C_CASHBOOK_ID,*/ PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, /*C_BANKSTATEMENTLINE_ID,*/ CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, STATUS_INITIAL ) VALUES ( v_debtPaymentID, v_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_IsReceipt, v_settlementID, v_Description, null, v_C_BPartner_ID, v_C_Currency_ID, v_CBankAccount_ID, v_PaymentRule, 'N', v_Amount, 0, v_DatePlanned, 'N', 'Y', 'N', 'N', 'Y', v_Status ) ; PERFORM C_SETTLEMENT_POST(null, v_settlementID); SELECT ba.C_Currency_ID, bs.STATEMENTDATE INTO v_C_BankCurrency, v_BS_Date FROM C_BankStatementLine bsl, C_BankStatement bs, C_BankAccount ba WHERE bsl.C_BankStatement_ID = bs.C_BankStatement_ID AND ba.C_BankAccount_ID = bs.C_BankAccount_ID AND bsl.C_BankStatementLine_ID = v_Record_ID; v_Amount := C_Currency_Convert(v_Amount, v_C_Currency_ID, v_C_BankCurrency, v_BS_Date, NULL, v_Client_ID, v_AD_Org_ID); UPDATE C_BankStatementLine SET C_Debt_Payment_ID=v_debtPaymentID, TrxAmt=((CASE v_IsReceipt WHEN 'Y' THEN 1 ELSE -1 END )) *v_Amount, StmtAmt=((CASE v_IsReceipt WHEN 'Y' THEN 1 ELSE -1 END)) *v_Amount, C_Currency_ID=v_C_BankCurrency, Description=v_Description, Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID, C_Debt_Payment_Create='Y' WHERE C_BankStatementLine_ID=v_Record_ID; -- v_Message := 'Sett: '||v_SettlementID||' debt: '||v_debtPaymentID; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.c_debt_payment_create(p_pinstance_id character varying); publictadfalse23416125536641&c_debt_payment_paid(character varying)FUNCTIONCREATE FUNCTION c_debt_payment_paid(p_debtpaymentid character varying) RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_status CHAR(1) ; v_paid CHAR(1):='N'; BEGIN SELECT C_DEBT_PAYMENT_STATUS(C_Settlement_Cancel_ID, Cancel_Processed, Generate_Processed, IsPaid, IsValid, C_CashLine_ID, C_BankStatementLine_ID) INTO v_status FROM C_Debt_Payment WHERE C_Debt_Payment_ID=p_DebtPaymentID; IF(v_status='C') THEN v_paid:='Y'; ELSIF(v_status='W') THEN SELECT MIN(C_Debt_Payment_Paid(C_Debt_Payment_ID)) INTO v_paid FROM C_Debt_Payment WHERE C_Settlement_Generate_ID = (SELECT C_Settlement_Cancel_ID FROM C_Debt_Payment WHERE C_Debt_Payment_ID=p_DebtPaymentID ); END IF; RETURN v_paid; END ; $$ LANGUAGE plpgsql; MDROP FUNCTION public.c_debt_payment_paid(p_debtpaymentid character varying); publictadfalse23416125536642zc_debt_payment_status(character varying, character, character, character, character, character varying, character varying)FUNCTIONCREATE FUNCTION c_debt_payment_status(p_settlement_cancel_id character varying, p_cancel_processed character, p_generate_processed character, p_ispaid character, p_isvalid character, p_c_cashline_id character varying, p_c_bankstatementline_id character varying) RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /******************************************************* Posibles status: I: Invalido P: Pendiente o no saldado W: Cancelado, no necesita conciliar A: Pendiente de conciliar o saldado C: Completado o conciliado *******************************************************/ v_Display CHAR(1) ; BEGIN IF(p_IsValid = 'N') THEN v_Display := 'I'; ELSIF(p_C_CashLine_ID IS NOT NULL OR p_C_BankStatementLine_ID IS NOT NULL) THEN v_Display := 'C'; ELSIF(p_Cancel_Processed = 'Y' AND p_IsPaid = 'N') THEN v_Display := 'W'; ELSIF(p_Cancel_Processed = 'Y' OR(p_Settlement_Cancel_ID IS NULL AND p_Generate_Processed = 'Y' AND p_IsPaid = 'Y')) THEN v_Display := 'A'; ELSE v_Display := 'P'; END IF; RETURN v_Display; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.c_debt_payment_status(p_settlement_cancel_id character varying, p_cancel_processed character, p_generate_processed character, p_ispaid character, p_isvalid character, p_c_cashline_id character varying, p_c_bankstatementline_id character varying); publictadfalse23416125536643)c_debt_payment_status0(character varying)FUNCTIONCREATE FUNCTION c_debt_payment_status0(p_debt_payment_id character varying) RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /******************************************************* Posibles status: I: Invalido P: Pendiente o no saldado W: Cancelado, no necesita conciliar A: Pendiente de conciliar o saldado C: Completado o conciliado *******************************************************/ v_Display CHAR(1); BEGIN SELECT C_DEBT_PAYMENT_STATUS(C_Settlement_Cancel_ID, Cancel_Processed, Generate_Processed, IsPaid, IsValid, C_CashLine_ID, C_BankStatementLine_ID) INTO v_Display FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID = p_Debt_Payment_ID ; RETURN v_Display; END ; $$ LANGUAGE plpgsql; RDROP FUNCTION public.c_debt_payment_status0(p_debt_payment_id character varying); publictadfalse234163125595423c_debt_payment_trg()FUNCTION[+CREATE FUNCTION c_debt_payment_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_IsProcessed VARCHAR(60); v_Canceled NUMERIC:=0; v_Generated NUMERIC:=0; v_Applied NUMERIC:=0; v_Settlement_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_S_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_S_Date TIMESTAMP; v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_multiplier NUMERIC:=1; v_Oldmultiplier NUMERIC:=1; v_Processed VARCHAR(60); v_Aux NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; /* Checking constraints */ IF (TG_OP = 'DELETE') THEN IF (old.isValid = 'Y') THEN SELECT COALESCE(MAX(Processed),'Y') INTO v_Processed FROM C_Invoice WHERE C_Invoice_ID = old.C_Invoice_ID; --dbms_output.put_line('inv:'||coalesce(:old.C_Invoice_ID,'null') ||' ord:'|| coalesce(:old.C_Order_ID,'null')); IF (v_Processed = 'Y' AND NOT (old.C_Invoice_ID IS NULL AND old.C_Order_ID IS NOT NULL)) THEN RAISE EXCEPTION '%', 'A valid Debt/Payment should not be deleted'; --OBTG:-20513-- END IF; END IF; ELSIF (TG_OP = 'INSERT') THEN IF (new.C_Settlement_Generate_ID IS NOT NULL) THEN SELECT processed INTO v_IsProcessed FROM C_Settlement WHERE C_Settlement_ID =new.C_Settlement_Generate_ID; IF v_IsProcessed='Y' THEN RAISE EXCEPTION '%', 'The settlement is processed'; --OBTG:-20510-- END IF; END IF; IF (COALESCE(NEW.IsAutomaticGenerated,'Y')='N' AND NEW.C_Order_ID IS NOT NULL) THEN -- Check if it is totally invoiced SELECT COALESCE(SUM(NOTINVOICED),0) INTO v_Aux FROM (SELECT (O.QTYORDERED- COALESCE(LL.QTYINVOICED,0)) AS NOTINVOICED FROM C_ORDERLINE O LEFT JOIN (SELECT IL.C_INVOICELINE_ID, IL.QTYINVOICED, IL.C_ORDERLINE_ID FROM C_INVOICELINE IL, C_INVOICE I WHERE IL.C_INVOICE_ID = I.C_INVOICE_ID AND I.PROCESSED='Y') LL ON LL.C_ORDERLINE_ID = O.C_ORDERLINE_ID WHERE O.C_ORDER_ID = NEW.C_Order_ID) AAA; IF v_Aux = 0 THEN select count(*) into v_Aux from c_orderline where c_order_id = NEW.C_Order_ID; if v_Aux>0 then RAISE EXCEPTION '%', '@OrderCompletelyInvoiced@'; --OBTG:-20000-- end if; END IF; -- If Order is processed, DP should be valid SELECT PROCESSED INTO v_IsProcessed FROM C_ORDER WHERE C_ORDER_ID = NEW.C_Order_ID; IF v_IsProcessed = 'Y' THEN NEW.IsValid:='Y'; END IF; END IF; IF (COALESCE(new.IsAutomaticGenerated,'Y')='N' AND new.C_Invoice_ID IS NOT NULL) THEN SELECT Processed INTO v_IsProcessed FROM C_Invoice WHERE C_Invoice_ID = new.C_Invoice_ID; IF v_IsProcessed = 'Y' THEN RAISE EXCEPTION '%', 'The invoice is processed'; --OBTG:-20508-- END IF; END IF; new.Status := new.Status_Initial; ELSIF (TG_OP = 'UPDATE') THEN IF (old.IsValid = 'Y' AND ((old.IsActive <> new.IsActive) OR (old.IsReceipt<>new.IsReceipt) OR (COALESCE(old.C_Settlement_Generate_ID,'0')<>COALESCE(new.C_Settlement_Generate_ID,'0')) -- OR (COALESCE(:old.C_Invoice_ID,'0')<>COALESCE(:new.C_Invoice_ID,'0')) OR (COALESCE(old.C_BPartner_ID,'0')<>COALESCE(new.C_BPartner_ID,'0')) OR (old.C_Currency_ID<>new.C_Currency_ID) OR (old.Amount<>new.Amount) OR (old.IsManual<>new.IsManual))) THEN RAISE EXCEPTION '%', 'A valid Debt/Payment should not be modified'; --OBTG:-20501-- END IF; IF (C_DEBT_PAYMENT_STATUS(old.C_Settlement_Cancel_ID,old.Cancel_Processed,old.Generate_Processed, old.IsPaid,old.IsValid,old.C_CashLine_ID,old.C_BankStatementLine_ID) NOT IN ('P','I') AND ((COALESCE(old.C_BankAccount_ID,'0')<>COALESCE(new.C_BankAccount_ID,'0')) OR (COALESCE(old.C_CashBook_ID,'0')<>COALESCE(new.C_CashBook_ID,'0')) OR (old.PaymentRule<>new.PaymentRule) OR (old.DatePlanned<>new.DatePlanned))) THEN RAISE EXCEPTION '%', 'This Debt/Payment can not be modified'; --OBTG:-20511-- END IF; IF (new.C_Settlement_Cancel_ID IS NOT NULL) THEN IF (old.C_Settlement_Cancel_ID<>new.C_Settlement_Cancel_ID) THEN RAISE EXCEPTION '%', 'The Debt/Payment is already in a Settlement Cancel'; --OBTG:-20512-- END IF; IF ((COALESCE(old.C_Settlement_Cancel_ID,'0')<>COALESCE(new.C_Settlement_Cancel_ID,'0')) OR (old.IsPaid<>new.IsPaid) OR (old.WriteOffAmt<>new.WriteOffAmt)) THEN SELECT processed INTO v_IsProcessed FROM C_Settlement WHERE C_Settlement_ID =new.C_Settlement_Cancel_ID; IF v_IsProcessed='Y' THEN RAISE EXCEPTION '%', 'The settlement is processed'; --OBTG:-20510-- END IF; END IF; END IF; IF (new.C_Settlement_Generate_ID IS NOT NULL) THEN IF ((old.C_GLItem_ID<>new.C_GLItem_ID) OR (old.IsDirectPosting<>new.IsDirectPosting)) THEN SELECT processed INTO v_IsProcessed FROM C_Settlement WHERE C_Settlement_ID =new.C_Settlement_Generate_ID; IF v_IsProcessed='Y' THEN RAISE EXCEPTION '%', 'The settlement is processed'; --OBTG:-20510-- END IF; END IF; END IF; END IF; /** * Calculate amounts for Settlements */ IF (TG_OP = 'DELETE') THEN IF (old.C_Settlement_Generate_ID IS NOT NULL AND old.Generate_Processed = 'N') THEN IF (old.IsReceipt = 'N') THEN v_multiplier := -1; END IF; v_Generated := (- COALESCE(old.Amount, 0))*v_multiplier; IF (old.IsPaid = 'Y') THEN v_Applied := (COALESCE(old.Amount, 0) - COALESCE(old.WriteOffAmt, 0))*v_multiplier; END IF; v_Settlement_ID := old.C_Settlement_Generate_ID; v_Currency_ID := old.C_Currency_ID; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF (new.Ad_Org_Id!=old.ad_Org_ID) and (NEW.C_Invoice_ID is not null) THEN SELECT Processed INTO v_IsProcessed FROM C_Invoice WHERE C_Invoice_ID = new.C_Invoice_ID; IF v_IsProcessed = 'Y' THEN RAISE EXCEPTION '%', 'The invoice is processed'; --OBTG:-20508-- END IF; END IF; IF (old.C_Settlement_Generate_ID IS NOT NULL AND old.Generate_Processed = 'N' AND new.Generate_Processed = 'N') THEN IF (old.IsReceipt = 'N') THEN v_Oldmultiplier := -1; END IF; IF (new.IsReceipt = 'N') THEN v_multiplier := -1; END IF; v_Generated := v_Generated - (COALESCE(old.Amount, 0)*v_Oldmultiplier); IF (old.IsPaid = 'Y') THEN v_Applied := COALESCE(v_Applied, 0) - (COALESCE(old.Amount, 0) - COALESCE(old.WriteOffAmt, 0))*v_Oldmultiplier; END IF; v_Generated := v_Generated + (COALESCE(new.Amount, 0)*v_multiplier); IF (new.IsPaid = 'Y') THEN v_Applied := COALESCE(v_Applied,0) + (COALESCE(new.Amount,0) - COALESCE(new.WriteOffAmt,0))*v_multiplier; END IF; v_Settlement_ID := new.C_Settlement_Generate_ID; v_Currency_ID := new.C_Currency_ID; END IF; IF (old.C_Settlement_Cancel_ID IS NOT NULL AND old.Cancel_Processed = 'N' AND new.Cancel_Processed = 'N') THEN IF (old.IsReceipt = 'N') THEN v_multiplier := -1; END IF; IF (old.IsPaid = 'Y') THEN v_Applied := COALESCE(v_Applied,0) - (COALESCE(old.Amount,0) - COALESCE(old.WriteOffAmt,0))*v_multiplier; ELSE v_Canceled := COALESCE(v_Canceled,0) - (COALESCE(old.Amount,0) - COALESCE(old.WriteOffAmt,0))*v_multiplier; END IF; v_Settlement_ID := old.C_Settlement_Cancel_ID; v_Currency_ID := old.C_Currency_ID; END IF; IF (new.C_Settlement_Cancel_ID IS NOT NULL AND old.Cancel_Processed = 'N' AND new.Cancel_Processed = 'N') THEN IF (new.IsReceipt = 'N') THEN v_multiplier := -1; END IF; IF (new.IsPaid = 'Y') THEN v_Applied := COALESCE(v_Applied,0) + (COALESCE(new.Amount,0) - COALESCE(new.WriteOffAmt,0))*v_multiplier; ELSE v_Canceled := COALESCE(v_Canceled,0) + (COALESCE(new.Amount,0) - COALESCE(new.WriteOffAmt,0))*v_multiplier; END IF; v_Settlement_ID := new.C_Settlement_Cancel_ID; v_Currency_ID := new.C_Currency_ID; END IF; END IF; IF (TG_OP = 'INSERT') THEN IF (new.C_Settlement_Generate_ID IS NOT NULL AND new.Generate_Processed = 'N') THEN IF (new.IsReceipt = 'N') THEN v_multiplier := -1; END IF; v_Generated := COALESCE(new.Amount,0)*v_multiplier; IF (new.IsPaid = 'Y') THEN v_Applied := COALESCE(v_Applied,0) + (COALESCE(new.Amount,0) - COALESCE(new.WriteOffAmt,0))*v_multiplier; END IF; v_Settlement_ID := new.C_Settlement_Generate_ID; v_Currency_ID := new.C_Currency_ID; END IF; END IF; IF (v_Settlement_ID IS NOT NULL) THEN SELECT C_Currency_ID, DateTrx, AD_Client_ID, AD_Org_ID INTO v_S_Currency_ID, v_S_Date, v_Client_ID, v_Org_ID FROM C_Settlement WHERE C_Settlement_ID = v_Settlement_ID; IF (v_Currency_ID <> v_S_Currency_ID) THEN v_Canceled :=C_Currency_Convert(v_Canceled, v_Currency_ID, v_S_Currency_ID, v_S_Date, null, v_Client_ID, v_Org_ID); v_Generated := C_Currency_Convert(v_Generated, v_Currency_ID, v_S_Currency_ID, v_S_Date, null, v_Client_ID, v_Org_ID); v_Applied :=C_Currency_Convert(v_Applied, v_Currency_ID, v_S_Currency_ID, v_S_Date, null, v_Client_ID, v_Org_ID); END IF; -- Update header UPDATE C_Settlement SET CanceledNotChargeAmt = COALESCE(CanceledNotChargeAmt, 0) + COALESCE(v_Canceled, 0), GeneratedAmt = COALESCE(GeneratedAmt, 0) + COALESCE(v_Generated, 0), ChargedAmt = COALESCE(ChargedAmt, 0) + COALESCE(v_Applied, 0) WHERE C_Settlement_ID = v_Settlement_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_debt_payment_trg(); publictadfalse23416125536646c_divide(numeric, numeric)FUNCTIONCREATE FUNCTION c_divide(p_dividendo numeric, p_divisor numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN RETURN(p_dividendo/p_divisor) ; EXCEPTION WHEN OTHERS THEN RETURN(NULL) ; END ; $$ LANGUAGE plpgsql; GDROP FUNCTION public.c_divide(p_dividendo numeric, p_divisor numeric); publictadfalse234164125595426c_doctype_trg()FUNCTION CREATE FUNCTION c_doctype_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert C_DocType Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_DocType_Trl ( C_DocType_Trl_ID, C_DocType_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, PrintName, DocumentNote, IsTranslated ) SELECT get_uuid(), new.C_DocType_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.PrintName, new.DocumentNote, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting -- C_DocType update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF(COALESCE(old.PrintName, '.') <> COALESCE(NEW.PrintName, '.') OR COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.DocumentNote, '.') <> COALESCE(NEW.DocumentNote, '.')) THEN UPDATE C_DocType_Trl SET IsTranslated='N', Name=new.Name, PrintName=new.PrintName, DocumentNote=new.DocumentNote, Updated=TO_DATE(NOW()) WHERE C_DocType_ID=new.C_DocType_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; &DROP FUNCTION public.c_doctype_trg(); publictadfalse234167125595432c_dp_management_chk_restr_trg()FUNCTION CREATE FUNCTION c_dp_management_chk_restr_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('01-01-1900','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF ( OLD.processed = 'Y' AND ( (COALESCE (OLD.documentno, '.') <> COALESCE (NEW.documentno, '.') ) OR (COALESCE (OLD.c_doctype_id, '0') <> COALESCE (NEW.c_doctype_id, '0') ) OR (COALESCE (OLD.datetrx, v_DateNull) <> COALESCE (NEW.datetrx, v_DateNull) ) OR (COALESCE (OLD.c_currency_id, '0') <> COALESCE (NEW.c_currency_id, '0') ) OR (COALESCE (OLD.user1_id, '0') <> COALESCE (NEW.user1_id, '0')) OR (COALESCE (OLD.user2_id, '0') <> COALESCE (NEW.user2_id, '0')) OR (COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR (COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) ) ) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; IF ( OLD.posted = 'Y' AND ( (COALESCE (OLD.dateacct, v_DateNull) <> COALESCE (NEW.dateacct, v_DateNull) ) OR (COALESCE (OLD.c_campaign_id, '0') <> COALESCE (NEW.c_campaign_id, '0') ) OR (COALESCE (OLD.c_project_id, '0') <> COALESCE (NEW.c_project_id, '0') ) OR (COALESCE (OLD.c_activity_id, '0') <> COALESCE (NEW.c_activity_id, '0') ) ) ) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF (TG_OP = 'INSERT') THEN IF (NEW.processed = 'Y') THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF (TG_OP = 'DELETE') THEN IF (OLD.processed = 'Y') THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 6DROP FUNCTION public.c_dp_management_chk_restr_trg(); publictadfalse23416125536649:c_dp_management_post(character varying, character varying)FUNCTION<:CREATE FUNCTION c_dp_management_post(p_pinstance_id character varying, p_dp_management_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Processed VARCHAR(60) ; --OBTG:VARCHAR2-- v_Posted VARCHAR(60) ; --OBTG:VARCHAR2-- v_Currency VARCHAR(32); --OBTG:VARCHAR2-- v_Date TIMESTAMP; v_CashBook_ISO_Code VARCHAR(10) ; v_Record_Description VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Debt_Payment_ID VARCHAR(32) ; --OBTG:VARCHAR2-- --Addesd by PSarobe 12062007 v_line NUMERIC; v_DpManagementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Remittanceline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_documentno_Settlement VARCHAR(40); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_Cancel_Processed CHAR(1); v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_Bankstatementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ispaid CHAR(1); v_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- v_is_included NUMERIC:=0; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_Aux NUMERIC; v_CanceledNotChargeAmt NUMERIC:=0; v_GeneratedAmt NUMERIC:=0; v_ChargedAmt NUMERIC:=0; v_ForcedOrg NUMERIC; v_ManualAmt NUMERIC:=0; Cur_Lines RECORD; Cur_Line_DP RECORD; Cur_DPDebtpayment RECORD; FINISH_PROCESS BOOLEAN:=false; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; ELSE RAISE NOTICE '%','--<>' ; v_Record_ID:=p_DP_Management_ID; END IF; BEGIN --BODY SELECT UpdatedBy, AD_Client_ID, Processed, Posted, AD_Org_ID, DateAcct, C_DocType_ID INTO v_AD_User_ID, v_AD_Client_ID, v_processed, v_posted, v_AD_Org_ID, v_Date, v_DocType_ID FROM c_DP_Management WHERE c_DP_Management_ID=v_Record_ID; --Check DP status, this is used for process and unprocess -- Modified by PSarobe 12062007 SELECT COUNT(*), MAX(ml.C_DP_ManagementLine_Id) INTO v_Aux, v_DpManagementline_ID FROM C_DP_ManagementLine ml, C_DEBT_PAYMENT dp WHERE C_DP_Management_ID=v_Record_ID AND ml.c_debt_payment_id=dp.c_debt_payment_id AND C_Debt_Payment_Status(dp.C_SETTLEMENT_CANCEL_ID, dp.CANCEL_PROCESSED, dp.GENERATE_PROCESSED, dp.IsPaid, dp.Isvalid, dp.C_CASHLINE_ID, dp.C_BANKSTATEMENTLINE_ID)!='P'; IF v_Aux!=0 THEN SELECT ml.line, dp.c_Bankstatementline_Id, dp.c_cashline_id, dp.c_settlement_cancel_id, dp.ispaid, dp.cancel_processed INTO v_line, v_Bankstatementline_ID, v_CashLine_ID, v_Settlement_Cancel_ID, v_ispaid, v_Cancel_Processed FROM C_DP_ManagementLine ml, C_DEBT_PAYMENT dp WHERE ml.c_debt_payment_id=dp.c_debt_payment_id AND ml.C_DP_ManagementLine_ID = v_DpManagementline_ID; IF v_Bankstatementline_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_BANKSTATEMENTLINE_ID = v_Bankstatementline_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||' '||'@ConciliatedDebtPaymentBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_CashLine_ID IS NOT NULL THEN SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||' '||'@ConciliatedDebtPaymentCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; IF v_Cancel_Processed='Y' AND v_ispaid='N' THEN SELECT documentno, datetrx INTO v_documentno_Settlement, v_dateSettlement FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = v_Settlement_Cancel_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||' '||'@ConciliatedDebtPaymentCancel@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF; IF(v_Processed='Y') and (not FINISH_PROCESS) THEN --Checking restrictions for unprocessing IF v_Posted='Y' THEN RAISE EXCEPTION '%', '@DPManagementDocumentPosted@' ; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN SELECT count(*), MAX(ml.line) INTO v_Aux, v_line FROM C_DP_ManagementLine ml, C_Debt_Payment dp WHERE ml.C_DP_Management_ID=v_Record_ID AND ml.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND coalesce(dp.Status, 'DE')!=coalesce(ml.Status_To, 'DE') ; IF v_Aux!=0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@WrongStatusToFrom@' ; --OBTG:-20000-- END IF; END IF ;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN --unprocessing... UPDATE C_DP_Management SET Processed='N', Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE C_DP_Management_ID=v_Record_ID; for Cur_Lines in (SELECT * FROM C_DP_ManagementLine WHERE C_DP_Management_ID=v_Record_ID) loop UPDATE C_Debt_Payment SET status=Cur_Lines.Status_From, updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE C_Debt_Payment_ID=Cur_Lines.C_Debt_Payment_ID; end loop; v_Message:='@UnProcessedDPManagement@'; FINISH_PROCESS:=true; END IF;--FINISH_PROCESS END IF; /* * Checking Restrictions */ IF(NOT FINISH_PROCESS) THEN SELECT count(*), MAX(ml.line) INTO v_Aux, v_line FROM C_DP_ManagementLine ml, C_Debt_Payment dp WHERE ml.C_DP_Management_ID=v_Record_ID AND ml.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND coalesce(dp.Status, 'DE')!=coalesce(ml.Status_From, 'DE') ; IF v_Aux!=0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@WrongStatusToFrom@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT count(*) INTO v_Aux FROM C_DP_Management m, C_DocType WHERE C_DocType.DocBaseType IN ('DPM') AND AD_ISORGINCLUDED(M.AD_Org_ID,C_DocType.AD_Org_ID, M.AD_Client_ID) <> -1 AND M.C_DOCTYPE_ID = C_DOCTYPE.C_DOCTYPE_ID AND M.C_DP_MANAGEMENT_ID=V_RECORD_ID; if v_Aux=0 then RAISE EXCEPTION '%', '@NotCorrectOrgDoctypeDPManagement@' ; --OBTG:-20000-- end if; END IF;--FINISH_PROCESS /*To be deprecated. We are checking this restriction at the beginning. To be fixed IF(NOT FINISH_PROCESS) THEN for Cur_Line_DP in (SELECT dp.* FROM C_DP_ManagementLine ml, C_Debt_Payment dp WHERE ml.C_DP_Management_ID=v_Record_ID AND dp.C_Debt_Payment_ID=ml.C_Debt_Payment_ID ) loop if C_Debt_Payment_Status(Cur_Line_DP.C_SETTLEMENT_CANCEL_ID, Cur_Line_DP.CANCEL_PROCESSED, Cur_Line_DP.GENERATE_PROCESSED, Cur_Line_DP.ISPAID, Cur_Line_DP.ISVALID, Cur_Line_DP.C_CASHLINE_ID, Cur_Line_DP.C_BANKSTATEMENTLINE_ID)!='P'then v_Message:='@WrongDPStatus@'; v_Result:=0; FINISH_PROCESS:=true; EXIT; end if; end loop; END IF;*/ IF(NOT FINISH_PROCESS) THEN SELECT count(*), MAX(C_Debt_Payment_ID) INTO v_Aux, v_Debt_Payment_ID FROM (SELECT C_Debt_Payment_ID FROM C_DP_ManagementLine WHERE C_DP_Management_ID=v_Record_ID GROUP BY C_Debt_Payment_ID HAVING count(*)>1 ) A; IF v_Aux!=0 THEN FOR Cur_DPDebtpayment IN (SELECT line FROM C_DP_ManagementLine WHERE C_DP_ManagementLine.C_DP_Management_id=v_Record_ID AND C_DP_ManagementLine.c_debt_payment_id=v_Debt_Payment_ID) LOOP v_Message:=v_Message||Cur_DPDebtpayment.line||', '; END LOOP; RAISE EXCEPTION '%', '@Inlines@'||v_Message||' '||'@Samedebtpayment@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT count(*), MAX(ml.line) INTO v_Aux, v_line FROM C_DP_ManagementLine ml, C_DP_Management m WHERE ml.C_DP_Management_ID=m.C_DP_Management_ID AND m.C_DP_Management_ID=v_Record_ID AND exists (SELECT 1 FROM C_DP_ManagementLine ml1, C_DP_Management m1 WHERE m1.C_DP_Management_ID=ml1.C_DP_Management_ID AND ml1.C_Debt_Payment_ID=ml.C_Debt_Payment_ID AND m1.processed='Y' AND m1.DateAcct>m.DateAcct ) ; if v_Aux!=0 then RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@LaterChangeStatus@' ; --OBTG:-20000-- end if; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_DP_MANAGEMENT, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_DP_MANAGEMENT.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_DP_MANAGEMENT.C_DP_MANAGEMENT_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_DP_MANAGEMENT', 'C_DP_MANAGEMENTLINE', v_Record_ID, 'C_DP_MANAGEMENT_ID', 'C_DP_MANAGEMENT_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOC_PAYMENTS('C_DP_MANAGEMENT', 'C_DP_MANAGEMENTLINE', v_Record_ID, 'C_DP_MANAGEMENT_ID', 'C_DP_MANAGEMENT_ID', 'C_DEBT_PAYMENT_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@PaymentsAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('C_DP_MANAGEMENT', v_Record_ID, 'C_DP_MANAGEMENT_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_Date, NULL, v_DocType_ID) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; END IF;--FINISH_PROCESS --Processing... IF(NOT FINISH_PROCESS) THEN UPDATE C_DP_Management SET Processed='Y', Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE C_DP_Management_ID=v_Record_ID; for Cur_Lines in (SELECT * FROM C_DP_ManagementLine WHERE C_DP_Management_ID=v_Record_ID) loop UPDATE C_Debt_Payment SET status=coalesce(Cur_Lines.Status_To, 'DE'), updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE C_Debt_Payment_ID=Cur_Lines.C_Debt_Payment_ID; end loop; END IF;--FINISH_PROCESS ---- <> -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','--<> ' || v_Message ; IF(v_Result=0) THEN RAISE EXCEPTION '%', v_Message ; --OBTG:-20100-- END IF; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $$ LANGUAGE plpgsql; sDROP FUNCTION public.c_dp_management_post(p_pinstance_id character varying, p_dp_management_id character varying); publictadfalse23416125536651'c_dp_management_post(character varying)FUNCTIONCREATE FUNCTION c_dp_management_post(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_DP_MANAGEMENT_POST($1, NULL); END ; $_$ LANGUAGE plpgsql; MDROP FUNCTION public.c_dp_management_post(p_pinstance_id character varying); publictadfalse234166125595430c_dp_managementline_trg()FUNCTIONCREATE FUNCTION c_dp_managementline_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'INSERT') THEN IF (NEW.status_from IS NULL) THEN BEGIN SELECT status INTO NEW.status_from FROM c_debt_payment WHERE c_debt_payment_id = NEW.c_debt_payment_id; EXCEPTION WHEN DATA_EXCEPTION THEN NEW.status_from := 'DE'; END; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN OTHERS THEN NULL; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 0DROP FUNCTION public.c_dp_managementline_trg(); publictadfalse234165125595428 c_dpmline_chk_restrictions_trg()FUNCTIONg CREATE FUNCTION c_dpmline_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_C_dp_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_DP_ID:=NEW.C_DP_MANAGEMENT_ID; ELSE v_C_DP_ID:=OLD.C_DP_MANAGEMENT_ID; END IF; SELECT PROCESSED INTO v_Processed FROM C_DP_Management WHERE C_DP_Management_ID=v_C_DP_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND ((COALESCE(OLD.LINE, 0) <> COALESCE(NEW.LINE, 0)) OR(COALESCE(OLD.C_DEBT_PAYMENT_ID, '0') <> COALESCE(NEW.C_DEBT_PAYMENT_ID, '0')) OR(COALESCE(OLD.STATUS_FROM, '0') <> COALESCE(NEW.STATUS_FROM, '0')) OR(COALESCE(OLD.STATUS_TO, '0') <> COALESCE(NEW.STATUS_TO, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 7DROP FUNCTION public.c_dpmline_chk_restrictions_trg(); publictadfalse234161255366549c_elementvalue_copy(character varying, character varying)FUNCTION CREATE FUNCTION c_elementvalue_copy(p_source_element_id character varying, p_target_element_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Copies CoA * All element values of p_Source_Element_ID to p_Target_Element_ID */ --TYPE RECORD IS REFCURSOR; Cur_ElementValue RECORD; v_xAD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xAD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xUpdated TIMESTAMP; v_xUpdatedBy VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Get target base info SELECT AD_Client_ID, AD_Org_ID, Updated, UpdatedBy INTO v_xAD_Client_ID, v_xAD_Org_ID, v_xUpdated, v_xUpdatedBy FROM C_Element WHERE C_Element_ID=p_Target_Element_ID; FOR Cur_ElementValue IN (SELECT * FROM C_ElementValue WHERE C_Element_ID=p_Source_Element_ID AND IsActive='Y' ) LOOP SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_ElementValue', p_Target_Element_ID) ; INSERT INTO C_ElementValue ( C_ElementValue_ID, C_Element_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Value, Name, Description, AccountType, AccountSign, IsDocControlled, IsSummary, ValidFrom, ValidTo, PostActual, PostBudget, PostEncumbrance, PostStatistical, IsForeignCurrency, C_Currency_ID ) VALUES ( v_NextNo, p_Target_Element_ID, v_xAD_Client_ID, v_xAD_Org_ID, 'Y', v_xUpdated, v_xUpdatedBy, v_xUpdated, v_xUpdatedBy, Cur_ElementValue.Value, Cur_ElementValue.Name, Cur_ElementValue.Description, Cur_ElementValue.AccountType, Cur_ElementValue.AccountSign, Cur_ElementValue.IsDocControlled, Cur_ElementValue.IsSummary, Cur_ElementValue.ValidFrom, Cur_ElementValue.ValidTo, Cur_ElementValue.PostActual, Cur_ElementValue.PostBudget, Cur_ElementValue.PostEncumbrance, Cur_ElementValue.PostStatistical, Cur_ElementValue.IsForeignCurrency, Cur_ElementValue.C_Currency_ID ) ; END LOOP; -- Commented by cromero 19102006 -- COMMIT; END ; $$ LANGUAGE plpgsql; xDROP FUNCTION public.c_elementvalue_copy(p_source_element_id character varying, p_target_element_id character varying); publictadfalse234168125595434c_elementvalue_trg()FUNCTIONCREATE FUNCTION c_elementvalue_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_xTree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xParent_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_orgName VARCHAR(32); --OBTG:VARCHAR2-- v_Cont NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert C_ElementValue Trigger -- for Translation -- and TreeNode IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_ElementValue_Trl ( C_ElementValue_Trl_ID, C_ElementValue_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, IsTranslated ) SELECT get_uuid(), new.C_ElementValue_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; -- Create TreeNode -- -- get AD_Tree_ID + ParentID SELECT e.AD_Tree_ID, n.Node_ID INTO v_xTree_ID, v_xParent_ID FROM C_Element e, AD_TreeNode n WHERE e.AD_Tree_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND e.C_Element_ID=new.C_Element_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||' Node='||:new.C_ElementValue_ID||' Parent='||v_xParent_ID); -- Insert into TreeNode INSERT INTO AD_TreeNode ( AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, v_xTree_ID, new.C_ElementValue_ID, v_xParent_ID,( CASE new.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; -- Summary Nodes first END IF; -- Inserting -- C_ElementValue update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') THEN UPDATE C_ElementValue_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_ElementValue_ID=new.C_ElementValue_ID; /** Mutating Trigger -- Update Valid Combination Description UPDATE C_ValidCombination SET Updated=TO_DATE(NOW()) WHERE Account_ID=new.C_ElementValue_ID OR User1_ID=new.C_ElementValue_ID OR User2_ID=new.C_ElementValue_ID; **/ END IF; SELECT COUNT(1) INTO v_Cont FROM C_VALIDCOMBINATION WHERE ACCOUNT_ID=NEW.C_ELEMENTVALUE_ID; IF (v_Cont>0) THEN SELECT name INTO v_orgName FROM ad_org WHERE ad_org_id in (SELECT ad_org_id FROM c_validcombination WHERE account_id=new.C_ElementValue_ID); UPDATE C_ValidCombination SET Updated=TO_DATE(NOW()),combination=v_orgName||'-'||new.VALUE||'-_-_-_',description=v_orgName||'-'||new.DESCRIPTION||'-_-_-_' WHERE Account_ID=new.C_ElementValue_ID OR User1_ID=new.C_ElementValue_ID OR User2_ID=new.C_ElementValue_ID; END IF; UPDATE Fact_Acct SET AcctValue=new.VALUE,AcctDescription=new.DESCRIPTION WHERE Account_ID=new.C_ElementValue_ID; END IF; -- Updating IF TG_OP = 'DELETE' THEN -- Delete TreeNode -- -- get AD_Tree_ID SELECT e.AD_Tree_ID INTO v_xTree_ID FROM C_Element e WHERE e.C_Element_ID=old.C_Element_ID; DELETE FROM AD_TREENODE WHERE AD_CLIENT_ID=old.AD_Client_ID AND AD_Tree_ID=v_xTree_ID AND Node_ID=old.C_ElementValue_ID; END IF; -- Deleting IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'C_ElementValue InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20013-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_elementvalue_trg(); publictadfalse23416125536657*c_generatepofromproject(character varying)FUNCTION>CREATE FUNCTION c_generatepofromproject(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_C_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_OrderLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_DOCTYPE_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(30) ; --OBTG:NVARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get PARAMETERS v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, i.AD_Client_ID, i.AD_Org_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.P_Date_To FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; DECLARE v_BPartner_Location_ID VARCHAR(32); --OBTG:VARCHAR2-- v_BillTo_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Size NUMERIC; v_UOM VARCHAR(32); --OBTG:VARCHAR2-- v_PriceStd NUMERIC; v_PriceList NUMERIC; v_PriceLimit NUMERIC; v_C_UOM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PriceActual NUMERIC; v_Discount NUMERIC; v_Tax_ID VARCHAR(32); --OBTG:VARCHAR2-- v_M_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_SO RECORD; Cur_SOLINES RECORD; BEGIN v_ResultStr:='StartLoop'; FOR Cur_SO IN (SELECT P.C_PROJECT_ID, P.PROJECTSTATUS, V.AD_CLIENT_ID, V.AD_ORG_ID, V.C_BPARTNER_ID, V.C_INCOTERMS_ID, V.C_PROJECT_VENDOR_ID, V.INCOTERMS_DESCRIPTION, V.M_PRICELIST_VERSION_ID, V.M_PRICELIST_ID, P.C_CAMPAIGN_ID, PL.C_CURRENCY_ID, P.C_CURRENCY_ID AS PROJCURRENCY, BP.PAYMENTRULEPO AS PAYMENTRULE, BP.PO_PAYMENTTERM_ID AS C_PAYMENTTERM_ID, P.M_WAREHOUSE_ID, P.POREFERENCE, P.SALESREP_ID, P.CREATETEMPPRICELIST, P.DESCRIPTION FROM C_PROJECT P, C_PROJECT_VENDOR V, C_BPARTNER BP, M_PRICELIST PL WHERE P.C_PROJECT_ID=V.C_PROJECT_ID AND V.C_BPARTNER_ID=BP.C_BPARTNER_ID AND V.M_PRICELIST_ID=PL.M_PRICELIST_ID AND V.ISACTIVE='Y' AND V.C_PROJECT_VENDOR_ID=v_Record_ID ) LOOP -- Check that we have some restrictions v_ResultStr:='CheckRestriction'; IF(Cur_SO.PROJECTSTATUS IS NULL OR Cur_SO.PROJECTSTATUS<>'OR') THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'||'. '||' @ChangeToOrder@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_BPARTNER_ID IS NULL THEN RAISE EXCEPTION '%', '@NoprojectBusinesspartner@'; --OBTG:-20000-- ELSIF Cur_SO.C_PAYMENTTERM_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PaymenttermNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.M_PRICELIST_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PricelistNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_CURRENCY_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectCurrencyNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.M_WAREHOUSE_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectWarehouseNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.SALESREP_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectSalesRepNotFound@'||'.'; --OBTG:-20000-- END IF; v_C_DOCTYPE_ID:=Ad_Get_DocType(Cur_SO.AD_Client_ID, Cur_SO.AD_Org_ID, 'POO') ; SELECT * INTO v_DocumentNo FROM AD_Sequence_DocType(v_C_DOCTYPE_ID, Cur_SO.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM AD_Sequence_Doc('DocumentNo_C_Order', Cur_SO.AD_Client_ID, 'Y') ; END IF; -- Get Business Partner Ship Location v_BPartner_Location_ID := C_GetBPLocationID(Cur_SO.C_BPartner_ID, 'S') ; IF (v_BPartner_Location_ID IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @ShiptoNotdefined@'||'.'; --OBTG:-20000-- END IF; -- Get Business Partner Bill Location v_Billto_ID := C_GetBPLocationID(Cur_SO.C_BPartner_ID, 'B') ; IF (v_Billto_ID IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @BillToNotdefined@'||'.'; --OBTG:-20000-- END IF; -- Get next C_Order_ID SELECT * INTO v_C_Order_ID FROM Ad_Sequence_Next('C_Order', Cur_SO.AD_CLIENT_ID) ; v_ResultStr:='C_ORDER_ID - ' || v_C_Order_ID; INSERT INTO C_ORDER ( C_ORDER_ID, AD_CLIENT_ID, AD_ORG_ID, CREATEDBY, UPDATEDBY, ISSOTRX, DOCUMENTNO, DOCSTATUS, DOCACTION, C_DOCTYPE_ID, C_DOCTYPETARGET_ID, DATEORDERED, DATEACCT, C_BPARTNER_ID, C_BPARTNER_LOCATION_ID, ISDISCOUNTPRINTED, C_CURRENCY_ID, PAYMENTRULE, C_PAYMENTTERM_ID, INVOICERULE, DELIVERYRULE, FREIGHTCOSTRULE, DELIVERYVIARULE, PRIORITYRULE, TOTALLINES, GRANDTOTAL, M_WAREHOUSE_ID, M_PRICELIST_ID, ISTAXINCLUDED, POSTED, PROCESSING, SALESREP_ID, BILLTO_ID, POREFERENCE, C_CAMPAIGN_ID, C_PROJECT_ID, AD_USER_ID, COPYFROM, C_INCOTERMS_ID, INCOTERMSDESCRIPTION, DATEPROMISED, DESCRIPTION ) VALUES ( v_C_Order_ID, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID, v_AD_User_ID, v_AD_User_ID, 'N', v_DocumentNo, 'DR', 'CO', '0', v_C_DOCTYPE_ID, TRUNC(TO_DATE(NOW()), 'DD'), TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.C_BPARTNER_ID, v_BPartner_Location_ID, 'N', Cur_SO.C_CURRENCY_ID, COALESCE(Cur_SO.PAYMENTRULE, 'P'), Cur_SO.C_PAYMENTTERM_ID, 'D', 'A', 'I', 'D', '5', 0, 0, Cur_SO.M_WAREHOUSE_ID, Cur_SO.M_PRICELIST_ID, 'N', 'N', 'N', Cur_SO.SALESREP_ID, v_BillTo_ID, Cur_SO.POREFERENCE, Cur_SO.C_CAMPAIGN_ID, Cur_SO.C_PROJECT_ID, NULL, 'N', Cur_SO.C_INCOTERMS_ID, Cur_SO.INCOTERMS_DESCRIPTION, TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.DESCRIPTION ) ; -- Select the price list version that a applies for the price list of the header SELECT M_Get_Pricelist_Version(Cur_SO.M_PriceList_ID, TRUNC(TO_DATE(NOW()), 'DD')) INTO v_M_PriceList_Version_ID FROM DUAL; IF (v_M_PriceList_Version_ID IS NULL) THEN RAISE EXCEPTION '%', '@PriceListVersionNotFound@'||'.'; --OBTG:-20000-- ELSE -- Select products, quantities, sequence numbers, descriptions and unit prices of the project -- In both cases, if no unit price has been defined for a product, -- price is taken from the price list of the project. -- And if no price is defined in the price list, price is set to 0. FOR Cur_SOLINES IN ( SELECT pl.LINE AS SEQNO, pl.PRODUCT_DESCRIPTION AS DESCRIPTION, pl.M_PRODUCT_ID, pl.PLANNEDQTY AS QTY, pl.PLANNEDPOPRICE AS PRICEACTUAL, pl.C_TAX_ID FROM C_PROJECTLINE pl, C_PROJECT_VENDOR pv WHERE pv.C_PROJECT_VENDOR_ID = v_Record_ID AND pl.C_PROJECT_ID = pv.C_PROJECT_ID AND pl.M_Product_ID IS NOT NULL AND pl.IsActive = 'Y' ORDER BY SEQNO ASC ) LOOP -- Take StdPrice, PriceList and PriceLimit from Price List Version SELECT COUNT(*) INTO v_Size FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=Cur_SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=v_M_PriceList_Version_ID AND pl.C_Currency_ID=Cur_SO.C_CURRENCY_ID; IF (v_Size>0) THEN SELECT M_BOM_PriceStd(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceStd, M_BOM_PriceList(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceList, M_BOM_PriceLimit(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceLimit, p.C_UOM_ID INTO v_PriceStd,v_PriceList, v_PriceLimit,v_C_UOM_ID FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=Cur_SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=v_M_PriceList_Version_ID AND pl.C_Currency_ID=Cur_SO.C_CURRENCY_ID; ELSE v_PriceStd := NULL; v_PriceList := NULL; v_PriceLimit := NULL; v_C_UOM_ID := NULL; END IF; -- Calculate Price Actual IF (Cur_SOLINES.priceactual=0) THEN Cur_SOLINES.priceactual:=NULL; END IF; v_PriceActual := COALESCE(Cur_SOLINES.priceactual,M_Get_Offers_Price(TO_DATE(NOW()), Cur_SO.C_BPARTNER_ID, Cur_SOLINES.M_PRODUCT_ID, v_PriceStd, Cur_SOLINES.Qty, Cur_SO.M_PRICELIST_ID),0); IF (v_PriceStd IS NULL) THEN v_PriceStd := v_PriceActual ; END IF; IF (v_PriceList IS NULL) THEN v_PriceList := v_PriceActual ; END IF; IF (v_PriceLimit IS NULL) THEN v_PriceLimit := v_PriceActual ; END IF; -- Make currency conversion if project header's currency (hence, project lines currency) is different from supplier's price list currency IF (Cur_SO.C_CURRENCY_ID != Cur_SO.PROJCURRENCY) THEN v_PriceActual := COALESCE(C_Currency_Convert(v_PriceActual, Cur_SO.PROJCURRENCY, Cur_SO.C_CURRENCY_ID, TO_DATE(NOW()), NULL, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID),0); v_PriceStd := COALESCE(C_Currency_Convert(v_PriceStd, Cur_SO.PROJCURRENCY, Cur_SO.C_CURRENCY_ID, TO_DATE(NOW()), NULL, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID),0); v_PriceList := COALESCE(C_Currency_Convert(v_PriceList, Cur_SO.PROJCURRENCY, Cur_SO.C_CURRENCY_ID, TO_DATE(NOW()), NULL, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID),0); v_PriceLimit := COALESCE(C_Currency_Convert(v_PriceLimit, Cur_SO.PROJCURRENCY, Cur_SO.C_CURRENCY_ID, TO_DATE(NOW()), NULL, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID),0); END IF; -- Calculating the discount IF (v_PriceList = 0) THEN v_Discount := 0 ; ELSE -- Calculate rounded discount v_Discount :=ROUND((v_PriceList-v_PriceActual) / v_PriceList*100, 2); END IF; IF (v_C_UOM_ID IS NULL) THEN SELECT P.C_UOM_ID INTO v_UOM FROM M_PRODUCT P WHERE P.M_PRODUCT_ID=Cur_SOLINES.M_PRODUCT_ID; ELSE v_UOM := v_C_UOM_ID; END IF; IF (Cur_SOLINES.C_TAX_ID IS NULL) THEN v_Tax_ID:= C_Gettax(Cur_SOLINES.M_PRODUCT_ID, TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.AD_ORG_ID, Cur_SO.M_WAREHOUSE_ID, v_BPartner_Location_ID, v_BPartner_Location_ID, Cur_SO.C_PROJECT_ID, 'Y') ; ELSE v_Tax_ID:=Cur_SOLINES.C_TAX_ID; END IF; -- Get next C_OrderLine_ID SELECT * INTO v_C_OrderLine_ID FROM Ad_Sequence_Next('C_OrderLine', Cur_SO.AD_CLIENT_ID) ; v_ResultStr:='C_OrderLine_ID - ' || v_C_OrderLine_ID; INSERT INTO C_ORDERLINE ( DateOrdered, M_Warehouse_ID, QtyOrdered, QtyDelivered, QtyReserved, M_Shipper_ID, QtyInvoiced, C_Currency_ID, PriceList, DatePromised, DateDelivered, DateInvoiced, Created, IsActive, Line, C_OrderLine_ID, AD_Client_ID, C_Order_ID, Description, M_Product_ID, C_UOM_ID, DirectShip, CreatedBy, UpdatedBy, FreightAmt, C_Charge_ID, ChargeAmt, Updated, AD_Org_ID, S_ResourceAssignment_ID, C_BPartner_ID, PriceActual, C_Tax_ID, C_BPartner_Location_ID, Discount, PriceLimit, Ref_OrderLine_ID, LineNetAmt, M_AttributeSetInstance_ID, IsDescription, PriceStd ) VALUES ( TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.M_WAREHOUSE_ID, Cur_SOLINES.Qty, 0, 0, NULL, 0, Cur_SO.C_CURRENCY_ID, v_PriceList, TRUNC(TO_DATE(NOW()), 'DD'), NULL, NULL, TO_DATE(NOW()), 'Y', Cur_SOLINES.SEQNO, v_C_OrderLine_ID, Cur_SO.AD_CLIENT_ID, v_C_Order_ID, Cur_SOLINES.DESCRIPTION, Cur_SOLINES.M_PRODUCT_ID, v_UOM, 'N', v_AD_User_ID, v_AD_User_ID, 0, NULL, 0, TO_DATE(NOW()), Cur_SO.AD_ORG_ID, NULL, Cur_SO.C_BPARTNER_ID, v_PriceActual, v_Tax_ID, v_BPartner_Location_ID, v_Discount, v_PriceLimit, NULL, v_PriceActual * Cur_SOLINES.Qty, NULL, 'N', v_PriceStd ) ; END LOOP; END IF; IF NOT(v_Message='') THEN v_Message:=v_Message || ', '; END IF; v_Message:=v_Message || v_DocumentNo; END LOOP; v_Message:='@DocumentNo@: ' || v_Message; END; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.c_generatepofromproject(p_pinstance_id character varying); publictadfalse23416125536659*c_generatesofromproject(character varying)FUNCTION6CREATE FUNCTION c_generatesofromproject(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_C_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_OrderLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_DOCTYPE_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(30) ; --OBTG:NVARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get PARAMETERS v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, i.AD_Client_ID, i.AD_Org_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.P_Date_To FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_ParameteR.Record_ID; v_AD_User_ID:=Cur_ParameteR.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; DECLARE v_Size NUMERIC; v_UOM VARCHAR(32); --OBTG:VARCHAR2-- v_PriceStd NUMERIC; v_PriceList NUMERIC; v_PriceLimit NUMERIC; v_C_UOM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_M_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Billto_ID VARCHAR(32); --OBTG:VARCHAR2-- v_InvoiceRule CHAR; v_M_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PriceActual NUMERIC; v_Discount NUMERIC; v_Tax_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_SO RECORD; Cur_SOLINES RECORD; BEGIN v_ResultStr:='StartLoop'; FOR Cur_SO IN (SELECT * FROM C_PROJECT WHERE C_PROJECT_ID=v_Record_ID) LOOP -- Check that we have some restrictions v_ResultStr:='CheckRestriction'; IF(Cur_SO.PROJECTSTATUS IS NULL OR Cur_SO.PROJECTSTATUS<>'OR') THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'; --OBTG:-20000-- ELSIF Cur_SO.C_BPARTNER_ID IS NULL THEN RAISE EXCEPTION '%', '@NoprojectBusinesspartner@'; --OBTG:-20000-- ELSIF Cur_SO.C_BPARTNER_LOCATION_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @ShiptoNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.BILLTO_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @BillToNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_PAYMENTTERM_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PaymenttermNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.M_PRICELIST_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PricelistNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_CURRENCY_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectCurrencyNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.M_WAREHOUSE_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectWarehouseNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.SALESREP_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectSalesRepNotFound@'||'.'; --OBTG:-20000-- END IF; -- Get Business Partner Location v_Billto_ID := Cur_SO.BILLTO_ID; IF (v_Billto_ID IS NULL) THEN v_Billto_ID := C_GetBPLocationID(Cur_SO.C_BPartner_ID, 'B') ; END IF; SELECT InvoiceRule INTO v_InvoiceRule FROM C_BPARTNER WHERE C_BPartner_ID = Cur_SO.C_BPARTNER_ID; IF (v_InvoiceRule IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @InvoiceRuleNotdefined@'||'.'; --OBTG:-20000-- END IF; v_C_DOCTYPE_ID:=Ad_Get_DocType(Cur_SO.AD_Client_ID, Cur_SO.AD_Org_ID, 'SOO', 'SO') ; SELECT * INTO v_DocumentNo FROM AD_Sequence_DocType(v_C_DOCTYPE_ID, Cur_SO.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM AD_Sequence_Doc('DocumentNo_C_Order', Cur_SO.AD_Client_ID, 'Y') ; END IF; -- Get next C_Order_ID SELECT * INTO v_C_Order_ID FROM Ad_Sequence_Next('C_Order', Cur_SO.AD_CLIENT_ID) ; v_ResultStr:='C_ORDER_ID - ' || v_C_Order_ID; INSERT INTO C_ORDER ( C_ORDER_ID, AD_CLIENT_ID, AD_ORG_ID, CREATEDBY, UPDATEDBY, ISSOTRX, DOCUMENTNO, DOCSTATUS, DOCACTION, C_DOCTYPE_ID, C_DOCTYPETARGET_ID, DATEORDERED, DATEACCT, C_BPARTNER_ID, C_BPARTNER_LOCATION_ID, ISDISCOUNTPRINTED, C_CURRENCY_ID, PAYMENTRULE, C_PAYMENTTERM_ID, INVOICERULE, DELIVERYRULE, FREIGHTCOSTRULE, DELIVERYVIARULE, PRIORITYRULE, TOTALLINES, GRANDTOTAL, M_WAREHOUSE_ID, M_PRICELIST_ID, ISTAXINCLUDED, POSTED, PROCESSING, SALESREP_ID, BILLTO_ID, C_CAMPAIGN_ID, C_PROJECT_ID, AD_USER_ID, COPYFROM, DATEPROMISED ) VALUES ( v_C_Order_ID, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID, v_AD_User_ID, v_AD_User_ID, 'Y', v_DocumentNo, 'DR', 'CO', 0, v_C_DOCTYPE_ID, TRUNC(TO_DATE(NOW()), 'DD'), TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.C_BPARTNER_ID, Cur_SO.C_BPARTNER_LOCATION_ID, 'N', Cur_SO.C_CURRENCY_ID, COALESCE(Cur_SO.PAYMENTRULE, 'P'), Cur_SO.C_PAYMENTTERM_ID, v_InvoiceRule, 'A', 'I', 'D', '5', 0, 0, Cur_SO.M_WAREHOUSE_ID, Cur_SO.M_PRICELIST_ID, 'N', 'N', 'N', Cur_SO.SALESREP_ID, v_Billto_ID, Cur_SO.C_CAMPAIGN_ID, Cur_SO.C_PROJECT_ID, Cur_SO.AD_User_ID, 'N', TRUNC(TO_DATE(NOW()), 'DD') ) ; -- Select the price list version that a applies for the price list of the header SELECT M_Get_Pricelist_Version(Cur_SO.M_PriceList_ID, TRUNC(TO_DATE(NOW()), 'DD')) INTO v_M_PriceList_Version_ID FROM DUAL; IF (v_M_PriceList_Version_ID IS NULL) THEN RAISE EXCEPTION '%', '@PriceListVersionNotFound@'||'.'; --OBTG:-20000-- ELSE -- Select products, quantities, sequence numbers, descriptions and unit prices of the project -- In both cases, if no unit price has been defined for a product, -- price is taken from the price list of the project. -- And if no price is defined in the price list, price is set to 0. FOR Cur_SOLINES IN ( SELECT pl.LINE AS SEQNO, pl.PRODUCT_DESCRIPTION AS DESCRIPTION, pl.M_PRODUCT_ID, pl.PLANNEDQTY AS QTY, pl.PLANNEDPRICE AS PRICEACTUAL, pl.C_TAX_ID FROM C_PROJECTLINE pl WHERE pl.C_PROJECT_ID = v_Record_ID AND pl.M_Product_ID IS NOT NULL AND pl.IsActive = 'Y' ORDER BY SEQNO ASC ) LOOP -- Take StdPrice, PriceList and PriceLimit from Price List Version SELECT COUNT(*) INTO v_Size FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=Cur_SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=v_M_PriceList_Version_ID AND pl.C_Currency_ID=Cur_SO.C_CURRENCY_ID; IF (v_Size>0) THEN SELECT M_BOM_PriceStd(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceStd, M_BOM_PriceList(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceList, M_BOM_PriceLimit(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceLimit, p.C_UOM_ID INTO v_PriceStd,v_PriceList, v_PriceLimit,v_C_UOM_ID FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=Cur_SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=v_M_PriceList_Version_ID AND pl.C_Currency_ID=Cur_SO.C_CURRENCY_ID; ELSE v_PriceStd := NULL; v_PriceList := NULL; v_PriceLimit := NULL; v_C_UOM_ID := NULL; END IF; -- Calculate Price Actual IF (Cur_SOLINES.priceactual=0) THEN Cur_SOLINES.priceactual:=NULL; END IF; v_PriceActual := COALESCE(Cur_SOLINES.priceactual,M_Get_Offers_Price(TO_DATE(NOW()), Cur_SO.C_BPARTNER_ID, Cur_SOLINES.M_PRODUCT_ID, v_PriceStd, Cur_SOLINES.Qty, Cur_SO.M_PRICELIST_ID),0); IF (v_PriceStd IS NULL) THEN v_PriceStd := v_PriceActual ; END IF; IF (v_PriceList IS NULL) THEN v_PriceList := v_PriceActual ; END IF; IF (v_PriceLimit IS NULL) THEN v_PriceLimit := v_PriceActual ; END IF; IF (v_PriceList = 0) THEN v_Discount := 0 ; ELSE -- Calculate rounded discount v_Discount :=ROUND((v_PriceList-v_PriceActual) / v_PriceList*100, 2); END IF; IF (v_C_UOM_ID IS NULL) THEN SELECT P.C_UOM_ID INTO v_UOM FROM M_PRODUCT P WHERE P.M_PRODUCT_ID=Cur_SOLINES.M_PRODUCT_ID; ELSE v_UOM := v_C_UOM_ID; END IF; IF (Cur_SOLINES.C_TAX_ID IS NULL) THEN v_Tax_ID:= C_Gettax(Cur_SOLINES.M_PRODUCT_ID, TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.AD_ORG_ID, Cur_SO.M_WAREHOUSE_ID, Cur_SO.C_BPARTNER_LOCATION_ID, Cur_SO.C_BPARTNER_LOCATION_ID, Cur_SO.C_PROJECT_ID, 'Y') ; ELSE v_Tax_ID:=Cur_SOLINES.C_TAX_ID; END IF; -- Get next C_OrderLine_ID SELECT * INTO v_C_OrderLine_ID FROM Ad_Sequence_Next('C_OrderLine', Cur_SO.AD_CLIENT_ID) ; v_ResultStr:='C_OrderLine_ID - ' || v_C_OrderLine_ID; INSERT INTO C_ORDERLINE ( DateOrdered, M_Warehouse_ID, QtyOrdered, QtyDelivered, QtyReserved, M_Shipper_ID, QtyInvoiced, C_Currency_ID, PriceList, DatePromised, DateDelivered, DateInvoiced, Created, IsActive, Line, C_OrderLine_ID, AD_Client_ID, C_Order_ID, Description, M_Product_ID, C_UOM_ID, DirectShip, CreatedBy, UpdatedBy, FreightAmt, C_Charge_ID, ChargeAmt, Updated, AD_Org_ID, S_ResourceAssignment_ID, C_BPartner_ID, PriceActual, C_Tax_ID, C_BPartner_Location_ID, Discount, PriceLimit, Ref_OrderLine_ID, LineNetAmt, M_AttributeSetInstance_ID, IsDescription, PriceStd ) VALUES ( TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.M_WAREHOUSE_ID, Cur_SOLINES.Qty, 0, 0, NULL, 0, Cur_SO.C_CURRENCY_ID, v_PriceList, TRUNC(TO_DATE(NOW()), 'DD'), NULL, NULL, TO_DATE(NOW()), 'Y', Cur_SOLINES.SEQNO, v_C_OrderLine_ID, Cur_SO.AD_CLIENT_ID, v_C_Order_ID, Cur_SOLINES.DESCRIPTION, Cur_SOLINES.M_PRODUCT_ID, v_UOM, 'N', v_AD_User_ID, v_AD_User_ID, 0, NULL, 0, TO_DATE(NOW()), Cur_SO.AD_ORG_ID, NULL, Cur_SO.C_BPARTNER_ID, v_PriceActual, v_Tax_ID, Cur_SO.C_BPARTNER_LOCATION_ID, v_Discount, v_PriceLimit, NULL, v_PriceActual * Cur_SOLINES.Qty, NULL, 'N', v_PriceStd ) ; END LOOP; END IF; IF NOT(v_Message='') THEN v_Message:=v_Message || ', '; END IF; v_Message:=v_Message || v_DocumentNo; END LOOP; v_Message:='@DocumentNo@: ' || v_Message; END; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.c_generatesofromproject(p_pinstance_id character varying); publictadfalse23416125536661/c_generatesofromprojectorder(character varying)FUNCTIONQ4CREATE FUNCTION c_generatesofromprojectorder(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_M_PriceList_ID2 VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_C_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_OrderLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_DOCTYPE_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(40); BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get PARAMETERS v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, i.AD_Client_ID, i.AD_Org_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.P_Date_To FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; DECLARE v_Size NUMERIC; v_UOM VARCHAR(32); --OBTG:VARCHAR2-- v_PriceStd NUMERIC; v_PriceList NUMERIC; v_PriceLimit NUMERIC; v_C_UOM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_M_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_SO RECORD; SOLINES RECORD; FINISH_PROCESS BOOLEAN:=FALSE; BEGIN v_ResultStr:='StartLoop'; FOR Cur_SO IN (SELECT * FROM C_PROJECT WHERE C_PROJECT_ID=v_Record_ID) LOOP -- Check that we have some restrictions v_ResultStr:='CheckRestriction'; IF(Cur_SO.PROJECTSTATUS IS NULL OR Cur_SO.PROJECTSTATUS<>'OR') THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN v_C_Order_ID:=Ad_Sequence_Nextno('C_Order') ; v_ResultStr:='C_ORDER_ID - ' || v_C_Order_ID; v_C_DOCTYPE_ID:=Ad_Get_Doctype(Cur_SO.AD_Client_ID, Cur_SO.AD_Org_ID, 'SOO', 'SO') ; v_ResultStr:='C_DOCTYPE_ID - ' || v_C_DOCTYPE_ID; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_C_DOCTYPE_ID, Cur_SO.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Order', Cur_SO.AD_Client_ID, 'Y') ; END IF; SELECT M_PriceList_ID INTO v_M_PriceList_ID2 FROM M_PRICELIST_VERSION WHERE M_PriceList_Version_ID=Cur_SO.M_PRICELIST_VERSION_ID; v_ResultStr:='DocumentNo - ' || v_DocumentNo || ' m_pricelist_id - ' || COALESCE(Cur_SO.m_pricelist_id, v_M_Pricelist_ID2); INSERT INTO C_ORDER ( C_ORDER_ID, AD_CLIENT_ID, AD_ORG_ID, CREATEDBY, UPDATEDBY, ISSOTRX, DOCUMENTNO, DOCSTATUS, DOCACTION, C_DOCTYPE_ID, C_DOCTYPETARGET_ID, DATEORDERED, DATEACCT, C_BPARTNER_ID, C_BPARTNER_LOCATION_ID, ISDISCOUNTPRINTED, C_CURRENCY_ID, PAYMENTRULE, C_PAYMENTTERM_ID, INVOICERULE, DELIVERYRULE, FREIGHTCOSTRULE, DELIVERYVIARULE, PRIORITYRULE, TOTALLINES, GRANDTOTAL, M_WAREHOUSE_ID, M_PRICELIST_ID, ISTAXINCLUDED, POSTED, PROCESSING, SALESREP_ID, BILLTO_ID, C_CAMPAIGN_ID, C_PROJECT_ID, AD_USER_ID, COPYFROM, DATEPROMISED ) VALUES ( v_C_Order_ID, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID, v_AD_User_ID, v_AD_User_ID, 'Y', v_DocumentNo, 'DR', 'CO', '0', v_C_DOCTYPE_ID, TRUNC(TO_DATE(NOW()), 'DD'), TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.C_BPARTNER_ID, Cur_SO.C_BPARTNER_LOCATION_ID, 'N', Cur_SO.C_CURRENCY_ID, COALESCE(Cur_SO.PAYMENTRULE, 'P'), Cur_SO.C_PAYMENTTERM_ID, 'D', 'A', 'I', 'D', '5', 0, 0, Cur_SO.M_WAREHOUSE_ID, COALESCE(Cur_SO.M_PRICELIST_ID, v_M_PriceList_ID2), 'N', 'N', 'N', Cur_SO.SALESREP_ID, Cur_SO.BILLTO_ID, Cur_SO.C_CAMPAIGN_ID, Cur_SO.C_PROJECT_ID, Cur_SO.AD_User_ID, 'N', TRUNC(TO_DATE(NOW()), 'DD') ) ; FOR SOLINES IN (SELECT * FROM C_PROJECTLINE WHERE C_PROJECT_ID=v_Record_ID) LOOP IF(SOLINES.M_PRODUCT_ID IS NOT NULL AND Cur_SO.M_PRICELIST_VERSION_ID IS NOT NULL) THEN v_ResultStr:='SOLINES1 - SO.M_PRICELIST_VERSION_ID - ' || Cur_SO.M_PRICELIST_VERSION_ID || ' - ' || SOLINES.M_PRODUCT_ID; SELECT COUNT(p.C_UOM_ID) INTO v_Size FROM M_PRODUCT p, M_PRODUCTPRICE pp, M_PRICELIST_VERSION pv, M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=Cur_SO.M_PRICELIST_VERSION_ID; IF(v_Size>0) THEN SELECT M_BOM_PriceStd(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceStd, M_BOM_PriceList(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceList, M_BOM_PriceLimit(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceLimit, p.C_UOM_ID, pl.C_Currency_ID INTO v_PriceStd, v_PriceList, v_PriceLimit, v_C_UOM_ID, v_C_Currency_ID FROM M_PRODUCT p, M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=Cur_SO.M_PRICELIST_VERSION_ID; END IF; END IF; IF(SOLINES.M_PRODUCT_ID IS NOT NULL AND v_PriceStd IS NULL AND v_PriceList IS NULL AND v_PriceLimit IS NULL AND v_C_UOM_ID IS NULL AND v_C_Currency_ID IS NULL) THEN v_ResultStr:='SOLINES - v_PriceStd - ' || v_PriceStd; IF(Cur_SO.M_PRICELIST_ID IS NULL) THEN SELECT M_PriceList_ID INTO v_M_PriceList_ID FROM M_PRICELIST pl, M_PRODUCT p WHERE pl.AD_Client_ID=p.AD_Client_ID AND M_Product_ID=SOLINES.M_PRODUCT_ID ORDER BY IsDefault DESC; END IF; v_ResultStr:='SOLINES2 - v_M_PriceList_ID - ' || v_M_PriceList_ID; SELECT M_BOM_PriceStd(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceStd, M_BOM_PriceList(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceList, M_BOM_PriceLimit(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceLimit, p.C_UOM_ID,pl.C_Currency_ID INTO v_PriceStd,v_PriceList,v_PriceLimit,v_C_UOM_ID,v_C_Currency_ID FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=SOLINES.M_PRODUCT_ID AND pv.M_PriceList_ID=COALESCE(Cur_SO.M_PRICELIST_ID, v_M_PriceList_ID) ORDER BY pv.ValidFrom DESC; v_ResultStr:='SOLINES - v_PriceStd - ' || v_PriceStd; END IF; IF(SOLINES.M_PRODUCT_ID IS NOT NULL AND v_PriceStd IS NULL AND v_PriceList IS NULL AND v_PriceLimit IS NULL AND v_C_UOM_ID IS NULL AND v_C_Currency_ID IS NULL) THEN SELECT M_BOM_PriceStd(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceStd, M_BOM_PriceList(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceList, M_BOM_PriceLimit(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceLimit, p.C_UOM_ID,pl.C_Currency_ID INTO v_PriceStd,v_PriceList,v_PriceLimit,v_C_UOM_ID,v_C_Currency_ID FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST bpl,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=bpl.M_PriceList_ID AND bpl.M_PriceList_ID=pl.BasePriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=SOLINES.M_PRODUCT_ID AND pl.M_PriceList_ID=COALESCE(Cur_SO.M_PRICELIST_ID, v_M_PriceList_ID) ORDER BY pv.ValidFrom DESC; END IF; SELECT U.C_UOM_ID INTO v_UOM FROM C_UOM U,M_PRODUCT P WHERE P.C_UOM_ID=U.C_UOM_ID AND M_PRODUCT_ID=SOLINES.M_PRODUCT_ID; v_C_OrderLine_ID:=Ad_Sequence_Nextno('C_OrderLine') ; v_ResultStr:='C_OrderLine_ID - ' || v_C_OrderLine_ID; INSERT INTO C_ORDERLINE ( DateOrdered, M_Warehouse_ID, QtyOrdered, QtyDelivered, QtyReserved, M_Shipper_ID, QtyInvoiced, C_Currency_ID, PriceList, DatePromised, DateDelivered, DateInvoiced, Created, IsActive, Line, C_OrderLine_ID, AD_Client_ID, C_Order_ID, Description, M_Product_ID, C_UOM_ID, DirectShip, CreatedBy, UpdatedBy, FreightAmt, C_Charge_ID, ChargeAmt, Updated, AD_Org_ID, S_ResourceAssignment_ID, C_BPartner_ID, PriceActual, C_Tax_ID, C_BPartner_Location_ID, Discount, PriceLimit, Ref_OrderLine_ID, LineNetAmt, M_AttributeSetInstance_ID, IsDescription, PriceStd ) VALUES ( TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.M_WAREHOUSE_ID, SOLINES.InvoicedQty, 0, 0, NULL, 0, Cur_SO.C_CURRENCY_ID, v_PriceList, TRUNC(TO_DATE(NOW()), 'DD'), NULL, NULL, TO_DATE(NOW()), 'Y', SOLINES.LINE, v_C_OrderLine_ID, Cur_SO.AD_CLIENT_ID, v_C_Order_ID, SOLINES.DESCRIPTION, SOLINES.M_PRODUCT_ID, v_UOM, 'N', v_AD_User_ID, v_AD_User_ID, 0, NULL, 0, TO_DATE(NOW()), Cur_SO.AD_ORG_ID, NULL, Cur_SO.C_BPARTNER_ID, M_Get_Offers_Price(TO_DATE(NOW()), Cur_SO.C_BPARTNER_ID, SOLINES.M_PRODUCT_ID, v_PriceStd, SOLINES.InvoicedQty, v_M_PriceList_ID), C_Gettax(SOLINES.M_PRODUCT_ID, TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.AD_ORG_ID, Cur_SO.M_WAREHOUSE_ID, Cur_SO.C_BPARTNER_LOCATION_ID, Cur_SO.C_BPARTNER_LOCATION_ID, Cur_SO.C_PROJECT_ID, 'Y'), Cur_SO.C_BPARTNER_LOCATION_ID, (v_PriceList-v_PriceStd) *100/v_PriceList, v_PriceLimit, NULL, (M_Get_Offers_Price(TO_DATE(NOW()), Cur_SO.C_BPARTNER_ID, SOLINES.M_PRODUCT_ID, v_PriceStd, SOLINES.InvoicedQty, v_M_PriceList_ID) * SOLINES.InvoicedQty), NULL, 'N', v_PriceStd ) ; END LOOP; IF NOT(v_Message='') THEN v_Message:=v_Message || ', '; END IF; v_Message:=v_Message || v_DocumentNo; END IF;--FINISH_PROCESS END LOOP; v_Message:='@DocumentNo@: ' || v_Message; END; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; UDROP FUNCTION public.c_generatesofromprojectorder(p_pinstance_id character varying); publictadfalse23416125536663/c_generatesofromprojectphase(character varying)FUNCTION<CREATE FUNCTION c_generatesofromprojectphase(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_C_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_OrderLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_DOCTYPE_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(30) ; --OBTG:NVARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get PARAMETERS v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, i.AD_Client_ID, i.AD_Org_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.P_Date_To FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; DECLARE v_Size NUMERIC; v_UOM VARCHAR(32); --OBTG:VARCHAR2-- v_PriceStd NUMERIC; v_PriceList NUMERIC; v_PriceLimit NUMERIC; v_C_UOM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_M_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Billto_ID VARCHAR(32); --OBTG:VARCHAR2-- v_InvoiceRule CHAR; v_M_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PriceActual NUMERIC; v_Discount NUMERIC; --TYPE RECORD IS REFCURSOR; Cur_SO RECORD; Cur_SOLINES RECORD; BEGIN v_ResultStr:='StartLoop'; FOR Cur_SO IN ( SELECT P.C_BPARTNER_ID, P.C_BPARTNER_LOCATION_ID, P.M_PRICELIST_ID, PL.NAME AS PRICE_LIST_NAME, P.C_CURRENCY_ID, P.PAYMENTRULE, P.C_PAYMENTTERM_ID, P.M_WAREHOUSE_ID, P.SALESREP_ID, P.BILLTO_ID, P.C_CAMPAIGN_ID, P.C_PROJECT_ID, P.AD_USER_ID, P.DESCRIPTION, P.PROJECTSTATUS, PP.NAME AS PHASE_NAME, PP.AD_CLIENT_ID, PP.AD_ORG_ID, OI.C_LOCATION_ID AS ORGLOCATIONID FROM C_PROJECT P, C_PROJECTPHASE PP, M_PRICELIST PL, AD_ORGINFO OI WHERE P.C_PROJECT_ID=PP.C_PROJECT_ID AND PP.C_PROJECTPHASE_ID=v_Record_ID AND P.M_PRICELIST_ID = PL.M_PRICELIST_ID AND PP.AD_ORG_ID = OI.AD_ORG_ID ) LOOP -- Check that we have some restrictions IF (Cur_SO.PROJECTSTATUS IS NULL OR Cur_SO.PROJECTSTATUS <> 'OR') THEN RAISE EXCEPTION '%', '@Invalidprojectstatus@'||'. '||' @ChangeToOrder@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_BPARTNER_ID IS NULL THEN RAISE EXCEPTION '%', '@NoprojectBusinesspartner@'; --OBTG:-20000-- ELSIF Cur_SO.C_BPARTNER_LOCATION_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @ShiptoNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.BILLTO_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @BillToNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_PAYMENTTERM_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PaymenttermNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.M_PRICELIST_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PricelistNotdefined@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.C_CURRENCY_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectCurrencyNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.M_WAREHOUSE_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectWarehouseNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.SALESREP_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectSalesRepNotFound@'||'.'; --OBTG:-20000-- ELSIF Cur_SO.ORGLOCATIONID IS NULL THEN RAISE EXCEPTION '%', '@NoLocationNoTaxCalculated@'||'.'; --OBTG:-20000-- END IF; -- Get Business Partner Location v_Billto_ID := Cur_SO.BILLTO_ID; IF (v_Billto_ID IS NULL) THEN v_Billto_ID := C_GetBPLocationID(Cur_SO.C_BPartner_ID, 'B') ; END IF; SELECT InvoiceRule INTO v_InvoiceRule FROM C_BPARTNER WHERE C_BPartner_ID = Cur_SO.C_BPARTNER_ID; IF (v_InvoiceRule IS NULL) THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @InvoiceRuleNotdefined@'||'.'; --OBTG:-20000-- END IF; v_C_DOCTYPE_ID:=Ad_Get_Doctype(Cur_SO.AD_Client_ID, Cur_SO.AD_Org_ID, 'SOO', 'SO') ; v_ResultStr:='C_DOCTYPE_ID - ' || v_C_DOCTYPE_ID; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_C_DOCTYPE_ID, Cur_SO.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Order', Cur_SO.AD_Client_ID, 'Y') ; END IF; -- Get next C_Order_ID SELECT * INTO v_C_Order_ID FROM Ad_Sequence_Next('C_Order', Cur_SO.AD_CLIENT_ID) ; v_ResultStr:='C_ORDER_ID - ' || v_C_Order_ID; v_ResultStr:='DocumentNo - ' || v_DocumentNo || ' m_pricelist_id - ' || Cur_SO.M_PriceList_ID; INSERT INTO C_ORDER ( C_ORDER_ID, AD_CLIENT_ID, AD_ORG_ID, CREATEDBY, UPDATEDBY, ISSOTRX, DOCUMENTNO, DOCSTATUS, DOCACTION, C_DOCTYPE_ID, C_DOCTYPETARGET_ID, DATEORDERED, DATEACCT, C_BPARTNER_ID, C_BPARTNER_LOCATION_ID, ISDISCOUNTPRINTED, C_CURRENCY_ID, PAYMENTRULE, C_PAYMENTTERM_ID, INVOICERULE, DELIVERYRULE, FREIGHTCOSTRULE, DELIVERYVIARULE, PRIORITYRULE, TOTALLINES, GRANDTOTAL, M_WAREHOUSE_ID, M_PRICELIST_ID, ISTAXINCLUDED, POSTED, PROCESSING, SALESREP_ID, BILLTO_ID, C_CAMPAIGN_ID, C_PROJECT_ID, AD_USER_ID, COPYFROM, DATEPROMISED, DESCRIPTION ) VALUES ( v_C_Order_ID, Cur_SO.AD_CLIENT_ID, Cur_SO.AD_ORG_ID, v_AD_User_ID, v_AD_User_ID, 'Y', v_DocumentNo, 'DR', 'CO', '0', v_C_DOCTYPE_ID, TRUNC(TO_DATE(NOW()), 'DD'), TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.C_BPARTNER_ID, Cur_SO.C_BPARTNER_LOCATION_ID, 'N', Cur_SO.C_CURRENCY_ID, COALESCE(Cur_SO.PAYMENTRULE, 'P'), Cur_SO.C_PAYMENTTERM_ID, v_InvoiceRule, 'A', 'I', 'D', '5', 0, 0, Cur_SO.M_WAREHOUSE_ID, Cur_SO.M_PRICELIST_ID, 'N', 'N', 'N', Cur_SO.SALESREP_ID, v_Billto_ID, Cur_SO.C_CAMPAIGN_ID, Cur_SO.C_PROJECT_ID, Cur_SO.AD_User_ID, 'N', TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.PHASE_NAME || ' - ' || COALESCE(TO_CHAR(Cur_SO.DESCRIPTION),'') ); UPDATE C_PROJECTPHASE SET C_ORDER_ID = v_C_Order_ID WHERE C_PROJECTPHASE_ID = v_Record_ID; -- Select the price list version that a applies for the price list of the header SELECT M_Get_Pricelist_Version(Cur_SO.M_PriceList_ID, TRUNC(TO_DATE(NOW()), 'DD')) INTO v_M_PriceList_Version_ID FROM DUAL; IF (v_M_PriceList_Version_ID IS NULL) THEN RAISE EXCEPTION '%', '@PriceListVersionNotFound@'||'.'; --OBTG:-20000-- ELSE -- Select products, quantities, sequence numbers, descriptions and unit prices of the project phases and tasks -- In both cases, if no unit price has been defined for a product, -- price is taken from the price list of the project. -- And if no price is defined in the price list, price is set to 0. FOR Cur_SOLINES IN ( SELECT 'phase' AS PROV, pp.SEQNO, pp.NAME AS LINE_NAME, pp.DESCRIPTION, pr.NAME AS PRODUCT_NAME, pp.M_PRODUCT_ID, pp.QTY, pp.PRICEACTUAL FROM C_PROJECTPHASE pp, M_PRODUCT pr WHERE pp.C_PROJECTPHASE_ID = v_Record_ID AND pp.M_PRODUCT_ID = pr.M_PRODUCT_ID AND pp.M_Product_ID IS NOT NULL AND pp.IsActive = 'Y' UNION SELECT 'task' as PROV, pt.SEQNO, pt.NAME AS LINE_NAME, pt.DESCRIPTION, pr.NAME AS PRODUCT_NAME, pt.M_PRODUCT_ID, pt.QTY, pt.PRICEACTUAL FROM C_PROJECTTASK pt, C_PROJECTPHASE pp, M_PRODUCT pr WHERE pp.C_PROJECTPHASE_ID = v_Record_ID AND pp.C_PROJECTPHASE_ID = pt.C_PROJECTPHASE_ID AND pt.M_PRODUCT_ID = pr.M_PRODUCT_ID AND pt.M_Product_ID IS NOT NULL AND pt.IsActive = 'Y' ORDER BY PROV ASC, SEQNO ASC ) LOOP -- Take StdPrice, PriceList and PriceLimit from Price List Version SELECT COUNT(*) INTO v_Size FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=Cur_SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=v_M_PriceList_Version_ID AND pl.C_Currency_ID=Cur_SO.C_CURRENCY_ID; IF (v_Size>0) THEN SELECT M_BOM_PriceStd(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceStd, M_BOM_PriceList(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceList, M_BOM_PriceLimit(p.M_Product_ID, pv.M_PriceList_Version_ID) AS PriceLimit, p.C_UOM_ID INTO v_PriceStd,v_PriceList, v_PriceLimit,v_C_UOM_ID FROM M_PRODUCT p,M_PRODUCTPRICE pp,M_PRICELIST_VERSION pv,M_PRICELIST pl WHERE p.M_Product_ID=pp.M_Product_ID AND pp.M_PriceList_Version_ID=pv.M_PriceList_Version_ID AND pv.M_PriceList_ID=pl.M_PriceList_ID AND pv.IsActive='Y' AND p.M_Product_ID=Cur_SOLINES.M_PRODUCT_ID AND pv.M_PriceList_Version_ID=v_M_PriceList_Version_ID AND pl.C_Currency_ID=Cur_SO.C_CURRENCY_ID; ELSE v_PriceStd := NULL; v_PriceList := NULL; v_PriceLimit := NULL; v_C_UOM_ID := NULL; END IF; -- Calculate Price Actual v_PriceActual := COALESCE(Cur_SOLINES.priceactual,M_Get_Offers_Price(TO_DATE(NOW()), Cur_SO.C_BPARTNER_ID, Cur_SOLINES.M_PRODUCT_ID, v_PriceStd, Cur_SOLINES.Qty, Cur_SO.M_PRICELIST_ID),0); IF (v_PriceStd IS NULL) THEN v_PriceStd := v_PriceActual ; END IF; IF (v_PriceList IS NULL) THEN v_PriceList := v_PriceActual ; END IF; IF (v_PriceLimit IS NULL) THEN v_PriceLimit := v_PriceActual ; END IF; IF (v_PriceList = 0) THEN v_Discount := 0 ; ELSE -- Calculate rounded discount v_Discount :=ROUND((v_PriceList-v_PriceActual) / v_PriceList*100, 2); END IF; IF (v_C_UOM_ID IS NULL) THEN SELECT P.C_UOM_ID INTO v_UOM FROM M_PRODUCT P WHERE P.M_PRODUCT_ID=Cur_SOLINES.M_PRODUCT_ID; ELSE v_UOM := v_C_UOM_ID; END IF; -- Get next C_OrderLine_ID SELECT * INTO v_C_OrderLine_ID FROM Ad_Sequence_Next('C_OrderLine', Cur_SO.AD_CLIENT_ID) ; v_ResultStr:='C_OrderLine_ID - ' || v_C_OrderLine_ID; INSERT INTO C_ORDERLINE ( DateOrdered, M_Warehouse_ID, QtyOrdered, QtyDelivered, QtyReserved, M_Shipper_ID, QtyInvoiced, C_Currency_ID, PriceList, DatePromised, DateDelivered, DateInvoiced, Created, IsActive, Line, C_OrderLine_ID, AD_Client_ID, C_Order_ID, Description, M_Product_ID, C_UOM_ID, DirectShip, CreatedBy, UpdatedBy, FreightAmt, C_Charge_ID, ChargeAmt, Updated, AD_Org_ID, S_ResourceAssignment_ID, C_BPartner_ID, PriceActual, C_Tax_ID, C_BPartner_Location_ID, Discount, PriceLimit, Ref_OrderLine_ID, LineNetAmt, M_AttributeSetInstance_ID, IsDescription, PriceStd ) VALUES ( TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.M_WAREHOUSE_ID, Cur_SOLINES.Qty, 0, 0, NULL, 0, Cur_SO.C_CURRENCY_ID, v_PriceList, TRUNC(TO_DATE(NOW()), 'DD'), NULL, NULL, TO_DATE(NOW()), 'Y', Cur_SOLINES.SEQNO, v_C_OrderLine_ID, Cur_SO.AD_CLIENT_ID, v_C_Order_ID, Cur_SOLINES.LINE_NAME || ' - ' || COALESCE(TO_CHAR(Cur_SOLINES.DESCRIPTION),''), Cur_SOLINES.M_PRODUCT_ID, v_UOM, 'N', v_AD_User_ID, v_AD_User_ID, 0, NULL, 0, TO_DATE(NOW()), Cur_SO.AD_ORG_ID, NULL, Cur_SO.C_BPARTNER_ID, v_PriceActual, C_Gettax(Cur_SOLINES.M_PRODUCT_ID, TRUNC(TO_DATE(NOW()), 'DD'), Cur_SO.AD_ORG_ID, Cur_SO.M_WAREHOUSE_ID, Cur_SO.C_BPARTNER_LOCATION_ID, Cur_SO.C_BPARTNER_LOCATION_ID, Cur_SO.C_PROJECT_ID, 'Y'), Cur_SO.C_BPARTNER_LOCATION_ID, v_Discount, v_PriceLimit, NULL, v_PriceActual * Cur_SOLINES.Qty, NULL, 'N', v_PriceStd ) ; END LOOP; END IF; IF NOT(v_Message='') THEN v_Message:=v_Message || ', '; END IF; v_Message:=v_Message || v_DocumentNo; END LOOP; v_Message:='@DocumentNo@: ' || v_Message; END; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; UDROP FUNCTION public.c_generatesofromprojectphase(p_pinstance_id character varying); publictadfalse234161255366657c_getbplocationid(character varying, character varying)FUNCTIONCREATE FUNCTION c_getbplocationid(p_bpartnerid character varying, p_locationtype character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return the first BPLocationID of the BPartner and LocationType (BillTo, ...) * Description: * ************************************************************************/ v_BPLocationID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_BPLocationBillCursor RECORD; Cur_BPLocationShipCursor RECORD; Cur_BPLocationPayCursor RECORD; Cur_BPLocationRemitCursor RECORD; Cur_BPLocationTaxCursor RECORD; BEGIN IF(p_LocationType='B') THEN FOR Cur_BPLocationBillCursor IN (SELECT C_BPartner_Location_ID FROM C_BPartner_Location WHERE C_BPartner_ID=p_BPartnerID AND IsBillTo='Y' AND IsActive='Y' ) LOOP v_BPLocationID:=Cur_BPLocationBillCursor.C_BPartner_Location_ID; EXIT; END LOOP; END IF; IF(p_LocationType='S') THEN FOR Cur_BPLocationShipCursor IN (SELECT C_BPartner_Location_ID FROM C_BPartner_Location WHERE C_BPartner_ID=p_BPartnerID AND IsShipTo='Y' AND IsActive='Y' ) LOOP v_BPLocationID:=Cur_BPLocationShipCursor.C_BPartner_Location_ID; EXIT; END LOOP; END IF; IF(p_LocationType='P') THEN FOR Cur_BPLocationPayCursor IN (SELECT C_BPartner_Location_ID FROM C_BPartner_Location WHERE C_BPartner_ID=p_BPartnerID AND IsPayFrom='Y' AND IsActive='Y' ) LOOP v_BPLocationID:=Cur_BPLocationPayCursor.C_BPartner_Location_ID; EXIT; END LOOP; END IF; IF(p_LocationType='R') THEN FOR Cur_BPLocationRemitCursor IN (SELECT C_BPartner_Location_ID FROM C_BPartner_Location WHERE C_BPartner_ID=p_BPartnerID AND IsRemitTo='Y' AND IsActive='Y' ) LOOP v_BPLocationID:=Cur_BPLocationRemitCursor.C_BPartner_Location_ID; EXIT; END LOOP; END IF; IF(p_LocationType='T') THEN FOR Cur_BPLocationTaxCursor IN (SELECT C_BPartner_Location_ID FROM C_BPartner_Location WHERE C_BPartner_ID=p_BPartnerID AND IsTaxLocation='Y' AND IsActive='Y' ) LOOP v_BPLocationID:=Cur_BPLocationTaxCursor.C_BPartner_Location_ID; EXIT; END LOOP; END IF; RETURN v_BPLocationID; END ; $$ LANGUAGE plpgsql; jDROP FUNCTION public.c_getbplocationid(p_bpartnerid character varying, p_locationtype character varying); publictadfalse23416125536666+c_getperiodname(numeric, character varying)FUNCTION(CREATE FUNCTION c_getperiodname(p_periodno numeric, p_year_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Period VARCHAR(60) ; --OBTG:NVARCHAR2-- -- BEGIN SELECT NAME INTO v_Period FROM C_PERIOD WHERE C_YEAR_ID=p_Year_ID AND periodno=p_PeriodNo; RETURN v_Period; END ; $$ LANGUAGE plpgsql; WDROP FUNCTION public.c_getperiodname(p_periodno numeric, p_year_id character varying); publictadfalse23416i.00IFUNCTION c_getperiodname(p_periodno numeric, p_year_id character varying)COMMENTCOMMENT ON FUNCTION c_getperiodname(p_periodno numeric, p_year_id character varying) IS '--OBTG:C_GETPERIODNAMEfunc=NVARCHAR--'; publictadfalse192125536667c_gettax(character varying, timestamp without time zone, character varying, character varying, character varying, character varying, character varying, character)FUNCTION$CREATE FUNCTION c_gettax(p_product_id character varying, p_shipdate timestamp without time zone, p_org_id character varying, p_warehouse_id character varying, p_billbpartnerloc_id character varying, p_shipbpartnerloc_id character varying, p_project_id character varying, p_issotrx character) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Get C_Tax_ID from product, bpartner, ... ************************************************************************/ v_billFrom VARCHAR(32); --OBTG:VARCHAR2-- v_billTo VARCHAR(32) ; --OBTG:VARCHAR2-- v_isTaxExempt CHAR(1) ; v_TaxID VARCHAR(32) ; --OBTG:varchar2-- v_TaxCategoryID VARCHAR(32) ; --OBTG:varchar2-- v_shipFrom VARCHAR(32) ; --OBTG:VARCHAR2-- v_shipTo VARCHAR(32) ; --OBTG:VARCHAR2-- v_aux VARCHAR(32) ; --OBTG:VARCHAR2-- v_BPTaxCategory VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; BILLTO RECORD; BEGIN -- For sales, if project line has c_tax_id assigned, return it IF(p_IsSOTrx = 'Y' AND p_Project_ID IS NOT NULL) THEN SELECT MAX(C_TAX_ID) INTO v_TaxID FROM C_PROJECTLINE WHERE C_Project_ID = p_Project_ID AND M_Product_ID = p_Product_ID; IF(v_TaxID IS NOT NULL) THEN RETURN v_TaxID; END IF; END IF; -- Get billFrom SELECT C_Location_ID INTO v_billFrom FROM AD_OrgInfo WHERE AD_Org_ID = p_Org_ID; FOR BILLTO IN (SELECT il.C_Location_ID AS billToC_Location_ID, b.SO_BP_TaxCategory_ID, b.PO_BP_TaxCategory_ID, b.IsTaxExempt FROM C_BPartner_Location il, C_BPartner b WHERE il.C_BPartner_ID = b.C_BPartner_ID AND il.C_BPartner_Location_ID = p_billBPartnerLoc_ID) LOOP v_billTo := BILLTO.billToC_Location_ID; IF p_IsSOTrx = 'Y' THEN v_isTaxExempt := COALESCE(BILLTO.IsTaxExempt, 'N') ; v_BPTaxCategory := BILLTO.SO_BP_TaxCategory_ID; ELSE v_isTaxExempt := 'N'; v_BPTaxCategory := BILLTO.PO_BP_TaxCategory_ID; END IF; EXIT; END LOOP; IF(v_billTo IS NULL) THEN RETURN NULL; ELSIF v_isTaxExempt = 'Y' THEN DECLARE TAX_ID RECORD; BEGIN FOR TAX_ID IN (SELECT t.C_Tax_ID FROM C_Tax t INNER JOIN AD_Org o ON(t.AD_Client_ID = o.AD_Client_ID) WHERE t.ISTAXEXEMPT = 'Y' AND o.AD_Org_ID = p_Org_ID AND t.ValidFrom <= p_shipDate AND t.isActive = 'Y' ORDER BY t.VALIDFROM DESC ) LOOP v_TaxID := TAX_ID.C_Tax_ID; EXIT; END LOOP; END; ELSE SELECT C_TaxCategory_ID INTO v_TaxCategoryID FROM M_Product WHERE M_Product_ID = p_Product_ID; IF(p_Warehouse_ID IS NULL) THEN v_shipFrom := v_billFrom; ELSE SELECT C_Location_ID INTO v_shipFrom FROM M_Warehouse WHERE M_Warehouse_ID = p_Warehouse_ID; END IF; SELECT C_Location_ID INTO v_shipTo FROM C_BPartner_Location WHERE C_BPartner_Location_ID = p_shipBPartnerLoc_ID; IF p_IsSOTrx = 'N' THEN v_aux := v_billTo; v_billTo := v_billFrom; v_billFrom := v_aux; v_aux := v_shipTo; v_shipTo := v_shipFrom; v_shipFrom := v_aux; END IF; DECLARE SEL1 RECORD; SEL2 RECORD; SEL3 RECORD; BEGIN FOR SEL1 IN (SELECT t.C_Tax_ID, '' AS billToC_Location_ID, '' AS IsTaxExempt FROM (SELECT C_Tax_ID, C_Country_ID, C_Region_ID, To_Country_Id, To_Region_ID, ValidFrom, C_TaxCategory_ID, Parent_Tax_ID, C_BP_TaxCategory_ID, SoPoType FROM c_Tax WHERE c_Tax.isActive = 'Y' UNION SELECT tz.C_Tax_ID, tz.From_Country_ID, tz.From_Region_ID, tz.To_Country_ID, tz.To_Region_ID, ValidFrom, C_TaxCategory_ID, Parent_Tax_Id, C_BP_TaxCategory_ID, ct.SoPoType FROM c_Tax_Zone tz, c_Tax ct WHERE tz.C_Tax_ID = ct.C_Tax_ID AND ct.isActive = 'Y' ) t, C_Location lf, C_Location lt WHERE t.Parent_Tax_ID IS NULL AND t.C_TaxCategory_ID = v_TaxCategoryID AND lf.C_Location_ID = v_billFrom AND(t.C_Country_ID = lf.C_Country_ID OR(t.C_Country_ID IS NULL)) AND(t.C_Region_ID = lf.C_Region_ID OR(t.C_Region_ID IS NULL)) AND lt.C_Location_ID = v_shipTo AND(t.To_Country_ID = lt.C_Country_ID OR(t.To_Country_ID IS NULL)) AND(t.To_Region_ID = lt.C_Region_ID OR(t.To_Region_ID IS NULL)) AND t.ValidFrom <= p_shipDate -- AND ((t.C_BP_TaxCategory_ID = v_BPTaxCategory) OR (v_BPTaxCategory IS NULL)) AND ((t.C_BP_TaxCategory_ID IS NOT NULL AND t.C_BP_TaxCategory_ID = v_BPTaxCategory) OR (t.C_BP_TaxCategory_ID IS NULL)) AND (SoPoType = 'B' OR (SoPoType =(case when p_IsSOTrx='Y' then 'S' else 'P' end))) ORDER BY t.C_BP_TaxCategory_ID, t.C_Country_ID, t.To_Country_ID, t.C_Region_ID, t.To_Region_ID, t.ValidFrom DESC ) LOOP v_TaxID := SEL1.C_Tax_ID; EXIT; END LOOP; IF v_TaxID IS NULL THEN FOR SEL2 IN (SELECT t.C_Tax_ID FROM (SELECT C_Tax_ID, C_Country_ID, C_Region_ID, To_Country_Id, To_Region_ID, ValidFrom, C_TaxCategory_ID, Parent_Tax_ID, C_BP_TaxCategory_ID, SoPoType FROM c_Tax WHERE c_Tax.isActive = 'Y' UNION SELECT tz.C_Tax_ID, tz.From_Country_ID, tz.From_Region_ID, tz.To_Country_ID, tz.To_Region_ID, ValidFrom, C_TaxCategory_ID, Parent_Tax_Id, C_BP_TaxCategory_ID, SoPoType FROM c_Tax_Zone tz, c_Tax ct WHERE tz.C_Tax_ID = ct.C_Tax_ID AND ct.isActive = 'Y' ) t, C_Location lf WHERE t.Parent_Tax_ID IS NULL AND t.C_TaxCategory_ID = v_TaxCategoryID AND lf.C_Location_ID = v_billFrom AND(t.C_Country_ID = lf.C_Country_ID OR(t.C_Country_ID IS NULL)) AND(t.C_Region_ID = lf.C_Region_ID OR(t.C_Region_ID IS NULL)) AND t.To_Country_ID IS NULL AND t.To_Region_ID IS NULL AND t.ValidFrom <= p_shipDate --AND ((t.C_BP_TaxCategory_ID = v_BPTaxCategory) OR (v_BPTaxCategory IS NULL)) AND ((t.C_BP_TaxCategory_ID IS NOT NULL AND t.C_BP_TaxCategory_ID = v_BPTaxCategory) OR (t.C_BP_TaxCategory_ID IS NULL)) AND (SoPoType = 'B' OR (SoPoType =(case when p_IsSOTrx='Y' then 'S' else 'P' end))) ORDER BY t.C_BP_TaxCategory_ID,t.C_Country_ID, t.C_Region_ID, t.ValidFrom DESC ) LOOP v_TaxID := SEL2.C_Tax_ID; EXIT; END LOOP; END IF; IF v_TaxID IS NULL THEN FOR SEL3 IN (SELECT t.C_Tax_ID,t.C_BP_TaxCategory_ID, SoPoType FROM C_Tax t, C_Location lf WHERE t.AD_Client_ID = lf.AD_Client_ID AND lf.C_Location_ID = v_billFrom AND t.IsDefault = 'Y' AND t.ValidFrom <= p_shipDate --AND ((t.C_BP_TaxCategory_ID = v_BPTaxCategory) OR (v_BPTaxCategory IS NULL)) AND ((t.C_BP_TaxCategory_ID IS NOT NULL AND t.C_BP_TaxCategory_ID = v_BPTaxCategory) OR (t.C_BP_TaxCategory_ID IS NULL)) AND (SoPoType = 'B' OR (SoPoType =(case when p_IsSOTrx='Y' then 'S' else 'P' end))) AND t.isActive = 'Y' ORDER BY t.C_BP_TaxCategory_ID, t.ValidFrom DESC ) LOOP v_TaxID := SEL3.C_Tax_ID; EXIT; END LOOP; END IF; END; END IF; RETURN v_TaxID; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_gettax(p_product_id character varying, p_shipdate timestamp without time zone, p_org_id character varying, p_warehouse_id character varying, p_billbpartnerloc_id character varying, p_shipbpartnerloc_id character varying, p_project_id character varying, p_issotrx character); publictadfalse23416125536669#c_getwithholding(character varying)FUNCTION?CREATE FUNCTION c_getwithholding(id_invoice_in character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): _Francesco Finamore_______________________. ************************************************************************/ --Cursori usati --TYPE RECORD IS REFCURSOR; curInvoice RECORD; curBusPart RECORD; curBP_WithHold RECORD; curWithHold RECORD; curTaxInps RECORD; --Business Partner IdBusPart varchar(32); --Business Partner WithHolding IdWithHolding varchar(32); IsIncludedTax char(1); IdTax varchar(32); IsPercentWh char(1); baseamountpercent NUMERIC; --WithHolding withpercent NUMERIC; --Tax IsWithHoldingTax char(1); TotCompensi NUMERIC; base_amount NUMERIC; Withholding varchar(32); TaxInps NUMERIC; TaxAmount NUMERIC; BEGIN Withholding:=0; -- Fattura FOR curInvoice IN (SELECT * FROM C_INVOICE WHERE C_INVOICE_ID = id_invoice_in ) LOOP IdBusPart:=curInvoice.C_BPARTNER_ID; IdWithHolding:=curInvoice.C_WITHHOLDING_ID; EXIT; END LOOP; -- Compensi da linee di fattura select sum(LINENETAMT) into TotCompensi from C_INVOICELINE where C_INVOICE_ID= id_invoice_in and COALESCE(EXCLUDEFORWITHHOLDING,'N') <> 'Y' ; -- Dati del Businness Partner FOR curBusPart IN (SELECT * FROM C_BPARTNER WHERE C_BPARTNER_ID = IdBusPart ) LOOP -- IdBusPart:=curBusPart.C_BPARTNER_ID; EXIT; END LOOP; -- WithHolding del Businness Partner FOR curBP_WithHold IN (SELECT * FROM C_BP_WITHHOLDING WHERE C_BPARTNER_ID = IdBusPart and C_WITHHOLDING_ID = IdWithHolding ) LOOP IsIncludedTax := curBP_WithHold.INCLUDE_TAX; IdTax := curBP_WithHold.C_TAX_ID; -- This parameters is for manage the agents, for the other is 100% IsPercentWh := curBP_WithHold.IS_PERCENT_WH; if IsPercentWh ='Y' then baseamountpercent := curBP_WithHold.WH_PERCENT; else baseamountpercent := 100; end if; EXIT; END LOOP; if (IdWithHolding is null) then return 0; end if; -- 1) Calcolo la %ritenuta FOR curWithHold IN (SELECT * FROM C_WITHHOLDING WHERE C_WITHHOLDING_ID = IdWithHolding ) LOOP withpercent:=curWithHold.RATE; EXIT; END LOOP; -- 1) Calcolo la %inps if IsIncludedTax = 'Y' then select coalesce(sum(TAXAMT),0) into TaxAmount from C_invoicetax where C_TAX_ID= IdTax and C_INVOICE_ID = id_invoice_in; FOR curTaxInps IN (SELECT * FROM C_TAX WHERE C_TAX_ID = IdTax ) LOOP IsWithHoldingTax:=curTaxInps.ISWITHHOLDINGTAX; EXIT; END LOOP; if not (IsWithHoldingTax='Y') then TaxAmount := 0; end if; else TaxInps :=0 ; TaxAmount := 0; end if; -- 3) base imponibile base_amount:=TotCompensi*baseamountpercent/100 ; --TaxAmount := TaxInps*base_amount/100; base_amount := base_amount + TaxAmount ; -- 4) Calcolo finale Withholding:=(withpercent*base_amount)/100; Return Withholding; END ; $$ LANGUAGE plpgsql; HDROP FUNCTION public.c_getwithholding(id_invoice_in character varying); publictadfalse234169125595437c_greeting_trg()FUNCTION CREATE FUNCTION c_greeting_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert Translation */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_GREETING_TRL (C_GREETING_TRL_ID, C_GREETING_ID, AD_LANGUAGE, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, NAME, ISTRANSLATED) SELECT get_uuid(), NEW.C_GREETING_ID, AD_LANGUAGE, NEW.AD_CLIENT_ID, NEW.AD_ORG_ID, NEW.ISACTIVE, NEW.CREATED, NEW.CREATEDBY, NEW.UPDATED, NEW.UPDATEDBY, NEW.NAME, 'N' FROM AD_LANGUAGE WHERE ISACTIVE = 'Y' AND ISSYSTEMLANGUAGE = 'Y'; END IF; -- Inserting IF TG_OP = 'UPDATE' THEN IF COALESCE (OLD.NAME, '.') <> COALESCE (NEW.NAME, '.') THEN -- Translation UPDATE C_GREETING_TRL SET ISTRANSLATED = 'N', UPDATED = TO_DATE(NOW()) WHERE C_GREETING_ID = NEW.C_GREETING_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_greeting_trg(); publictadfalse23416125536671"c_ignore_accent(character varying)FUNCTIONCREATE FUNCTION c_ignore_accent(v_str character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN RETURN(TRANSLATE(upper(C_TRIM(v_str)), 'ÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜÑ#Ç', 'AAAAEEEEIIIIOOOOUUUUNNC')); END ; $$ LANGUAGE plpgsql; ?DROP FUNCTION public.c_ignore_accent(v_str character varying); publictadfalse23416:125595439 c_invline_chk_restrictions_trg()FUNCTIONCREATE FUNCTION c_invline_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_C_INVOICE_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Prec NUMERIC:=2; v_Currency VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_INVOICE_ID:=NEW.C_INVOICE_ID; ELSE v_C_INVOICE_ID:=OLD.C_INVOICE_ID; END IF; SELECT PROCESSED, C_CURRENCY_ID INTO v_Processed, v_Currency FROM C_INVOICE WHERE C_INVOICE_ID=v_C_INVOICE_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND ((COALESCE(OLD.LINE, 0) <> COALESCE(NEW.LINE, 0)) OR(COALESCE(OLD.M_PRODUCT_ID, '0') <> COALESCE(NEW.M_PRODUCT_ID, '0')) OR(COALESCE(OLD.QTYINVOICED, 0) <> COALESCE(NEW.QTYINVOICED, 0)) OR(COALESCE(old.LINE, 0) <> COALESCE(NEW.LINE, 0)) OR(COALESCE(OLD.PRICELIST, 0) <> COALESCE(NEW.PRICELIST, 0)) OR(COALESCE(OLD.PRICEACTUAL, 0) <> COALESCE(NEW.PRICEACTUAL, 0)) OR(COALESCE(OLD.PRICELIMIT, 0) <> COALESCE(NEW.PRICELIMIT, 0)) OR(COALESCE(OLD.LINENETAMT, 0) <> COALESCE(NEW.LINENETAMT, 0)) OR(COALESCE(OLD.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0')) OR(COALESCE(OLD.CHARGEAMT, 0) <> COALESCE(NEW.CHARGEAMT, 0)) OR(COALESCE(OLD.C_UOM_ID, '0') <> COALESCE(NEW.C_UOM_ID, '0')) OR(COALESCE(OLD.C_TAX_ID, '0') <> COALESCE(NEW.C_TAX_ID, '0')) OR(COALESCE(OLD.TAXAMT, 0) <> COALESCE(NEW.TAXAMT, 0)) OR(COALESCE(OLD.M_ATTRIBUTESETINSTANCE_ID, '0') <> COALESCE(NEW.M_ATTRIBUTESETINSTANCE_ID, '0')) OR(COALESCE(OLD.QUANTITYORDER, 0) <> COALESCE(NEW.QUANTITYORDER, 0)) OR(COALESCE(OLD.C_ORDERLINE_ID, '0') <> COALESCE(NEW.C_ORDERLINE_ID, '0')) OR(COALESCE(OLD.M_PRODUCT_UOM_ID, '0') <> COALESCE(NEW.M_PRODUCT_UOM_ID, '0')) OR(COALESCE(OLD.AD_ORG_ID, '0') <> COALESCE(NEW.AD_ORG_ID, '0')) OR(COALESCE(OLD.AD_CLIENT_ID, '0') <> COALESCE(NEW.AD_CLIENT_ID, '0')) )) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; -- Rounds linenetAmt and ChargeAmt IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT STDPRECISION INTO v_Prec FROM C_CURRENCY WHERE C_CURRENCY_ID=v_Currency; NEW.LineNetAmt:=ROUND(NEW.LineNetAmt, v_Prec) ; NEW.ChargeAmt:=ROUND(NEW.ChargeAmt, v_Prec) ; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 7DROP FUNCTION public.c_invline_chk_restrictions_trg(); publictadfalse234161255366736c_invoice_cancel(character varying, character varying)FUNCTION@CREATE FUNCTION c_invoice_cancel(p_pinstance_id character varying, p_order_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Cancel Invoices of order by reversing it */ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- Cur_Invoice RECORD; BEGIN -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.AD_Client_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_Client_ID:=Cur_Parameter.AD_Client_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; ELSE v_Record_ID:=p_Order_ID; END IF; BEGIN --BODY IF(v_Record_ID IS NULL) THEN RETURN; END IF; -- For all invoices of order FOR Cur_Invoice IN (SELECT * FROM C_Invoice WHERE C_Order_ID=v_Record_ID AND DocStatus='CO' -- Only completed invoices FOR UPDATE ) LOOP RAISE NOTICE '%','Cancel Invoice ' || Cur_Invoice.DocumentNo || ', ID=' || Cur_Invoice.C_Invoice_ID ; UPDATE C_Invoice SET DocAction='RC', -- Reverse Correction Processed='N', Updated=TO_DATE(NOW()) WHERE C_Invoice.C_Invoice_ID=Cur_Invoice.C_Invoice_ID ; PERFORM C_INVOICE_POST(NULL, Cur_Invoice.C_Invoice_ID) ; END LOOP; -- Order Loop ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $$ LANGUAGE plpgsql; gDROP FUNCTION public.c_invoice_cancel(p_pinstance_id character varying, p_order_id character varying); publictadfalse23416125536675#c_invoice_cancel(character varying)FUNCTIONCREATE FUNCTION c_invoice_cancel(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_INVOICE_CANCEL($1, NULL); END ; $_$ LANGUAGE plpgsql; IDROP FUNCTION public.c_invoice_cancel(p_pinstance_id character varying); publictadfalse234161255564746c_invoice_create(character varying, character varying)FUNCTION|CREATE FUNCTION c_invoice_create(p_pinstance_id character varying, OUT p_invoice_id character varying, p_order_id character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Invoice_Create.sql,v 1.12 2003/08/31 06:49:27 jjanke Exp $ *** * Title: Create Invoice * Description: * - Based on Invoice Rules create Invoice * - Update Order while creating the lines ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_Record_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Order_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_BPartner_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Selection VARCHAR(1):='N'; --OBTG:VARCHAR2-- v_DateInvoiced_aux DATE:=NULL; v_DateOrdered DATE:=NULL; v_InvoiceToDate DATE:=NULL; v_ADUserId VARCHAR(32):=NULL; --OBTG:VARCHAR2-- -- v_DateInvoiced TIMESTAMP; v_NoRecords NUMERIC:=0; v_NoRecNotComplDelivered NUMERIC:=0; -- Orders to process Cur_Order RECORD; -- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(40) ; --OBTG:VARCHAR2-- v_Qty NUMERIC; --MODIFIED BY F.IRIAZABAL v_QtyOrder NUMERIC; v_Reference VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_ReferenceOrder CHAR(1) ; v_DocSubTypeSO VARCHAR(60) ; --OBTG:VARCHAR2-- -- v_LineNo NUMERIC:=0; v_count NUMERIC:=0; Cur_OrderLine_ISOPEN BOOLEAN:=false; Cur_InOutLine_ISOPEN BOOLEAN:=false; v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Order Lines not invoiced Invoice Rule: Immediate DECLARE Cur_OrderLine CURSOR (Order_ID VARCHAR) FOR SELECT * FROM C_ORDERLINE l WHERE QtyOrdered<>QtyInvoiced AND C_Order_ID=Order_ID ORDER BY Line FOR UPDATE; ptr_ol RECORD; --OBTG:Cur_OrderLine-- -- Shipment Lines of Order Lines Invoice Rule: Delivery DECLARE Cur_InOutLine CURSOR (Order_ID VARCHAR) FOR SELECT ol.AD_Client_ID, ol.AD_Org_ID, sl.M_InOut_ID, sl.M_InOutLine_ID, ol.C_OrderLine_ID, COALESCE(sl.Description, ol.Description) AS Description, COALESCE(sl.M_Product_ID, ol.M_Product_ID) AS M_Product_ID, COALESCE(sl.MovementQty, ol.QtyOrdered-ol.QtyInvoiced) AS MovementQty, --MODIFIED BY F.IRIAZABAL sl.QUANTITYORDER, ol.PriceList, ol.PriceActual, ol.PriceLimit, ol.C_Charge_ID, ol.ChargeAmt, COALESCE(sl.C_UOM_ID, ol.C_UOM_ID) AS C_UOM_ID, --MODIFIED BY F.IRIAZABAL sl.M_PRODUCT_UOM_ID, ol.C_Tax_ID, --ol.IsTaxIncluded, ol.Line, ol.DirectShip, ol.PriceStd, ol.m_attributesetinstance_id, ol.taxbaseamt FROM M_INOUT s, M_INOUTLINE sl RIGHT JOIN C_ORDERLINE ol ON sl.C_OrderLine_ID=ol.C_OrderLine_ID WHERE sl.M_InOut_ID IS NOT NULL -- We need to have a shipment AND ol.C_Order_ID=Order_ID -- parameter AND s.M_InOut_ID = sl.M_InOut_ID AND s.DocStatus = 'CO' AND(sl.IsInvoiced IS NULL OR sl.IsInvoiced='N') ORDER BY ol.Line -- single Order FOR UPDATE; ptr_sl RECORD; --OBTG:Cur_InOutLine-- Next_Order BOOLEAN:=FALSE; Next_S_Line BOOLEAN:=FALSE; Next_O_Line BOOLEAN:=FALSE; FINISH_PROCESS BOOLEAN:=FALSE; BEGIN -- Process Parameters IF(p_PInstance_ID IS NOT NULL) THEN -- Check for serial execution RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; SELECT COUNT(*) INTO v_count FROM AD_PINSTANCE WHERE AD_PROCESS_ID IN (SELECT AD_PROCESS_ID FROM AD_PINSTANCE WHERE AD_PInstance_ID=p_PInstance_ID) AND IsProcessing='Y' AND AD_PInstance_ID<>p_PInstance_ID; IF(v_count>0) THEN RAISE EXCEPTION '%', '@SerialProcessStillRunning@' ; --OBTG:-20000-- END IF; -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; v_C_Order_ID:=NULL; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_ADUserId:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='DateInvoiced') THEN v_DateInvoiced_aux:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DateInvoiced=' || v_DateInvoiced_aux ; ELSIF(Cur_Parameter.ParameterName='InvoiceToDate') THEN v_InvoiceToDate:=Cur_Parameter.P_Date; RAISE NOTICE '%',' InvoiceToDate=' || v_InvoiceToDate ; ELSIF(Cur_Parameter.ParameterName='AD_Org_ID') THEN v_AD_Org_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Org_ID=' || v_AD_Org_ID ; ELSIF(Cur_Parameter.ParameterName='C_Order_ID') THEN v_C_Order_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_Order_ID=' || v_C_Order_ID ; ELSIF(Cur_Parameter.ParameterName='C_BPartner_ID') THEN v_BPartner_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BPartner_ID=' || v_BPartner_ID ; ELSIF(Cur_Parameter.ParameterName='Selection') THEN v_Selection:=Cur_Parameter.P_String; RAISE NOTICE '%',' Selection=' || v_Selection ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter ELSE RAISE NOTICE '%','--<>' ; v_C_Order_ID:=p_Order_ID; v_DateInvoiced_aux:=NULL; v_InvoiceToDate:=NULL; v_BPartner_ID:=NULL; v_Selection:='N'; v_ADUserId := '0'; END IF; BEGIN --BODY /** * Order Loop == all not completely invoiced orders == No Summary == */ RAISE NOTICE '%',' C_Order_ID=' || v_C_Order_ID || ', BPartner_ID=' || v_BPartner_ID || ', AD_Org_ID=' || v_AD_Org_ID ; -- For all Orders FOR Cur_Order IN (SELECT * FROM C_ORDER o -- Specific InProgress Order WHERE(C_Order_ID=v_C_Order_ID AND v_Selection = 'N' AND o.DocStatus IN('IP', 'CO')) -- OR all completed and closed orders OR(v_C_Order_ID IS NULL AND v_Selection = 'N' AND o.DocStatus IN('CO', 'CL') AND IsSOTrx='Y' -- not for InvoiceSchedule AND InvoiceRule<>'S' -- of all or a specific business partner / organization AND(v_BPartner_ID IS NULL OR C_BPartner_ID=v_BPartner_ID) AND(v_InvoiceToDate IS NULL OR DateOrderedl.QtyInvoiced ) ORDER BY o.DateOrdered,PriorityRule, C_BPartner_ID, DocumentNo ) LOOP RAISE NOTICE '%','Order ' || Cur_Order.DocumentNo || ', ID=' || Cur_Order.C_Order_ID ; -- Parameter Order Date => Invoice Date, Accounting Date v_DateInvoiced:=v_DateInvoiced_aux; IF(v_DateInvoiced IS NULL) THEN SELECT MAX(s.movementDate) INTO v_DateInvoiced FROM M_INOUT s, M_INOUTLINE sl, C_ORDERLINE ol WHERE s.M_InOut_ID=sl.M_InOut_ID AND sl.C_OrderLine_ID=ol.C_OrderLine_ID AND ol.C_Order_ID=Cur_Order.C_Order_ID; IF(v_DateInvoiced IS NULL) THEN v_DateInvoiced:=Cur_Order.DateOrdered; END IF; END IF; /** * Invoice Rules */ -- (I)mmediate -- Invoice the full/remaining order IF(Cur_Order.InvoiceRule='I') THEN RAISE NOTICE '%','Invoice Rule: Immediate' ; v_ResultStr:='Fetching_OrderLine'; OPEN Cur_OrderLine(Cur_Order.C_Order_ID) ; Cur_OrderLine_ISOPEN:=true; FETCH Cur_OrderLine INTO ptr_ol; IF( NOT FOUND ) THEN --OBTG:Cur_OrderLine-- RAISE NOTICE '%','- No Lines -' ; Next_Order:=TRUE; END IF; IF(NOT Next_Order) THEN -- Shipment Reference (optional) DECLARE Cur_DocTypeCOrder RECORD; BEGIN FOR Cur_DocTypeCOrder IN (SELECT dt.PrintName || ' ' || ox.DocumentNo||' '||( CASE WHEN ox.PoReference IS NULL THEN NULL ELSE '('||ox.PoReference||')' END ) AS Reference FROM C_DOCTYPE dt, C_ORDER ox WHERE dt.C_DocType_ID=ox.C_Order_ID AND ox.C_Order_ID=Cur_Order.C_Order_ID ORDER BY ox.DocumentNo DESC ) LOOP -- last shipment v_Reference:=Cur_DocTypeCOrder.Reference; EXIT; END LOOP; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%','- No ShipReference -' ; END; END IF;--Next_Order -- After (D)elivery -- Check M_InOut for invoice quantity -- After (O)rder completely delivered ELSIF((Cur_Order.InvoiceRule IN('D', 'O'))) THEN RAISE NOTICE '%','Invoice Rule: Delivery and Order completely delivered' ; IF(Cur_Order.InvoiceRule='O') THEN SELECT COUNT(*) INTO v_NoRecNotComplDelivered FROM C_ORDERLINE WHERE C_Order_ID=Cur_Order.C_Order_ID AND qtyOrdered<>qtyDelivered; IF(v_NoRecNotComplDelivered>0) THEN RAISE NOTICE '%','Order not completely delivered' ; Next_Order:=TRUE; END IF; END IF; IF(NOT Next_Order) THEN v_ResultStr:='Fetching_ShipmentLine'; OPEN Cur_InOutLine(Cur_Order.C_Order_ID) ; Cur_InOutLine_ISOPEN:=true; FETCH Cur_InOutLine INTO ptr_sl; IF( NOT FOUND ) THEN --OBTG:Cur_InOutLine-- RAISE NOTICE '%','- No Lines -' ; Next_Order:=TRUE; END IF; END IF;--Next_Order IF(NOT Next_Order) THEN -- Shipment Reference v_ResultStr:='Ship Reference Order_ID=' || Cur_Order.C_Order_ID; SELECT REFERENCE_ORDER INTO v_ReferenceOrder FROM AD_ORGINFO WHERE AD_Org_ID=ptr_sl.AD_Org_ID; IF(v_ReferenceOrder='Y') THEN DECLARE Cur_CDoctypeCOrder RECORD; BEGIN -- last shipment FOR Cur_CDoctypeCOrder IN (SELECT dt.PrintName || ' ' || ox.DocumentNo||' '||( CASE WHEN ox.PoReference IS NULL THEN NULL ELSE '('||ox.PoReference||')' END ) AS Reference FROM C_DOCTYPE dt, C_ORDER ox WHERE dt.C_DocType_ID=ox.C_Order_ID AND ox.C_Order_ID=Cur_Order.C_Order_ID ORDER BY ox.DocumentNo DESC ) LOOP v_Reference:=Cur_CDoctypeCOrder.Reference; EXIT; END LOOP; END; ELSE SELECT dt.PrintName || ' ' || m.DocumentNo||' '||( CASE WHEN m.PoReference IS NULL THEN NULL ELSE '('||m.PoReference||')' END ) INTO v_Reference FROM M_INOUT m, C_DOCTYPE dt WHERE m.C_DocType_ID=dt.C_DocType_ID AND m.M_InOut_ID=ptr_sl.M_InOut_ID; END IF; END IF;--Next_Order -- Do not invoice ELSIF(Cur_Order.InvoiceRule='N') THEN RAISE NOTICE '%','Invoice Rule: Do not invoice' ; Next_Order:=TRUE; -- (S)chedule after Delivery -> Invoice Schedule (ignore here) ELSE Next_Order:=TRUE; END IF; IF(NOT Next_Order) THEN /** * Create Invoice Header --------------------------------------- */ -- Get Order DocType Info - approved from Invoice DocType v_ResultStr:='GetDocTypeInfo - ' || Cur_Order.C_DocType_ID; SELECT od.C_DocTypeInvoice_ID, od.DocSubTypeSO INTO v_DocType_ID, v_DocSubTypeSO FROM C_DOCTYPE od, C_DOCTYPE ID WHERE od.C_DocType_ID=Cur_Order.C_DocType_ID AND od.C_DocTypeInvoice_ID=ID.C_DocType_ID; -- SELECT * INTO p_Invoice_ID FROM Ad_Sequence_Next('C_Invoice', Cur_Order.AD_Client_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DocType_ID, Cur_Order.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Invoice', Cur_Order.AD_Client_ID, 'Y') ; END IF; -- RAISE NOTICE '%',' Invoice_ID=' || p_Invoice_ID || ' DocumentNo=' || v_DocumentNo ; v_ResultStr:='InsertInvoice ' || p_Invoice_ID; INSERT INTO C_INVOICE ( C_Invoice_ID, C_Order_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsSOTrx, DocumentNo, DocStatus, DocAction, Processing, Processed, C_DocType_ID, C_DocTypeTarget_ID, Description, SalesRep_ID, DateInvoiced, DatePrinted, IsPrinted, DateAcct, TaxDate, C_PaymentTerm_ID, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, POReference, DateOrdered, IsDiscountPrinted, C_Currency_ID, PaymentRule, C_Charge_ID, ChargeAmt, IsSelfService, TotalLines, GrandTotal, M_PriceList_ID, C_Campaign_ID, C_Project_ID, C_Activity_ID, AD_OrgTrx_ID, User1_ID, User2_ID ) VALUES ( p_Invoice_ID, Cur_Order.C_Order_ID, Cur_Order.AD_Client_ID, Cur_Order.AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId , Cur_Order.IsSOTrx, v_DocumentNo, 'DR', 'CO', 'N', 'N', v_DocType_ID, v_DocType_ID, Cur_Order.Description, Cur_Order.SalesRep_ID, v_DateInvoiced, NULL, 'N', v_DateInvoiced, v_DateInvoiced, -- DateInvoiced=DateAcct Cur_Order.C_PaymentTerm_ID, Cur_Order.C_BPartner_ID, Cur_Order.BillTo_ID, Cur_Order.AD_User_ID, Cur_Order.POReference, Cur_Order.DateOrdered, Cur_Order.IsDiscountPrinted, Cur_Order.C_Currency_ID, Cur_Order.PaymentRule, Cur_Order.C_Charge_ID, Cur_Order.ChargeAmt, Cur_Order.IsSelfService, 0, 0, Cur_Order.M_PriceList_ID, Cur_Order.C_Campaign_ID, Cur_Order.C_Project_ID, Cur_Order.C_Activity_ID, Cur_Order.AD_OrgTrx_ID, Cur_Order.User1_ID, Cur_Order.User2_ID ) ; -- v_NoRecords:=v_NoRecords + 1; v_LineNo:=0; -- Insert Reference/Comment to Shipment for Warehouse Order/Pickup IF(v_Reference IS NOT NULL AND TRIM(v_Reference)!='' /*AND v_DocSubTypeSO = 'WP'*/ ) THEN v_ResultStr:='InsertShipmentReference'; SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', Cur_Order.C_Order_ID) ; INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID, PriceStd ) VALUES ( v_NextNo, Cur_Order.AD_Client_ID, Cur_Order.AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId, p_Invoice_ID, NULL, NULL, v_LineNo, v_Reference, NULL, 0, 0, 0, 0, 0, NULL, 0, NULL, NULL, 0 ) ; END IF; END IF;--Next_Order IF(NOT Next_Order) THEN /** * Create Lines */ v_ResultStr:='InsertLines InvRule=' || Cur_Order.InvoiceRule; -- (I)mmediate -- Invoice the full/remaining order IF(Cur_Order.InvoiceRule='I') THEN /** * Create Invoice Lines from Order Lines ------------------------- */ LOOP v_Qty:=ptr_ol.QtyOrdered - ptr_ol.QtyInvoiced; --MODIFIED BY F.IRIAZABAL v_QtyOrder:=ptr_ol.QuantityOrder; -- Don't copy zero product lines IF(v_Qty=0 AND ptr_ol.M_Product_ID IS NOT NULL) THEN RAISE NOTICE '%','- Skip 0 Qty line -' ; Next_O_Line:=TRUE; END IF; IF(NOT Next_O_Line) THEN -- SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', Cur_Order.C_Order_ID) ; v_LineNo:=v_LineNo + 10; RAISE NOTICE '%',' Line ' || ptr_ol.Line || ' Qty=' || v_Qty ; v_ResultStr:='CreateInvoiceLine from Order'; INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID, --MODIFIED BY F.IRIAZABAL QuantityOrder, M_Product_Uom_ID, PriceStd, m_attributesetinstance_id, taxbaseamt ) VALUES ( v_NextNo, ptr_ol.AD_Client_ID, ptr_ol.AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId, p_Invoice_ID, ptr_ol.C_OrderLine_ID, NULL, v_LineNo, ptr_ol.Description, ptr_ol.M_Product_ID, v_Qty, ptr_ol.PriceList, ptr_ol.PriceActual, ptr_ol.PriceLimit, C_Currency_Round(v_Qty*ptr_ol.PriceActual, Cur_Order.C_Currency_ID, NULL), ptr_ol.C_Charge_ID, ptr_ol.ChargeAmt, ptr_ol.C_UOM_ID, ptr_ol.C_Tax_ID, --MODIFIED BY F.IRIAZABAL v_QtyOrder, ptr_ol.M_Product_Uom_ID, ptr_ol.PriceStd, ptr_ol.m_attributesetinstance_id, ptr_ol.taxbaseamt ) ; END IF;--Next_O_Line ---- <> Next_O_Line:=FALSE; v_ResultStr:='Fetching_OrderLine(*)'; FETCH Cur_OrderLine INTO ptr_ol; EXIT WHEN NOT FOUND ; --OBTG:Cur_OrderLine-- END LOOP; -- Invoice Line from Order Lines -- After (D)elivery -- Check M_InOut for invoice quantity ELSIF(Cur_Order.InvoiceRule IN('D', 'O')) THEN /** * Create Invoice Lines from Shipment Lines */ LOOP -- Don't copy zero Product lines - or if already invoiced IF(ptr_sl.MovementQty=0 AND ptr_sl.M_Product_ID IS NOT NULL) THEN RAISE NOTICE '%','- Skip 0 Qty line -' ; Next_S_Line:=TRUE; END IF; IF(NOT Next_S_Line) THEN -- SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', Cur_Order.C_Order_ID) ; v_LineNo:=v_LineNo + 10; RAISE NOTICE '%',' Line ' || ptr_sl.Line || ' Qty=' || ptr_sl.MovementQty ; v_ResultStr:='CreateInvoiceLine from Shipment'; INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID, --MODIFIED BY F.IRIAZABAL QuantityOrder, M_Product_Uom_ID, PriceStd, m_attributesetinstance_id, taxbaseamt ) VALUES ( v_NextNo, ptr_sl.AD_Client_ID, ptr_sl.AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId, p_Invoice_ID, ptr_sl.C_OrderLine_ID, ptr_sl.M_InOutLine_ID, v_LineNo, ptr_sl.Description, ptr_sl.M_Product_ID, ptr_sl.MovementQty, ptr_sl.PriceList, ptr_sl.PriceActual, ptr_sl.PriceLimit, C_Currency_Round(ptr_sl.MovementQty*ptr_sl.PriceActual, Cur_Order.C_Currency_ID, NULL), ptr_sl.C_Charge_ID, ptr_sl.ChargeAmt, ptr_sl.C_UOM_ID, ptr_sl.C_Tax_ID, --MODIFIED BY F.IRIAZABAL ptr_sl.QuantityOrder, ptr_sl.M_Product_Uom_ID, ptr_sl.PriceStd, ptr_sl.m_attributesetinstance_id, ptr_sl.taxbaseamt ) ; END IF;--Next_S_Line ---- <> Next_S_Line:=FALSE; v_ResultStr:='Fetching_ShipmentLine(*)'; FETCH Cur_InOutLine INTO ptr_sl; EXIT WHEN NOT FOUND ; --OBTG:Cur_InOutLine-- END LOOP; END IF; -- Post it PERFORM C_INVOICE_POST(NULL, p_Invoice_ID) ; --Added by p.Sarobe IF(p_Invoice_ID='0') THEN RAISE EXCEPTION '%', '@InvoiceCreateFailed@'; --OBTG:-20000-- ELSE SELECT documentno INTO v_DocumentNo FROM C_INVOICE WHERE C_INVOICE_ID = p_Invoice_ID; v_Message:=v_Message||', '||'@InvoiceDocumentno@ ' || v_DocumentNo; END IF; --Finished added by P.Sarobe END IF;--Next_Order ---- <> Next_Order:=FALSE; v_ResultStr:='ClosingLine'; IF(Cur_OrderLine_ISOPEN) THEN CLOSE Cur_OrderLine; Cur_OrderLine_ISOPEN:=false; END IF; IF(Cur_InOutLine_ISOPEN) THEN CLOSE Cur_InOutLine; Cur_InOutLine_ISOPEN:=false; END IF; END LOOP; -- Order Loop /** * Invoice Schedule ====================================================== */ IF(p_PInstance_ID IS NOT NULL AND v_C_Order_ID IS NULL) THEN -- Not when processing a single order DECLARE -- Invoice Schedule Lines Cur_InvoiceSchedule RECORD; v_Partner_ID VARCHAR(32):='-1'; --OBTG:VARCHAR2-- v_InOut_ID VARCHAR(32):='-1'; --OBTG:VARCHAR2-- v_gOrg_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gOrder_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gInOut_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gBillTo_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gBPartner_Location_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gSalesRep_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gPaymentRule CHAR(1) ; v_gPaymentTerm_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gCurrency_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gCampaign_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gProject_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gActivitiy_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gOrgTrx_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gUser1_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_gUser2_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_description VARCHAR(120) ; --OBTG:NVARCHAR2-- BEGIN p_Invoice_ID:='-1'; RAISE NOTICE '%',' BPartner_ID=' || v_BPartner_ID || ', AD_Org_ID=' || v_AD_Org_ID ; FOR Cur_InvoiceSchedule IN (SELECT sh.AD_Client_ID, sh.AD_Org_ID, sh.M_InOut_ID, sh.C_DocType_ID, ( CASE ao.Reference_Order WHEN 'Y' THEN o.DocumentNo ELSE sh.DocumentNo END ) AS DocumentNo, sh.Description, sh.C_BPartner_ID, o.BillTo_ID, o.C_BPartner_Location_ID, sh.AD_User_ID, sh.DateOrdered, sh.C_Order_ID, o.SalesRep_ID, COALESCE(o.C_PaymentTerm_ID, bp.C_PaymentTerm_ID) AS C_PaymentTerm_ID, COALESCE(o.IsDiscountPrinted, bp.IsDiscountPrinted) AS IsDiscountPrinted, o.C_Currency_ID, COALESCE(o.PaymentRule, bp.PaymentRule) AS PaymentRule, COALESCE(o.M_PriceList_ID, bp.M_PriceList_ID) AS M_PriceList_ID, o.C_Campaign_ID, o.C_Project_ID, o.C_Activity_ID, o.AD_OrgTrx_ID, o.User1_ID, o.User2_ID, bp.C_InvoiceSchedule_ID, o.InvoiceRule, RPAD(bp.InvoiceGrouping, 15, '0') AS InvoiceGrouping, sh.POReference, sh.C_Charge_ID, COALESCE(sh.ChargeAmt, 0) AS ChargeAmt, -- sl.AD_Org_ID AS Line_AD_Org_ID, sl.M_InOutLine_ID, sl.Line, sl.Description AS Line_Description, sl.C_OrderLine_ID, sl.M_Product_ID, sl.C_UOM_ID, sl.MovementQty, --MODIFIED BY F.IRIAZABAL sl.QuantityOrder, sl.M_Product_UOM_ID, COALESCE(ol.PriceList, 0) AS PriceList, COALESCE(ol.PriceActual, 0) AS PriceActual, COALESCE(ol.PriceLimit, 0) AS PriceLimit, ol.C_Tax_ID, --ol.IsTaxIncluded, -- Could be NULL !! ol.C_Charge_ID AS Line_C_Charge_ID, COALESCE(ol.ChargeAmt, 0) AS Line_ChargeAmt, sh.movementDate, ol.PriceStd, ol.m_attributesetinstance_id, ol.taxbaseamt FROM M_INOUT sh, M_INOUTLINE sl, C_ORDER o, C_ORDERLINE ol, AD_ORGINFO ao, C_BPARTNER bp LEFT JOIN (SELECT C_InvoiceSchedule_ID, C_Invoicetodate(InvoiceFrequency,( CASE InvoiceFrequency WHEN 'W' THEN TO_NUMBER(InvoiceWeekday) ELSE InvoiceDay END ), ( CASE InvoiceFrequency WHEN 'W' THEN TO_NUMBER(InvoiceWeekDayCutoff) ELSE InvoiceDayCutoff END ), TO_DATE(NOW())) AS DateLimit FROM C_INVOICESCHEDULE ) si ON bp.C_InvoiceSchedule_ID=si.C_InvoiceSchedule_ID WHERE sh.M_InOut_ID=sl.M_InOut_ID AND sh.C_BPartner_ID=bp.C_BPartner_ID AND ol.C_Order_ID=o.C_Order_ID AND sl.C_OrderLine_ID=ol.C_OrderLine_ID AND sh.AD_Org_ID=ao.AD_Org_ID -- for all BPartners or a specific AND(v_BPartner_ID IS NULL OR sh.C_BPartner_ID=v_BPartner_ID) -- for all Organizations or a specific AND(v_AD_Org_ID IS NULL OR sh.AD_Org_ID=v_AD_Org_ID) -- completed shipments AND o.DocStatus IN('CO', 'CL') AND o.IsSOTrx='Y' -- completed orders AND sh.DocStatus IN('CO', 'CL') -- we need to invoice - and not invoiced AND ol.QtyOrdered<>ol.QtyInvoiced AND sl.IsInvoiced<>'Y' -- just invoice scheduled or after delivery orders (invoiceRule Scheduled or after delivery). (O)rder completely delivered pending!!! AND o.InvoiceRule IN('S', 'D') -- not invoice logistic inouts AND(sh.IsLogistic='N' OR sh.IsLogistic IS NULL) -- enforce limitDate to invoice AND(v_InvoiceToDate IS NULL OR TRUNC(o.DateOrdered)<=v_InvoiceToDate) -- Selection AND((v_Selection='Y' AND o.IsSelected='Y') -- or scheduled OR(v_Selection<>'Y' AND(si.DateLimit IS NULL OR TRUNC(o.DateOrdered)<=si.DateLimit)) ) ORDER BY sh.C_BPartner_ID, ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 1, 1)) WHEN '0' THEN '0' ELSE sh.AD_Org_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 2, 1)) WHEN '0' THEN '0' ELSE sh.C_Order_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 3, 1)) WHEN '0' THEN '0' ELSE sh.M_InOut_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 4, 1)) WHEN '0' THEN '0' ELSE o.BillTo_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 5, 1)) WHEN '0' THEN '0' ELSE o.C_BPartner_Location_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 6, 1)) WHEN '0' THEN '0' ELSE o.SalesRep_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 7, 1)) WHEN '0' THEN '0' ELSE COALESCE(o.PaymentRule, bp.PaymentRule) END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 8, 1)) WHEN '0' THEN '0' ELSE COALESCE(o.C_PaymentTerm_ID, bp.C_PaymentTerm_ID) END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 8, 1)) WHEN '0' THEN '0' ELSE o.C_Currency_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 10, 1)) WHEN '0' THEN '0' ELSE o.C_Campaign_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 11, 1)) WHEN '0' THEN '0' ELSE o.C_Project_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 12, 1)) WHEN '0' THEN '0' ELSE o.C_Activity_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 13, 1)) WHEN '0' THEN '0' ELSE o.AD_OrgTrx_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 14, 1)) WHEN '0' THEN '0' ELSE o.User1_ID END ) ||'-'|| ( CASE TO_CHAR(SUBSTR(RPAD(bp.InvoiceGrouping, 15, '0'), 15, 1)) WHEN '0' THEN '0' ELSE o.User2_ID END ), sh.MovementDate, sh.M_InOut_ID, sl.Line ) LOOP -- Invoice Date from Parameter -- or Order v_DateInvoiced:=COALESCE(v_DateInvoiced_aux, COALESCE(v_DateOrdered, TO_DATE(NOW()))) ; -- si.DateOrdered); -- Summary Invoice only if BP has Schedule setup and selected in invoice IF(NOT(Cur_InvoiceSchedule.C_InvoiceSchedule_ID IS NOT NULL AND Cur_InvoiceSchedule.InvoiceRule='S') AND v_InOut_ID<>Cur_InvoiceSchedule.M_InOut_ID) THEN -- and new document v_Partner_ID:='-2'; -- indicate BP change to force new invoice END IF; -- BPartner changed - New Invoice /* 1.-Order organization (AD_Org_ID) 2.-Order (C_Order_ID) 3.-Shipment (M_InOut_ID) 4.-Invoice location (BillTo_ID) 5.-Ship location (C_BPartner_Location_ID) 6.-Sales representative (SalesRep_ID) 7.-Payment rule (PaymentRule) 8.-Payment term (C_PaymentTerm_ID) 9.-Currency (C_Currency_ID) 10.-Campaign (C_Campaign_ID) 11.-Project (C_Project_ID) 12.-Activity (C_Activity_ID) 13.-Organization transaction (AD_OrgTrx_ID) 14.-User dimension 1 (User1_ID) 15.-User dimension 2 (User2_ID) */ IF((v_Partner_ID<>Cur_InvoiceSchedule.C_BPartner_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 1, 1)='1' AND v_gOrg_ID<>Cur_InvoiceSchedule.AD_Org_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 2, 1)='1' AND v_gOrder_ID<>Cur_InvoiceSchedule.C_Order_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 3, 1)='1' AND v_gInOut_ID<>Cur_InvoiceSchedule.M_InOut_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 4, 1)='1' AND v_gBillTo_ID<>Cur_InvoiceSchedule.BillTo_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 5, 1)='1' AND v_gBPartner_Location_ID<>Cur_InvoiceSchedule.C_BPartner_Location_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 6, 1)='1' AND v_gSalesRep_ID<>Cur_InvoiceSchedule.SalesRep_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 7, 1)='1' AND v_gPaymentRule<>Cur_InvoiceSchedule.PaymentRule) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 8, 1)='1' AND v_gPaymentTerm_ID<>Cur_InvoiceSchedule.C_PaymentTerm_ID) OR(SUBSTR( Cur_InvoiceSchedule.InvoiceGrouping, 9, 1)='1' AND v_gCurrency_ID<>Cur_InvoiceSchedule.C_Currency_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 10, 1)='1' AND v_gCampaign_ID<>Cur_InvoiceSchedule.C_Campaign_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 11, 1)='1' AND v_gProject_ID<>Cur_InvoiceSchedule.C_Project_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 12, 1)='1' AND v_gActivitiy_ID<>Cur_InvoiceSchedule.C_Activity_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 13, 1)='1' AND v_gOrgTrx_ID<>Cur_InvoiceSchedule.AD_OrgTrx_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 14, 1)='1' AND v_gUser1_ID<>Cur_InvoiceSchedule.User1_ID) OR(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 15, 1)='1' AND v_gUser2_ID<>Cur_InvoiceSchedule.User2_ID)) THEN v_Partner_ID:=Cur_InvoiceSchedule.C_BPartner_ID; v_gOrg_ID:=Cur_InvoiceSchedule.AD_Org_ID; v_gOrder_ID:=Cur_InvoiceSchedule.C_Order_ID; v_gInOut_ID:=Cur_InvoiceSchedule.M_InOut_ID; v_gBillTo_ID:=Cur_InvoiceSchedule.BillTo_ID; v_gBPartner_Location_ID:=Cur_InvoiceSchedule.C_BPartner_Location_ID; v_gSalesRep_ID:=Cur_InvoiceSchedule.SalesRep_ID; v_gPaymentRule:=Cur_InvoiceSchedule.PaymentRule; v_gPaymentTerm_ID:=Cur_InvoiceSchedule.C_PaymentTerm_ID; v_gCurrency_ID:=Cur_InvoiceSchedule.C_Currency_ID; v_gCampaign_ID:=Cur_InvoiceSchedule.C_Campaign_ID; v_gProject_ID:=Cur_InvoiceSchedule.C_Project_ID; v_gActivitiy_ID:=Cur_InvoiceSchedule.C_Activity_ID; v_gOrgTrx_ID:=Cur_InvoiceSchedule.AD_OrgTrx_ID; v_gUser1_ID:=Cur_InvoiceSchedule.User1_ID; v_gUser2_ID:=Cur_InvoiceSchedule.User2_ID; IF(SUBSTR(Cur_InvoiceSchedule.InvoiceGrouping, 5, 1)='1') THEN SELECT NAME INTO v_description FROM C_BPARTNER_LOCATION WHERE C_BPARTNER_LOCATION_ID=v_gBPartner_Location_ID; ELSE v_description:=NULL; END IF; -- Post it, if not first time IF(p_Invoice_ID<>'-1') THEN UPDATE C_INVOICE SET DateInvoiced=v_DateInvoiced, DateAcct=v_DateInvoiced WHERE C_Invoice_ID=p_Invoice_ID; PERFORM C_INVOICE_POST(NULL, p_Invoice_ID) ; END IF; -- Get Document Type for Invoice v_ResultStr:='GetDocumentType'; IF(Cur_InvoiceSchedule.C_Order_ID IS NULL) THEN BEGIN v_DocType_ID:=Ad_Get_Doctype(Cur_InvoiceSchedule.AD_Client_ID, Cur_InvoiceSchedule.AD_Org_ID, 'ARI') ; -- EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '%', '@NoDefaultInvoice@' ; --OBTG:-20000-- END; ELSE SELECT od.C_DocTypeInvoice_ID INTO v_DocType_ID FROM C_DOCTYPE od, C_DOCTYPE ID, C_ORDER o WHERE od.C_DocType_ID=o.C_DocType_ID AND od.C_DocTypeInvoice_ID=ID.C_DocType_ID AND o.C_Order_ID=Cur_InvoiceSchedule.C_Order_ID; END IF; IF(NOT FINISH_PROCESS) THEN -- Get other defaults SELECT * INTO p_Invoice_ID FROM Ad_Sequence_Next('C_Invoice', Cur_InvoiceSchedule.AD_Client_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DocType_ID, Cur_InvoiceSchedule.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Invoice', Cur_InvoiceSchedule.AD_Client_ID, 'Y') ; END IF; -- RAISE NOTICE '%',' SumInvoice_ID=' || p_Invoice_ID || ' DocumentNo=' || v_DocumentNo ; v_ResultStr:='InsertSumInvoice ' || p_Invoice_ID; INSERT INTO C_INVOICE ( C_Invoice_ID, C_Order_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsSOTrx, DocumentNo, DocStatus, DocAction, Processing, Processed, C_DocType_ID, C_DocTypeTarget_ID, Description, SalesRep_ID, DateInvoiced, DatePrinted, IsPrinted, DateAcct, TaxDate, C_PaymentTerm_ID, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, POReference, DateOrdered, IsDiscountPrinted, C_Currency_ID, PaymentRule, C_Charge_ID, ChargeAmt, IsSelfService, TotalLines, GrandTotal, M_PriceList_ID, C_Campaign_ID, C_Project_ID, C_Activity_ID, AD_OrgTrx_ID, User1_ID, User2_ID ) VALUES ( p_Invoice_ID, Cur_InvoiceSchedule.C_Order_ID, Cur_InvoiceSchedule.AD_Client_ID, Cur_InvoiceSchedule.AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId, 'Y', v_DocumentNo, 'DR', 'CO', 'N', 'N', v_DocType_ID, v_DocType_ID, v_description, Cur_InvoiceSchedule.SalesRep_ID, v_DateInvoiced, NULL, 'N', v_DateInvoiced, v_DateInvoiced, -- DateInvoiced=DateAcct Cur_InvoiceSchedule.C_PaymentTerm_ID, Cur_InvoiceSchedule.C_BPartner_ID, Cur_InvoiceSchedule.BillTo_ID, Cur_InvoiceSchedule.AD_User_ID, Cur_InvoiceSchedule.POReference, Cur_InvoiceSchedule.DateOrdered, Cur_InvoiceSchedule.IsDiscountPrinted, Cur_InvoiceSchedule.C_Currency_ID, Cur_InvoiceSchedule.PaymentRule, NULL, 0, 'N', 0, 0, Cur_InvoiceSchedule.M_PriceList_ID, Cur_InvoiceSchedule.C_Campaign_ID, Cur_InvoiceSchedule.C_Project_ID, Cur_InvoiceSchedule.C_Activity_ID, Cur_InvoiceSchedule.AD_OrgTrx_ID, Cur_InvoiceSchedule.User1_ID, Cur_InvoiceSchedule.User2_ID ) ; -- v_NoRecords:=v_NoRecords + 1; v_LineNo:=0; v_InOut_ID:='-1'; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- New Shipment IF(Cur_InvoiceSchedule.M_InOut_ID<>v_InOut_ID) THEN v_InOut_ID:=Cur_InvoiceSchedule.M_InOut_ID; -- Get Reference Info SELECT PrintName INTO v_Reference FROM C_DOCTYPE dt WHERE C_DocType_ID=Cur_InvoiceSchedule.C_DocType_ID; v_Reference:=v_Reference || ' ' || Cur_InvoiceSchedule.DocumentNo; -- Date would come here IF(Cur_InvoiceSchedule.POReference IS NOT NULL) THEN v_Reference:=v_Reference || ' (' || Cur_InvoiceSchedule.POReference || ')'; END IF; v_Reference:=v_Reference || ': ' || Cur_InvoiceSchedule.Description; -- Reference/Comment Line v_ResultStr:='InsertSumShipmentReference'; SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', Cur_InvoiceSchedule.C_Order_ID) ; v_LineNo:=v_LineNo + 10; INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID, PriceStd ) VALUES ( v_NextNo, Cur_InvoiceSchedule.AD_Client_ID, Cur_InvoiceSchedule.AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId, p_Invoice_ID, NULL, NULL, v_LineNo, v_Reference, NULL, 0, 0, 0, 0, 0, Cur_InvoiceSchedule.C_Charge_ID, Cur_InvoiceSchedule.ChargeAmt, NULL, NULL, 0 ) ; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- Normal Line SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', Cur_InvoiceSchedule.C_Order_ID) ; v_LineNo:=v_LineNo + 10; RAISE NOTICE '%',' SumLine ' || Cur_InvoiceSchedule.Line || ' Qty=' || Cur_InvoiceSchedule.MovementQty ; v_ResultStr:='CreateInvoiceLine_Sum'; INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID, --MODIFIED BY F.IRIAZABAL QuantityOrder, M_Product_Uom_ID, PriceStd, m_attributesetinstance_id, taxbaseamt ) VALUES ( v_NextNo, Cur_InvoiceSchedule.AD_Client_ID, Cur_InvoiceSchedule.Line_AD_Org_ID, 'Y', TO_DATE(NOW()), v_ADUserId, TO_DATE(NOW()), v_ADUserId, p_Invoice_ID, Cur_InvoiceSchedule.C_OrderLine_ID, Cur_InvoiceSchedule.M_InOutLine_ID, v_LineNo, Cur_InvoiceSchedule.Line_Description, Cur_InvoiceSchedule.M_Product_ID, Cur_InvoiceSchedule.MovementQty, Cur_InvoiceSchedule.PriceList, Cur_InvoiceSchedule.PriceActual, Cur_InvoiceSchedule.PriceLimit, C_Currency_Round(Cur_InvoiceSchedule.MovementQty*Cur_InvoiceSchedule.PriceActual, Cur_InvoiceSchedule.C_Currency_ID, NULL), Cur_InvoiceSchedule.Line_C_Charge_ID, Cur_InvoiceSchedule.Line_ChargeAmt, Cur_InvoiceSchedule.C_UOM_ID, Cur_InvoiceSchedule.C_Tax_ID, --MODIFIED BY F.IRIAZABAL Cur_InvoiceSchedule.QuantityOrder, Cur_InvoiceSchedule.M_Product_Uom_ID, Cur_InvoiceSchedule.PriceStd, Cur_InvoiceSchedule.m_attributesetinstance_id, Cur_InvoiceSchedule.taxbaseamt ) ; v_DateOrdered:=COALESCE(Cur_InvoiceSchedule.movementDate, COALESCE(Cur_InvoiceSchedule.DateOrdered, TO_DATE(NOW()))) ; END IF;-- END LOOP; -- Invoice Schedule IF(NOT FINISH_PROCESS) THEN -- Post last invoice, if exists IF(p_Invoice_ID<>'-1') THEN v_DateInvoiced:=COALESCE(v_DateInvoiced_aux, COALESCE(v_DateOrdered, TO_DATE(NOW()))) ; UPDATE C_INVOICE SET DateInvoiced=v_DateInvoiced, DateAcct=v_DateInvoiced WHERE C_Invoice_ID=p_Invoice_ID; PERFORM C_INVOICE_POST(NULL, p_Invoice_ID) ; IF(p_Invoice_ID='0') THEN RAISE EXCEPTION '%', '@InvoiceCreateFailed@'; --OBTG:-20000-- ELSE SELECT documentno INTO v_DocumentNo FROM C_INVOICE WHERE C_INVOICE_ID = p_Invoice_ID; v_Message:=v_Message||', '||'@InvoiceDocumentno@ ' || v_DocumentNo; END IF; END IF; END IF;--FINISH_PROCESS END; -- Block END IF; -- PInstance not null ---- <> v_Message:='@Created@: ' || v_NoRecords||v_Message; IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; ELSE RAISE NOTICE '%','--<> ' || v_Message ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%',v_ResultStr ; v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; p_Invoice_ID:=0; -- Error Indicator RETURN; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_invoice_create(p_pinstance_id character varying, OUT p_invoice_id character varying, p_order_id character varying); publictadfalse23416125556476#c_invoice_create(character varying)FUNCTIONCREATE FUNCTION c_invoice_create(p_pinstance_id character varying, OUT p_invoice_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $2 FROM C_INVOICE_CREATE($1, NULL); END ; $_$ LANGUAGE plpgsql; mDROP FUNCTION public.c_invoice_create(p_pinstance_id character varying, OUT p_invoice_id character varying); publictadfalse23416125536679$c_invoice_create0(character varying)FUNCTION=CREATE FUNCTION c_invoice_create0(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Invoice_Create0.sql,v 1.2 2002/06/08 03:25:03 jjanke Exp $ *** * Title: Create Invoice * Description: ************************************************************************/ v_Dummy VARCHAR(32); --OBTG:varchar2-- BEGIN SELECT * INTO v_Dummy FROM C_Invoice_Create(p_PInstance_ID, NULL) ; END ; $_$ LANGUAGE plpgsql; JDROP FUNCTION public.c_invoice_create0(p_pinstance_id character varying); publictadfalse23416125536680*c_invoice_createreceipt(character varying)FUNCTIONoCREATE FUNCTION c_invoice_createreceipt(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Invoice_CreateReceipt.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Create Receipt (Shipment) From Invoice * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_M_Locator_ID VARCHAR(32); --OBTG:VARCHAR2-- -- v_DocStatus VARCHAR(60) ; --OBTG:VARCHAR2-- v_InOut_ID VARCHAR(32); --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=false; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP IF(Cur_Parameter.ParameterName='M_Locator_ID') THEN v_M_Locator_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' M_Locator_ID=' || v_M_Locator_ID ; END IF; v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Read Information from Record v_ResultStr:='Reading Record'; SELECT DocStatus INTO v_DocStatus FROM C_Invoice WHERE C_Invoice_ID=v_Record_ID; -- Invoice must be complete IF(v_DocStatus NOT IN('CO', 'CL')) THEN RAISE EXCEPTION '%', '@InvoiceCreateDocNotCompleted@'; --OBTG:-20000-- END IF; -- Check, if we have a Shipment already IF(NOT FINISH_PROCESS) THEN DECLARE v_DocumentNo VARCHAR(60) ; --OBTG:VARCHAR2-- Cur_MInOut RECORD; BEGIN v_ResultStr:='Check Receipt exists'; FOR Cur_MInOut IN (SELECT M_InOut_ID, DocumentNo FROM M_InOut WHERE C_Invoice_ID=v_Record_ID) LOOP v_DocumentNo:=Cur_MInOut.DocumentNo; v_Message:='@InvoiceCreateDocAlreadyExists@ = ' || v_DocumentNo; RAISE EXCEPTION '%', v_Message; --OBTG:-20000-- EXIT; END LOOP; EXCEPTION WHEN OTHERS THEN NULL; END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- Create (and post) the shipment v_ResultStr:='Create Shipment'; SELECT * INTO v_InOut_ID FROM M_InOut_Create(NULL, NULL, v_Record_ID, 'Y', v_M_Locator_ID) ; RAISE NOTICE '%',' Shipment - ' || v_InOut_ID ; IF(v_InOut_ID='0') THEN RAISE EXCEPTION '%', '@InOutCreateFailed@'; --OBTG:-20000-- END IF; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; PDROP FUNCTION public.c_invoice_createreceipt(p_pinstance_id character varying); publictadfalse23416125536682,c_invoice_percentage_paid(character varying)FUNCTION CREATE FUNCTION c_invoice_percentage_paid(p_invoice_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_percentaje NUMERIC; BEGIN SELECT SUM(C_DB_PERCENTAGE_PAID(DB.C_Debt_Payment_ID)* C_Currency_Convert(DB.amount,DB.C_Currency_ID,I.C_Currency_ID, TO_DATE(NOW()), null, I.AD_Client_ID, I.AD_Org_ID))/ (CASE SUM(C_Currency_Convert(DB.amount,DB.C_Currency_ID,I.C_Currency_ID, TO_DATE(NOW()), null, I.AD_Client_ID, I.AD_Org_ID)) WHEN 0 THEN to_number(NULL) ELSE SUM(C_Currency_Convert(DB.amount,DB.C_Currency_ID,I.C_Currency_ID, TO_DATE(NOW()), null, I.AD_Client_ID, I.AD_Org_ID)) END) INTO v_percentaje FROM C_DEBT_PAYMENT DB, C_Invoice I WHERE DB.C_Invoice_ID = I.C_Invoice_ID AND I.C_INVOICE_ID = p_Invoice_ID; RETURN ROUND(v_percentaje,4); END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.c_invoice_percentage_paid(p_invoice_id character varying); publictadfalse234161255564774c_invoice_post(character varying, character varying)FUNCTION"@CREATE FUNCTION c_invoice_post(p_pinstance_id character varying, p_invoice_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2010 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Invoice_Post.sql,v 1.32 2003/07/22 05:41:27 jjanke Exp $ *** * Title: Post single Invoice * Description: * Actions: COmplete, APprove, Reverse Correction, Void * * OpenItem Amount: * - C_BPartner.SO_CreditUsed is increased * - if C_CashLine entry is created * - C_Cash_Post creates C_Allocation * - C_Allocation_Trg decreases C_BPartner.SO_CreditUsed * ************************************************************************/ withholdamount NUMERIC(10,2); cWithHoldId VARCHAR(32); --OBTG:varchar2-- -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- Success v_TOTAL NUMERIC; v_C_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_line RECORD; -- Record Info v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_UpdatedBy C_INVOICE.UpdatedBy%TYPE; v_Processing C_INVOICE.Processing%TYPE; v_Processed C_INVOICE.Processed%TYPE; v_DocAction C_INVOICE.DocAction%TYPE; v_DocStatus C_INVOICE.DocStatus%TYPE; v_DoctypeReversed_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocTypeTarget_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PaymentRule C_INVOICE.PaymentRule%TYPE; v_PaymentTerm C_INVOICE.C_PaymentTerm_ID%TYPE; v_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DateAcct TIMESTAMP; v_DateInvoiced TIMESTAMP; v_DocumentNo C_INVOICE.DocumentNo%TYPE; v_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_BPartner_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_IsSOTrx C_INVOICE.IsSOTrx%TYPE; v_Posted C_INVOICE.Posted%TYPE; --Added by P.SAROBE v_documentno_Settlement VARCHAR(40); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_Cancel_Processed CHAR(1); v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_Bankstatementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Debtpayment_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ispaid CHAR(1); v_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- --Finish added by P.Sarobe -- v_GrandTotal NUMERIC:=0; v_TotalLines NUMERIC:=0; v_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Multiplier NUMERIC:=1; v_Amount NUMERIC:=0;--CashLine amount -- v_RInvoice_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RDocumentNo C_INVOICE.DocumentNo%TYPE; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_count NUMERIC; V_InvoiceLines_count NUMERIC; v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_POReference VARCHAR(40) ; --OBTG:NVARCHAR2-- -- v_SettlementDocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_SDocumentNo C_SETTLEMENT.DocumentNo%TYPE; v_settlementID VARCHAR(32):=NULL; --OBTG:varchar2-- -- v_FirstSales C_BPARTNER.FirstSale%TYPE; v_REInOutStatus M_INOUT.DocStatus%TYPE; v_RECount NUMERIC:=0; v_REDateInvoiced TIMESTAMP; v_REtotalQtyInvoiced NUMERIC:=0; v_REdeliveredQty NUMERIC:=0; -- v_CumDiscount NUMERIC; v_OldCumDiscount NUMERIC; v_InvoiceLineSeqNo NUMERIC; v_InvoiceLine VARCHAR(32); --OBTG:VARCHAR2-- v_Discount NUMERIC; v_Line NUMERIC; v_InvoiceDiscount NUMERIC; v_C_Project_ID VARCHAR(32); --OBTG:VARCHAR2-- v_acctAmount NUMERIC; v_realAmount NUMERIC; v_partialAmount NUMERIC; Cur_InvoiceLine RECORD; Cur_Discount RECORD; Cur_CInvoiceDiscount RECORD; Cur_TaxDiscount RECORD; Cur_ReactivateInvoiceLine RECORD; Cur_LastContact RECORD; FINISH_PROCESS BOOLEAN:=FALSE; END_PROCESSING BOOLEAN:=FALSE; V_Aux NUMERIC; v_TargetDocBaseType C_DOCTYPE.DocBaseType%TYPE; v_MultiplierARC NUMERIC:=1; v_is_included NUMERIC:=0; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; v_PeriodStartDate TIMESTAMP; v_PeriodEndDate TIMESTAMP; v_DocNo_Org_ID AD_Sequence.AD_Org_ID%TYPE; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' v_Record_ID=' || v_Record_ID ; ELSE RAISE NOTICE '%','--<>' ; v_Record_ID:=p_Invoice_ID; END IF; BEGIN --BODY /*Invoiceline acct dimension*/ SELECT C_INVOICE.ISSOTRX INTO v_IsSOTrx FROM C_INVOICE WHERE C_INVOICE_ID = v_Record_ID; IF (v_IsSOTrx = 'N') THEN FOR Cur_line IN (SELECT C_INVOICELINE.C_InvoiceLine_ID, C_INVOICELINE.LinenetAmt FROM C_INVOICELINE WHERE C_Invoice_ID = v_Record_ID ) LOOP SELECT SUM(Amt) INTO v_acctAmount FROM C_INVOICELINE_ACCTDIMENSION WHERE C_InvoiceLine_ID = Cur_line.C_InvoiceLine_ID; IF (v_acctAmount <> Cur_line.LinenetAmt) THEN v_Message:='@QuantitiesNotMatch@'; RAISE EXCEPTION '%', '@QuantitiesNotMatch@' ; --OBTG:-20000-- END IF; END LOOP; END IF; /** * Read Invoice */ v_ResultStr:='ReadingInvoice'; SELECT Processing, Processed, DocAction, DocStatus, C_DocType_ID, C_DocTypeTarget_ID, PaymentRule, C_PaymentTerm_ID, DateAcct, DateInvoiced, AD_Client_ID, AD_Org_ID, UpdatedBy, DocumentNo, C_Order_ID, IsSOTrx, C_BPartner_ID, AD_User_ID, C_Currency_ID, AD_Org_ID, POReference, Posted, c_Project_Id, C_WithHolding_ID INTO v_Processing, v_Processed, v_DocAction, v_DocStatus, v_DocType_ID, v_DocTypeTarget_ID, v_PaymentRule, v_PaymentTerm, v_DateAcct, v_DateInvoiced, v_Client_ID, v_Org_ID, v_UpdatedBy, v_DocumentNo, v_Order_ID, v_IsSOTrx, v_BPartner_ID, v_BPartner_User_ID, v_Currency_ID, v_AD_Org_ID, v_POReference, v_Posted, v_C_Project_Id, cWithHoldID FROM C_INVOICE WHERE C_Invoice_ID=v_Record_ID FOR UPDATE; RAISE NOTICE '%','Invoice_ID=' || v_Record_ID ||', DocAction=' || v_DocAction || ', DocStatus=' || v_DocStatus || ', DocType_ID=' || v_DocType_ID || ', DocTypeTarget_ID=' || v_DocTypeTarget_ID ; /** * Invoice Voided, Closed, or Reversed - No Action */ IF(v_DocStatus IN('VO', 'CL', 'RE')) THEN RAISE EXCEPTION '%', '@AlreadyPosted@'; --OBTG:-20000-- END IF; --Allow to complete an invoice only in these cases: --* There are invoice lines --* There are tax lines --* There are both invoice and tax lines IF((v_DocStatus='DR' AND v_DocAction='CO')) THEN SELECT COUNT(*) INTO V_InvoiceLines_count FROM C_INVOICE WHERE C_INVOICE_ID=v_Record_ID AND (EXISTS (SELECT 1 FROM C_INVOICELINE WHERE C_INVOICE_ID=v_Record_ID) OR EXISTS (SELECT 1 FROM C_INVOICETAX WHERE C_INVOICE_ID=v_Record_ID)); IF V_InvoiceLines_count=0 THEN RAISE EXCEPTION '%', '@InvoicesNeedLines@'; --OBTG:-20000-- END IF; /* * Avoids repeating the same documentno for the same organization tree within the same fiscal year */ SELECT COUNT(*) INTO v_count FROM (SELECT Y.C_CALENDAR_ID, Y.C_YEAR_ID, MIN(P.STARTDATE) AS PERIODSTARTDATE, MAX(P.ENDDATE) AS PERIODENDDATE FROM C_YEAR Y, C_PERIOD P WHERE Y.C_YEAR_ID = P.C_YEAR_ID AND Y.ISACTIVE = 'Y' AND P.ISACTIVE = 'Y' AND Y.C_CALENDAR_ID = (SELECT O.C_CALENDAR_ID FROM AD_ORG O WHERE AD_ORG_ID = AD_ORG_GETCALENDAROWNER(v_Org_ID)) GROUP BY Y.C_CALENDAR_ID, Y.C_YEAR_ID) A WHERE PERIODSTARTDATE <= v_DateInvoiced AND PERIODENDDATE+1 > v_DateInvoiced ; IF (v_count<>0) THEN SELECT PERIODSTARTDATE, PERIODENDDATE INTO v_PeriodStartDate, v_PeriodEndDate FROM (SELECT Y.C_CALENDAR_ID, Y.C_YEAR_ID, MIN(P.STARTDATE) AS PERIODSTARTDATE, MAX(P.ENDDATE) AS PERIODENDDATE FROM C_YEAR Y, C_PERIOD P WHERE Y.C_YEAR_ID = P.C_YEAR_ID AND Y.ISACTIVE = 'Y' AND P.ISACTIVE = 'Y' AND Y.C_CALENDAR_ID = (SELECT O.C_CALENDAR_ID FROM AD_ORG O WHERE AD_ORG_ID = AD_ORG_GETCALENDAROWNER(v_Org_ID)) GROUP BY Y.C_CALENDAR_ID, Y.C_YEAR_ID) A WHERE PERIODSTARTDATE <= v_DateInvoiced AND PERIODENDDATE+1 > v_DateInvoiced ; IF (v_PeriodStartDate IS NOT NULL AND v_PeriodEndDate IS NOT NULL) THEN SELECT D.AD_ORG_ID INTO v_DocNo_Org_ID FROM C_DOCTYPE D WHERE D.C_DOCTYPE_ID = v_DocTypeTarget_ID ; SELECT COUNT(*) INTO v_count FROM C_INVOICE I WHERE I.DOCUMENTNO = v_DocumentNo AND I.C_DOCTYPETARGET_ID = v_DocTypeTarget_ID AND I.DATEINVOICED >= v_PeriodStartDate AND I.DATEINVOICED < v_PeriodEndDate+1 AND I.C_INVOICE_ID <> v_Record_ID AND AD_ISORGINCLUDED(I.AD_ORG_ID, v_DocNo_Org_ID, I.AD_CLIENT_ID) <> -1 AND I.AD_CLIENT_ID = v_Client_ID ; IF (v_count<>0) THEN RAISE EXCEPTION '%', '@DifferentDocumentNo@' ; --OBTG:-20000-- END IF; END IF; END IF; END IF; IF(NOT FINISH_PROCESS) THEN /** * Unlock */ IF(v_DocAction='XL') THEN UPDATE C_INVOICE SET Processing='N', DocAction='--', Updated=TO_DATE(NOW()) WHERE C_Invoice_ID=v_Record_ID; FINISH_PROCESS:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN IF(v_Processing='Y') THEN RAISE EXCEPTION '%', '@OtherProcessActive@'; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Everything done */ IF(v_Processed='Y' AND v_DocAction NOT IN('RC', 'RE')) THEN RAISE EXCEPTION '%', '@AlreadyPosted@'; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS --cbt taxpayment IF(NOT finish_process) THEN IF(v_docaction IN ('VO', 'RE', 'RC') AND v_docstatus IN('CO', 'CL')) THEN SELECT COUNT(*) INTO v_aux FROM c_taxregisterline trl inner join c_invoicetax it on trl.c_invoicetax_id = it.c_invoicetax_id inner join c_taxregister tr on tr.c_taxregister_id= trl.c_taxregister_id inner join c_taxpayment tp on tr.c_taxpayment_id=tp.c_taxpayment_id WHERE it.c_invoice_id = v_record_id and tp.processed='Y'; IF v_aux > 0 THEN RAISE EXCEPTION '%', '@InvoiceInTaxRegister@'; --OBTG:-20615-- ELSE delete from c_taxregisterline where c_taxregisterline.c_invoicetax_id in (select trl.c_invoicetax_id FROM c_taxregisterline trl inner join c_invoicetax it on trl.c_invoicetax_id = it.c_invoicetax_id inner join c_taxregister tr on tr.c_taxregister_id= trl.c_taxregister_id inner join c_taxpayment tp on tr.c_taxpayment_id=tp.c_taxpayment_id WHERE it.c_invoice_id = v_record_id and tp.processed='N'); end if; end if; end if; --end cbt taxpaymant IF(NOT FINISH_PROCESS) THEN /** * Void if Document not processed */ IF(v_DocAction='VO' AND v_DocStatus NOT IN('CO', 'RE')) THEN SELECT COUNT(*) INTO v_Aux FROM C_DEBT_PAYMENT WHERE C_Invoice_ID = v_Record_ID; IF V_Aux>0 THEN RAISE EXCEPTION '%', '@InvoiceWithManualDP@'; --OBTG:-20000-- ELSE -- Reset Lines to 0 UPDATE C_INVOICELINE SET QtyInvoiced=0, LineNetAmt=0 WHERE C_Invoice_ID=v_Record_ID; -- UPDATE C_INVOICE SET DocStatus='VO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Invoice_ID=v_Record_ID; -- END IF; FINISH_PROCESS:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /************************************************************************** * Start Processing ------------------------------------------------------ *************************************************************************/ v_ResultStr:='LockingInvoice'; BEGIN -- FOR COMMIT UPDATE C_INVOICE SET Processing='Y' WHERE C_Invoice_ID=v_Record_ID; -- Now, needs to go to END_PROCESSING to unlock -- This Commit must remanin due differences between PL execution in Oracle and Postgres IF(p_PInstance_ID IS NOT NULL) THEN -- COMMIT; END IF; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '%','DATA_EXCEPTION'; END;--FOR COMMIT BEGIN -- FOR COMMIT -- Set org lines like the headear UPDATE C_INVOICELINE SET AD_ORG_ID = (SELECT AD_ORG_ID FROM C_INVOICE WHERE C_INVOICE_ID = v_Record_ID) WHERE C_INVOICE_ID = v_Record_ID; SELECT COUNT(*) INTO v_Count FROM C_INVOICE C, C_DOCTYPE WHERE C_DOCTYPE.DocBaseType IN ('ARI', 'API','ARC','APC') AND C_DOCTYPE.IsSOTrx=C.ISSOTRX AND Ad_Isorgincluded(C.AD_Org_ID,C_DOCTYPE.AD_Org_ID, C.AD_Client_ID) <> -1 AND C.C_DOCTYPETARGET_ID = C_DOCTYPE.C_DOCTYPE_ID AND C.C_INVOICE_ID = V_RECORD_ID; IF v_Count=0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgDoctypeInvoice@'; --OBTG:-20000-- END IF; /** * Reverse Correction requires completes invoice ======================== */ IF(v_DocAction='RC' AND v_DocStatus='CO') THEN v_ResultStr:='ReverseCorrection'; -- Copy Invoice with reverese Quantities (or Amounts) SELECT * INTO v_RInvoice_ID FROM Ad_Sequence_Next('C_Invoice', v_Record_ID) ; SELECT COALESCE(C_DOCTYPE_REVERSED_ID, C_DOCTYPE_ID) INTO v_DoctypeReversed_ID FROM C_DOCTYPE WHERE C_DOCTYPE_ID=v_DocType_ID; SELECT * INTO v_RDocumentNo FROM Ad_Sequence_Doctype(v_DoctypeReversed_ID, v_Record_ID, 'Y') ; IF(v_RDocumentNo IS NULL) THEN SELECT * INTO v_RDocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Invoice', v_Client_ID, 'Y') ; END IF; v_Message:='@ReversedBy@: ' || v_RDocumentNo; -- RAISE NOTICE '%','Reversal Invoice_ID=' || v_RInvoice_ID || ' DocumentNo=' || v_RDocumentNo ; v_ResultStr:='InsertInvoice ID=' || v_RInvoice_ID; -- Don't copy C_Payment_ID or C_CashLine_ID INSERT INTO C_INVOICE ( C_Invoice_ID, C_Order_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsSOTrx, DocumentNo, DocStatus, DocAction, Processing, Processed, C_DocType_ID, C_DocTypeTarget_ID, Description, SalesRep_ID, DateInvoiced, DatePrinted, IsPrinted, TaxDate, DateAcct, C_PaymentTerm_ID, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, POReference, DateOrdered, IsDiscountPrinted, C_Currency_ID, PaymentRule, C_Charge_ID, ChargeAmt, TotalLines, GrandTotal, M_PriceList_ID, C_Campaign_ID, C_Project_ID, C_Activity_ID, AD_OrgTrx_ID, User1_ID, User2_ID ) SELECT v_RInvoice_ID, C_Order_ID, AD_Client_ID, AD_Org_ID, IsActive, TO_DATE(NOW()), UpdatedBy, TO_DATE(NOW()), UpdatedBy, IsSOTrx, v_RDocumentNo, 'DR', 'CO', 'N', 'N', v_DoctypeReversed_ID, v_DoctypeReversed_ID, '(*R*: ' || DocumentNo || ') ' || Description, SalesRep_ID, TO_DATE(NOW()), NULL, 'N', TO_DATE(NOW()), TO_DATE(NOW()), C_PaymentTerm_ID, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, POReference, DateOrdered, IsDiscountPrinted, C_Currency_ID, PaymentRule, C_Charge_ID, ChargeAmt * -1, TotalLines * -1, GrandTotal * -1, M_PriceList_ID, C_Campaign_ID, C_Project_ID, C_Activity_ID, AD_OrgTrx_ID, User1_ID, User2_ID FROM C_INVOICE WHERE C_Invoice_ID=v_Record_ID; -- Create Reversed invoice relation INSERT INTO C_Invoice_Reverse ( C_Invoice_Reverse_ID,AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, Reversed_C_Invoice_ID ) SELECT get_uuid(), AD_Client_ID, AD_Org_ID, 'Y', TO_DATE(NOW()), CreatedBy, TO_DATE(NOW()), UpdatedBy, v_RInvoice_ID, C_Invoice_ID FROM C_INVOICE WHERE C_Invoice_ID=v_Record_ID; -- Delete C_Invoice_Discounts inserted by the trigger DELETE FROM C_INVOICE_DISCOUNT WHERE C_Invoice_ID=v_RInvoice_ID; -- Insert discounts as in the reversed invoice FOR Cur_Discount IN (SELECT * FROM C_INVOICE_DISCOUNT WHERE C_Invoice_ID=v_Record_ID ORDER BY LINE ) LOOP SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_Invoice_Discount', v_Record_ID) ; INSERT INTO C_INVOICE_DISCOUNT ( C_INVOICE_DISCOUNT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_INVOICE_ID, C_DISCOUNT_ID, LINE, CASCADE ) VALUES ( v_NextNo, Cur_Discount.AD_Client_ID, Cur_Discount.AD_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_RInvoice_ID, Cur_Discount.C_Discount_ID, Cur_Discount.Line, Cur_Discount.CASCADE ) ; END LOOP; -- Create Reversal Invoice Lines FOR Cur_InvoiceLine IN (SELECT * FROM C_INVOICELINE WHERE C_Invoice_ID=v_Record_ID AND C_INVOICE_DISCOUNT_ID IS NULL ORDER BY Line ) LOOP SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', v_Record_ID) ; INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, C_OrderLine_ID, M_InOutLine_ID, Line, Description, M_Product_ID, QtyInvoiced, PriceList, PriceActual, LineNetAmt, C_Charge_ID, ChargeAmt, C_UOM_ID, C_Tax_ID, PriceStd) VALUES ( v_NextNo, Cur_InvoiceLine.AD_Client_ID, Cur_InvoiceLine.AD_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_RInvoice_ID, Cur_InvoiceLine.C_OrderLine_ID, Cur_InvoiceLine.M_InoutLine_ID, Cur_InvoiceLine.Line, '*R*: ' || Cur_InvoiceLine.Description, Cur_InvoiceLine.M_Product_ID, Cur_InvoiceLine.QtyInvoiced * -1, Cur_InvoiceLine.PriceList, Cur_InvoiceLine.PriceActual, Cur_InvoiceLine.LineNetAmt * -1, Cur_InvoiceLine.C_Charge_ID, Cur_InvoiceLine.ChargeAmt * -1, Cur_InvoiceLine.C_UOM_ID, Cur_InvoiceLine.C_Tax_ID, Cur_InvoiceLine.PriceStd) ; /* OrderLine.qtyInvoiced is updated in c_invoicePost UPDATE C_OrderLine SET QtyInvoiced = QtyInvoiced - Cur_InvoiceLine.QtyInvoiced, Updated = TO_DATE(NOW()) WHERE C_OrderLine_ID=Cur_InvoiceLine.C_OrderLine_ID; */ END LOOP; -- Create Reversal Invoice Lines -- Close Invoice UPDATE C_INVOICE SET DocStatus='VO', -- it IS reversed Description=COALESCE(TO_CHAR(Description), '') || ' (*R* -> ' || v_RDocumentNo || ')', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Invoice_ID=v_Record_ID; -- Post Reversal PERFORM C_INVOICE_POST(NULL, v_RInvoice_ID) ; -- Reversal Transaction is closed UPDATE C_INVOICE SET DocStatus='VO', -- the reversal transaction DocAction='--', Processed='Y' WHERE C_Invoice_ID=v_RInvoice_ID; -- If Payments from both invoices are pending, create a new settlement and cancel them SELECT COUNT(*) INTO v_count FROM C_DEBT_PAYMENT dp WHERE C_Debt_Payment_Status(dp.C_Settlement_Cancel_ID, dp.Cancel_Processed, dp.Generate_Processed, dp.IsPaid, dp.IsValid, dp.C_CashLine_ID, dp.C_BankStatementLine_ID)<>'P' AND(dp.C_Invoice_ID=v_Record_ID OR dp.C_Invoice_ID=v_RInvoice_ID) ; -- To cancel, the sum of amounts should be 0 IF(v_count=0) THEN SELECT SUM(AMOUNT) INTO v_count FROM C_DEBT_PAYMENT dp WHERE dp.C_Invoice_ID=v_Record_ID OR dp.C_Invoice_ID=v_RInvoice_ID; IF(v_count=0) THEN v_SettlementDocType_ID:=Ad_Get_Doctype(v_Client_ID, v_AD_Org_ID, TO_CHAR('STT')) ; SELECT * INTO v_settlementID FROM Ad_Sequence_Next('C_Settlement', v_Record_ID) ; SELECT * INTO v_SDocumentNo FROM Ad_Sequence_Doctype(v_SettlementDocType_ID, v_Record_ID, 'Y') ; IF(v_SDocumentNo IS NULL) THEN SELECT * INTO v_SDocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_Client_ID, 'Y') ; END IF; INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, PROCESSING, PROCESSED, POSTED, C_CURRENCY_ID, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, CREATEFROM, ISGENERATED ) SELECT v_settlementID, AD_Client_ID, AD_Org_ID, 'Y', TO_DATE(NOW()), UpdatedBy, TO_DATE(NOW()), UpdatedBy, '*RE*'||v_SDocumentNo, TRUNC(TO_DATE(NOW())), TRUNC(TO_DATE(NOW())), 'C', v_SettlementDocType_ID, 'N', 'N', 'N', C_Currency_ID, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, 'N', 'Y' FROM C_INVOICE WHERE C_Invoice_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET C_Settlement_Cancel_id=v_settlementID, UPDATED=TO_DATE(NOW()), UPDATEDBY=v_UpdatedBy WHERE C_DEBT_PAYMENT.C_Invoice_ID=v_Record_ID OR C_DEBT_PAYMENT.C_Invoice_ID=v_RInvoice_ID; PERFORM C_SETTLEMENT_POST(NULL, v_settlementID) ; END IF; END IF; END_PROCESSING:=TRUE; END IF; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '%','DATA_EXCEPTION'; END; -- FOR COMMIT END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Credit Multiplier *************************************************************************/ DECLARE v_DocBaseType C_DOCTYPE.DocBaseType%TYPE; BEGIN -- Is it a Credit Memo? SELECT DocBaseType INTO v_DocBaseType FROM C_DOCTYPE WHERE C_DocType_ID=v_DocType_ID; IF(v_DocBaseType IN('ARC', 'API')) THEN v_Multiplier:=-1; END IF; END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************ * Actions allowed: Reactivate * Modified by Jon Alegria */ IF(v_DocAction='RE') THEN IF(v_DocStatus<>'CO') THEN RAISE EXCEPTION '%', '@NotCompletedInvoice@'; --OBTG:-20000-- END IF; IF(NOT END_PROCESSING) THEN IF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@InvoiceDocumentPosted@'; --OBTG:-20000-- END IF; END IF;--END_PROCESSING IF(NOT END_PROCESSING) THEN SELECT COUNT(*), MAX(C_DEBT_PAYMENT_ID) INTO v_RECount, v_Debtpayment_ID FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT.C_Invoice_ID=v_Record_ID AND C_Debt_Payment_Status(C_Settlement_Cancel_ID, Cancel_Processed, C_DEBT_PAYMENT.Generate_Processed, IsPaid, IsValid, C_Cashline_ID, C_BankstatementLine_ID)<>'P' AND C_ORDER_ID IS NULL; IF(v_RECount<>0) THEN --Added by P.Sarobe. New messages SELECT c_Bankstatementline_Id, c_cashline_id, c_settlement_cancel_id, ispaid, cancel_processed INTO v_Bankstatementline_ID, v_CashLine_ID, v_Settlement_Cancel_ID, v_ispaid, v_Cancel_Processed FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID = v_Debtpayment_ID; IF v_Bankstatementline_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_BANKSTATEMENTLINE_ID = v_Bankstatementline_ID; RAISE EXCEPTION '%', '@ManagedDebtPaymentInvoiceBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_CashLine_ID IS NOT NULL THEN SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@ManagedDebtPaymentInvoiceCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; IF v_Cancel_Processed='Y' AND v_ispaid='N' THEN SELECT documentno, datetrx INTO v_documentno_Settlement, v_dateSettlement FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = v_Settlement_Cancel_ID; RAISE EXCEPTION '%', '@ManagedDebtPaymentOrderCancel@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF; END IF;--END_PROCESSING--To be fixed or deprecated IF(NOT END_PROCESSING) THEN SELECT COUNT(*) INTO v_RECount FROM C_DP_MANAGEMENTLINE ml, C_DP_MANAGEMENT m, C_DEBT_PAYMENT dp WHERE ml.C_DP_Management_ID=m.C_DP_Management_ID AND ml.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND dp.C_Invoice_ID=v_Record_ID AND m.processed='Y'; IF v_RECount!=0 THEN RAISE EXCEPTION '%', '@DPInvoiceManaged@'; --OBTG:-20000-- END IF; END IF;--END_PROCESSING IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN -- Pending undo not Stocked BOM's -- Undo BP Statictis --Undo first sale SELECT MIN(DateAcct) INTO v_FirstSales FROM C_INVOICE WHERE C_Invoice_ID<>v_Record_ID AND C_BPartner_ID=v_BPartner_ID; UPDATE C_BPARTNER SET FirstSale=v_FirstSales WHERE C_BPartner_ID=v_BPartner_ID; -- Undo Last contact FOR Cur_LastContact IN (SELECT Updated, DocumentNo, Ad_User_ID FROM C_INVOICE WHERE C_Invoice_ID<>v_Record_ID AND Ad_User_ID=v_BPartner_User_ID ORDER BY Updated DESC ) LOOP UPDATE AD_USER SET LastContact=Cur_LastContact.Updated, LastResult=Cur_LastContact.DocumentNo WHERE AD_User_ID=Cur_LastContact.Ad_User_ID; EXIT; END LOOP; IF(v_IsSOTrx='Y') THEN -- Undo revenue and credit limit UPDATE C_BPARTNER SET ActualLifeTimeValue=ActualLifeTimeValue -(v_Multiplier * C_Base_Convert(v_GrandTotal, v_Currency_ID, v_Client_ID, v_DateAcct, v_Org_ID)) WHERE C_BPartner_ID=v_BPartner_ID; FOR Cur_ReactivateInvoiceLine IN (SELECT C_InvoiceLine_ID, C_Orderline_ID, M_InoutLine_ID, QtyInvoiced FROM C_INVOICELINE WHERE C_Invoice_ID=v_Record_ID ) LOOP IF(Cur_ReactivateInvoiceLine.C_OrderLine_ID IS NOT NULL) THEN SELECT MAX(C_INVOICE.DateInvoiced) INTO v_REDateInvoiced FROM C_INVOICE, C_INVOICELINE WHERE C_INVOICE.C_Invoice_ID=C_INVOICELINE.C_INVOICE_ID AND C_INVOICELINE.C_ORDERLINE_ID=Cur_ReactivateInvoiceLine.C_ORDERLINE_ID AND C_INVOICELINE.C_InvoiceLine_ID<>Cur_ReactivateInvoiceLine.C_InvoiceLine_ID; UPDATE C_ORDERLINE SET QtyInvoiced=QtyInvoiced - Cur_ReactivateInvoiceLine.QtyInvoiced, DateInvoiced=v_REDateInvoiced WHERE C_ORDERLINE.C_OrderLine_ID=Cur_ReactivateInvoiceLine.C_OrderLine_ID; END IF; IF(Cur_ReactivateInvoiceLine.M_InOutLine_ID IS NOT NULL) THEN SELECT m.DOCSTATUS INTO v_REInOutStatus FROM M_INOUT m, M_INOUTLINE ml WHERE M.M_InOut_ID=ml.M_InOut_ID AND ml.M_InOutLine_ID=Cur_ReactivateInvoiceLine.M_InOutLine_ID; IF(v_REInOutStatus<>'RE') THEN SELECT COALESCE(SUM(C_INVOICELINE.QTYINVOICED), 0) INTO v_REtotalQtyInvoiced FROM C_INVOICELINE, C_INVOICE WHERE C_INVOICE.C_Invoice_ID=C_INVOICELINE.C_Invoice_ID AND C_INVOICE.Processed='Y' AND C_INVOICELINE.M_InOutLine_ID=Cur_ReactivateInvoiceLine.M_InOutLine_ID; v_REtotalQtyInvoiced:=v_REtotalQtyInvoiced - Cur_ReactivateInvoiceLine.QtyInvoiced; SELECT MovementQty INTO v_REdeliveredQty FROM M_INOUTLINE WHERE M_InOutLine_ID=Cur_ReactivateInvoiceLine.M_InOutLine_ID; UPDATE M_INOUTLINE SET IsInvoiced=( CASE v_REtotalQtyInvoiced WHEN 0 THEN 'N' ELSE 'Y' END ) WHERE M_InOutLine_ID=Cur_ReactivateInvoiceLine.M_InOutLine_ID; END IF; END IF; END LOOP; ELSE DELETE FROM M_MATCHPO WHERE C_InvoiceLine_ID IN (SELECT C_InvoiceLine_ID FROM C_INVOICELINE WHERE C_Invoice_ID=v_Record_ID) ; DELETE FROM M_MATCHINV WHERE C_InvoiceLine_ID IN (SELECT C_InvoiceLine_ID FROM C_INVOICELINE WHERE C_Invoice_ID=v_Record_ID) ; END IF; UPDATE C_INVOICE SET Processed='N', DocStatus='DR', DocAction='CO' WHERE C_Invoice_Id=v_Record_ID; --Delete automatically created records ... DELETE FROM C_CASHLINE WHERE ISGENERATED='Y' AND C_DEBT_PAYMENT_ID IN (SELECT C_DEBT_PAYMENT_ID FROM C_DEBT_PAYMENT WHERE C_INVOICE_ID=v_Record_ID) AND C_CASH_ID IN (SELECT C_CASH_ID FROM C_CASH WHERE PROCESSED='N') ; -- Updates the debt-payments of the cash, to make them not to point to the invoice UPDATE C_DEBT_PAYMENT SET C_INVOICE_ID=NULL WHERE C_Invoice_ID=v_Record_ID AND C_Order_ID IS NOT NULL; DELETE FROM C_DEBT_PAYMENT WHERE C_Invoice_ID=v_Record_ID AND COALESCE(IsAutomaticGenerated, 'Y')='Y' AND C_ORDER_ID IS NULL; UPDATE C_DEBT_PAYMENT SET IsValid='N' WHERE C_Invoice_ID=v_Record_ID AND COALESCE(IsAutomaticGenerated, 'Y')='N' AND C_ORDER_ID IS NULL; IF(v_IsSOTrx='Y') THEN PERFORM C_BP_SOCREDITUSED_REFRESH(v_BPartner_ID) ; END IF; DELETE FROM C_INVOICELINE WHERE C_INVOICE_DISCOUNT_ID IS NOT NULL AND C_INVOICE_ID=v_Record_ID; END_PROCESSING:=TRUE; END IF;--END_PROCESSING END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Actions allowed: COmplete, APprove */ IF(v_DocAction='AP' OR v_DocAction='CO') THEN -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_INVOICE, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_INVOICE.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_INVOICE.C_INVOICE_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_INVOICE', 'C_INVOICELINE', v_Record_ID, 'C_INVOICE_ID', 'C_INVOICE_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('C_INVOICE', v_Record_ID, 'C_INVOICE_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_DateAcct, NULL, v_DocTypeTarget_ID) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; SELECT COUNT(*) INTO v_count FROM C_INVOICE c, C_BPARTNER bp WHERE c.C_BPARTNER_ID=bp.C_BPARTNER_ID AND Ad_Isorgincluded(c.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1 AND c.C_Invoice_ID=v_Record_ID; IF v_count>0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgBpartnerInvoice@' ; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN WHILE(v_DocType_ID<>v_DocTypeTarget_ID) LOOP BEGIN v_ResultStr:='UpdateDocType'; UPDATE C_INVOICE SET C_DocType_ID=C_DocTypeTarget_ID WHERE C_Invoice_ID=v_Record_ID; v_DocType_ID:=v_DocTypeTarget_ID; EXCEPTION WHEN OTHERS THEN v_ResultStr:='UpdateDocumentNo'; UPDATE C_INVOICE SET DocumentNo=DocumentNo || '.' WHERE C_Invoice_ID=v_Record_ID; END; END LOOP; END IF;--FINISH_PROCESS ELSE v_Message:='@ActionNotAllowedHere@ (I-' || v_DocAction || ')'; RAISE EXCEPTION '%', v_Message ; --OBTG:-20000-- END_PROCESSING:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Resolve not-stocked BOMs *************************************************************************/ DECLARE -- Invoice Lines with non-stocked BOMs CUR_BOM_Line RECORD; CUR_BOM RECORD; -- CountNo NUMERIC; v_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_Line NUMERIC; v_ChargeAmt NUMERIC; -- v_Offer_ID varchar2(32); v_DateInvoiced TIMESTAMP; v_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- -- CUR_PriceList_Version RECORD; BEGIN v_ResultStr:='ResolveBOM'; LOOP -- How many BOMs do we have:1 SELECT COUNT(*) INTO CountNo FROM C_INVOICELINE l WHERE l.C_Invoice_ID=v_Record_ID AND EXISTS (SELECT * FROM M_PRODUCT p WHERE l.M_Product_ID=p.M_Product_ID AND p.IsBOM='Y' AND p.IsStocked='N' AND p.productType='I' ) ; -- Nothing to do:2 EXIT WHEN CountNo=0; RAISE NOTICE '%',' BOMs to resolve=' || CountNo ; -- Get Price List Version FOR CUR_PriceList_Version IN (SELECT COALESCE(v.M_PriceList_Version_ID, '0') AS PriceList_Version_ID, o.M_PriceList_ID AS M_PriceLIst_ID FROM M_PRICELIST_VERSION v, C_INVOICE o WHERE v.M_PriceList_ID=o.M_PriceList_ID AND v.ValidFrom<=o.DateOrdered AND v.IsActive='Y' AND o.C_Invoice_ID=v_Record_ID ORDER BY v.ValidFrom DESC ) LOOP v_PriceList_Version_ID:=CUR_PriceList_Version.PriceList_Version_ID; v_PriceList_ID := CUR_PriceList_Version.M_PriceList_ID; EXIT; END LOOP; --Reference Date for price DateOrdered SELECT C_BPARTNER_ID, DATEORDERED INTO v_BPartner_ID, v_DateInvoiced FROM C_INVOICE WHERE C_INVOICE_ID=v_Record_ID; -- Replace Lines FOR CUR_BOM_Line IN (SELECT * FROM C_INVOICELINE l WHERE l.C_Invoice_ID=v_Record_ID AND IsActive='Y' AND EXISTS (SELECT * FROM M_PRODUCT p WHERE l.M_Product_ID=p.M_Product_ID AND p.IsBOM='Y' AND p.IsStocked='N' AND p.productType='I' ) ORDER BY l.Line FOR UPDATE ) LOOP v_Line:=CUR_BOM_Line.Line; -- One Time variables v_ChargeAmt:=CUR_BOM_Line.ChargeAmt; -- Create New Lines FOR CUR_BOM IN (SELECT b.M_ProductBOM_ID, p.C_UOM_ID, b.BOMQty, b.Description FROM M_PRODUCT_BOM b, M_PRODUCT p WHERE b.M_Product_ID=CUR_BOM_Line.M_Product_ID AND b.M_ProductBOM_ID=p.M_Product_ID ORDER BY Line ) LOOP SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_InvoiceLine', CUR_BOM_Line.AD_Client_ID) ; v_Line:=v_Line + 10; -- v_Offer_ID := M_GET_OFFER(v_DateInvoiced, v_BPartner_ID, CUR_BOM.M_ProductBOM_ID); /* INSERT INTO C_INVOICELINE (C_InvoiceLine_ID, AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy, C_Invoice_ID,Line, Description, M_Product_ID,C_UOM_ID, QtyInvoiced, PriceList,PriceActual,PriceLimit,LineNetAmt, C_Charge_ID,ChargeAmt, C_Tax_ID, PriceStd) VALUES (v_NextNo, CUR_BOM_Line.AD_Client_ID,CUR_BOM_Line.AD_Org_ID,CUR_BOM_Line.IsActive,TO_DATE(NOW()),v_UpdatedBy,TO_DATE(NOW()),v_UpdatedBy, CUR_BOM_Line.C_Invoice_ID,v_Line, CUR_BOM.Description, CUR_BOM.M_ProductBOM_ID, CUR_BOM.C_UOM_ID, CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, M_BOM_PriceList(CUR_BOM.M_ProductBOM_ID, PriceList_Version_ID),M_GET_OFFER_PRICE(v_Offer_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, PriceList_Version_ID)td), M_BOM_PriceLimit(CUR_BOM.M_ProductBOM_ID, PriceList_Version_ID), M_GET_OFFER_PRICE(v_Offer_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, PriceList_Version_ID)) * CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, CUR_BOM_Line.C_Charge_ID,v_ChargeAmt, CUR_BOM_Line.C_Tax_ID); */ -- M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, PriceList_Version_ID), v_Offer_ID); -- One Time variables INSERT INTO C_INVOICELINE ( C_InvoiceLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Invoice_ID, Line, Description, M_Product_ID, C_UOM_ID, QtyInvoiced, PriceList, PriceActual, PriceLimit, LineNetAmt, C_Charge_ID, ChargeAmt, C_Tax_ID, PriceStd ) VALUES ( v_NextNo, CUR_BOM_Line.AD_Client_ID, CUR_BOM_Line.AD_Org_ID, CUR_BOM_Line.IsActive, TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, CUR_BOM_Line.C_Invoice_ID, v_Line, CUR_BOM.Description, CUR_BOM.M_ProductBOM_ID, CUR_BOM.C_UOM_ID, CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, M_BOM_PriceList(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID), M_Get_Offers_Price(v_DateInvoiced, v_BPartner_ID, CUR_BOM.M_ProductBOM_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID),CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, v_PriceList_ID), M_BOM_PriceLimit(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID), M_Get_Offers_Price(v_DateInvoiced, v_BPartner_ID, CUR_BOM.M_ProductBOM_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID),CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, v_PriceList_ID) * CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, CUR_BOM_Line.C_Charge_ID, v_ChargeAmt, CUR_BOM_Line.C_Tax_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID) ) ; v_ChargeAmt:=0; END LOOP; -- Create New Lines -- Convert into Comment Line UPDATE C_INVOICELINE SET M_Product_ID=NULL, PriceList=0, PriceActual=0, PriceLimit=0, LineNetAmt=0, ChargeAmt=0, Description= (SELECT p.NAME || ' ' || C_INVOICELINE.Description FROM M_PRODUCT p WHERE p.M_Product_ID=CUR_BOM_Line.M_Product_ID ) , PriceStd=0, M_Offer_ID=NULL WHERE C_InvoiceLine_ID=CUR_BOM_Line.C_InvoiceLine_ID; END LOOP; -- Replace Lines END LOOP; -- BOM Loop END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Calculate Discounts *************************************************************************/ v_CumDiscount:=0; v_OldCumDiscount:=0; v_Line:=10; SELECT MAX(LINE) +10 INTO v_InvoiceLineSeqNo FROM C_INVOICELINE WHERE C_INVOICE_ID=v_Record_ID; FOR Cur_CInvoiceDiscount IN (SELECT C_INVOICE_DISCOUNT.C_INVOICE_DISCOUNT_ID, C_DISCOUNT.DISCOUNT, C_DISCOUNT.M_PRODUCT_ID, C_DISCOUNT.NAME, C_INVOICE_DISCOUNT.CASCADE, C_DISCOUNT.C_DISCOUNT_ID, M_PRODUCT.C_UOM_ID FROM C_INVOICE_DISCOUNT, C_DISCOUNT, M_PRODUCT WHERE C_INVOICE_DISCOUNT.C_DISCOUNT_ID=C_DISCOUNT.C_DISCOUNT_ID AND C_DISCOUNT.M_PRODUCT_ID=M_PRODUCT.M_PRODUCT_ID AND C_INVOICE_DISCOUNT.C_INVOICE_ID=v_Record_ID AND C_INVOICE_DISCOUNT.ISACTIVE='Y' ORDER BY C_INVOICE_DISCOUNT.LINE ) LOOP v_CumDiscount:=(1-v_OldCumDiscount) * Cur_CInvoiceDiscount.Discount/100; v_OldCumDiscount:=v_OldCumDiscount + v_CumDiscount; FOR Cur_TaxDiscount IN (SELECT C_INVOICELINE.C_TAX_ID, SUM(C_INVOICELINE.LINENETAMT) AS LINENETAMT FROM C_INVOICELINE WHERE C_INVOICE_ID=v_Record_ID AND C_INVOICELINE.LINENETAMT<>0 AND C_INVOICE_DISCOUNT_ID IS NULL GROUP BY C_TAX_ID ) LOOP IF(Cur_CInvoiceDiscount.CASCADE='Y') THEN v_Discount:=(-1) * Cur_TaxDiscount.LINENETAMT * v_CumDiscount; ELSE v_Discount:=(-1) * Cur_TaxDiscount.LINENETAMT * Cur_CInvoiceDiscount.Discount/100; END IF; v_InvoiceLineSeqNo:=10 + v_InvoiceLineSeqNo; v_InvoiceLine:=Ad_Sequence_Nextno('C_InvoiceLine') ; INSERT INTO C_INVOICELINE ( C_INVOICELINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_INVOICE_ID, C_ORDERLINE_ID, M_INOUTLINE_ID, LINE, DESCRIPTION, M_PRODUCT_ID, QTYINVOICED, PRICELIST, PRICEACTUAL, PRICELIMIT, LINENETAMT, C_CHARGE_ID, CHARGEAMT, C_UOM_ID, C_TAX_ID, S_RESOURCEASSIGNMENT_ID, TAXAMT, M_ATTRIBUTESETINSTANCE_ID, ISDESCRIPTION, QUANTITYORDER, M_PRODUCT_UOM_ID, PRICESTD ) VALUES ( v_InvoiceLine, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_Record_ID, NULL, NULL, v_InvoiceLineSeqNo, Cur_CInvoiceDiscount.NAME, Cur_CInvoiceDiscount.M_PRODUCT_ID, 1, v_Discount, v_Discount, v_Discount, v_Discount, NULL, 0, Cur_CInvoiceDiscount.C_UOM_ID, Cur_TaxDiscount.C_TAX_ID, NULL, NULL, NULL, 'N' , NULL, NULL, v_Discount ) ; --v_InvoiceDiscount:=Ad_Sequence_Nextno('C_InvoiceLine'); UPDATE C_INVOICELINE SET C_INVOICE_DISCOUNT_ID=Cur_CInvoiceDiscount.C_INVOICE_DISCOUNT_ID WHERE C_INVOICELINE_ID=v_InvoiceLine; END LOOP; v_Line:=v_Line + 10; END LOOP; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Calculate Invoice Taxes and Totals *************************************************************************/ DECLARE Cur_Tax RECORD; Cur_MultiTax RECORD; xTaxBaseAmt NUMERIC:=0; xTaxAmt NUMERIC:=0; v_TaxNoRecalculable NUMERIC:=0; v_PreviousTaxAmt NUMERIC:=0; HeaderNotAdded BOOLEAN:=TRUE; v_LineNo NUMERIC:=0; v_ActualBaseAmt NUMERIC; v_FirstLine BOOLEAN; v_C_InvoiceTax_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN v_ResultStr:='DeleteOldTaxes'; DELETE FROM C_INVOICELINETAX WHERE C_InvoiceLine_ID IN (SELECT C_InvoiceLine_ID from C_InvoiceLine WHERE C_Invoice_ID = v_Record_ID); DELETE FROM C_INVOICETAX WHERE C_Invoice_ID=v_Record_ID AND Recalculate = 'Y'; -- For all Tax Rates v_ResultStr:='InsertNewTaxes'; FOR Cur_Tax IN (SELECT l.C_InvoiceLine_ID, l.C_Tax_ID, i.IsTaxIncluded, COALESCE(SUM(l.LineNetAmt),0) + COALESCE(SUM(l.ChargeAmt), 0) AS LineNetAmt, COALESCE(SUM(l.TaxBaseAmt), 0) + COALESCE(SUM(l.ChargeAmt), 0) AS TaxBaseAmt, COALESCE(SUM(i.ChargeAmt), 0) AS HeaderNet, t.Rate, t.IsSummary, c.StdPrecision, t.Cascade, t.BaseAmount FROM C_INVOICE i, C_INVOICELINE l, C_TAX t, C_CURRENCY c WHERE i.C_Invoice_ID=l.C_Invoice_ID AND i.C_Invoice_ID=v_Record_ID -- Parameter AND l.C_Tax_ID=t.C_Tax_ID AND i.C_Currency_ID=c.C_Currency_ID GROUP BY l.C_InvoiceLine_ID, l.C_Tax_ID, i.IsTaxIncluded, t.Rate, t.IsSummary, c.StdPrecision, t.Cascade, t.BaseAmount ORDER BY 4 DESC ) LOOP xTaxBaseAmt:=Cur_Tax.LineNetAmt; v_TotalLines:=v_TotalLines + xTaxBaseAmt; -- w/o Header Freight/Charge IF(HeaderNotAdded) THEN -- add header to first HeaderNotAdded:=FALSE; xTaxBaseAmt:=xTaxBaseAmt + Cur_Tax.HeaderNet; END IF; PERFORM C_INVOICELINETAX_INSERT(v_Org_ID, v_Record_ID, Cur_Tax.C_InvoiceLine_ID, v_UpdatedBy, Cur_Tax.C_Tax_ID, Cur_Tax.C_Tax_ID, Cur_Tax.LineNetAmt, Cur_Tax.TaxBaseAmt, Cur_Tax.StdPrecision); END LOOP; -- Insert New Taxes -- Update Header SELECT COALESCE(SUM(TaxAmt),0) INTO v_TaxNoRecalculable FROM C_INVOICETAX WHERE C_Invoice_ID = v_Record_ID AND Recalculate = 'N'; SELECT c_getwithholding(v_record_id) INTO withholdamount FROM dual; v_GrandTotal:=C_Currency_Round(v_GrandTotal+v_TaxNoRecalculable, v_Currency_ID, NULL) ; SELECT COALESCE(SUM(TAXAMT), 0) INTO v_GrandTotal FROM C_INVOICETAX WHERE C_INVOICE_ID = v_Record_ID; v_GrandTotal:=v_GrandTotal+ v_TotalLines; UPDATE C_INVOICE SET TotalLines=v_TotalLines, GrandTotal=v_GrandTotal, withholdingamount = withholdamount WHERE C_Invoice_ID=v_Record_ID; RAISE NOTICE '%','withholdingamount=' || withholdamount; RAISE NOTICE '%','GrandTotal=' || v_GrandTotal ; END; -- Calculate Tax and Totals -- Synchronize Client/Org Ownership v_ResultStr:='SyncOwnershipClient'; UPDATE C_INVOICELINE SET AD_Client_ID=v_Client_ID WHERE C_Invoice_ID=v_Record_ID AND AD_Client_ID<>v_Client_ID; v_ResultStr:='SyncOwnershipOrg'; UPDATE C_INVOICELINE SET AD_Org_ID=v_Org_ID WHERE C_Invoice_ID=v_Record_ID AND C_Charge_ID IS NULL -- sync for products AND AD_Org_ID<>v_Org_ID; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Update BP Statistics *************************************************************************/ v_ResultStr:='Updating BPartners'; -- First Sale UPDATE C_BPARTNER SET FirstSale=v_DateAcct WHERE C_BPartner_ID=v_BPartner_ID AND FirstSale IS NULL; -- Last Contact, Result UPDATE AD_USER SET LastContact=TO_DATE(NOW()), LastResult=v_DocumentNo WHERE AD_User_ID=v_BPartner_User_ID; -- Update total revenue and credit limit -- It is reversed in C_Allocation_Trg IF(v_IsSOTrx='Y') THEN UPDATE C_BPARTNER SET ActualLifeTimeValue=ActualLifeTimeValue +(v_Multiplier * C_Base_Convert(v_GrandTotal, v_Currency_ID, v_Client_ID, v_DateAcct, v_Org_ID)) WHERE C_BPartner_ID=v_BPartner_ID; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Matching *************************************************************************/ v_ResultStr:='Matching'; IF(v_IsSOTrx='N') THEN DECLARE -- Invoice-Receipt Match Cur_ILines_Receipt RECORD; -- Invoice-PO Match Cur_ILines_PO RECORD; v_Qty NUMERIC; v_MatchInv_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_MatchPO_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN v_ResultStr:='MatchInv-Receipt'; FOR Cur_ILines_Receipt IN (SELECT il.AD_Client_ID, il.AD_Org_ID, il.C_InvoiceLine_ID, ml.M_InOutLine_ID, ml.M_Product_ID, ml.MovementQty, il.QtyInvoiced, i.DateAcct FROM C_INVOICELINE il INNER JOIN M_INOUTLINE ml ON(il.M_InOutLine_ID=ml.M_InOutLine_ID) INNER JOIN C_INVOICE i ON(il.C_Invoice_ID=i.C_Invoice_ID) WHERE il.M_Product_ID=ml.M_Product_ID AND il.C_Invoice_ID=v_Record_ID ) LOOP -- The min qty. Modified by Ismael Ciordia --v_Qty := Cur_ILines_Receipt.MovementQty; --IF (ABS(Cur_ILines_Receipt.MovementQty) > ABS(Cur_ILines_Receipt.QtyInvoiced)) THEN v_Qty:=Cur_ILines_Receipt.QtyInvoiced; --END IF; SELECT * INTO v_MatchInv_ID FROM Ad_Sequence_Next('M_MatchInv', Cur_ILines_Receipt.AD_Org_ID) ; v_ResultStr:='InsertMatchInv ' || v_MatchInv_ID; RAISE NOTICE '%',' M_MatchInv_ID=' || v_MatchInv_ID || ' - ' || v_Qty ; INSERT INTO M_MATCHINV ( M_MatchInv_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, M_InOutLine_ID, C_InvoiceLine_ID, M_Product_ID, DateTrx, Qty, Processing, Processed, Posted ) VALUES ( v_MatchInv_ID, Cur_ILines_Receipt.AD_Client_ID, Cur_ILines_Receipt.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_ILines_Receipt.M_InOutLine_ID, Cur_ILines_Receipt.C_InvoiceLine_ID, Cur_ILines_Receipt.M_Product_ID, Cur_ILines_Receipt.DateAcct, v_Qty, 'N', 'Y', 'N' ) ; END LOOP; v_ResultStr:='MatchInv-PO'; FOR Cur_ILines_PO IN (SELECT il.AD_Client_ID, il.AD_Org_ID, il.C_InvoiceLine_ID, ol.C_OrderLine_ID, ol.M_Product_ID, ol.C_Charge_ID, ol.QtyOrdered, il.QtyInvoiced, i.DateAcct FROM C_INVOICELINE il INNER JOIN C_ORDERLINE ol ON(il.C_OrderLine_ID=ol.C_OrderLine_ID) INNER JOIN C_INVOICE i ON(il.C_Invoice_ID=i.C_Invoice_ID) WHERE(il.M_Product_ID=ol.M_Product_ID OR il.C_Charge_ID=ol.C_Charge_ID) AND il.C_Invoice_ID=v_Record_ID ) LOOP -- The min qty. Modified by Ismael Ciordia --v_Qty := Cur_ILines_PO.QtyOrdered; --IF (ABS(Cur_ILines_PO.QtyOrdered) > ABS(Cur_ILines_PO.QtyInvoiced)) THEN v_Qty:=Cur_ILines_PO.QtyInvoiced; --END IF; SELECT * INTO v_MatchPO_ID FROM Ad_Sequence_Next('M_MatchPO', Cur_ILines_PO.AD_Org_ID) ; v_ResultStr:='InsertMatchPO ' || v_MatchPO_ID; RAISE NOTICE '%',' M_MatchPO_ID=' || v_MatchPO_ID || ' - ' || v_Qty ; INSERT INTO M_MATCHPO ( M_MatchPO_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_OrderLine_ID, M_InOutLine_ID, C_InvoiceLine_ID, M_Product_ID, DateTrx, Qty, Processing, Processed, Posted ) VALUES ( v_MatchPO_ID, Cur_ILines_PO.AD_Client_ID, Cur_ILines_PO.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', Cur_ILines_PO.C_OrderLine_ID, NULL, Cur_ILines_PO.C_InvoiceLine_ID, Cur_ILines_PO.M_Product_ID, Cur_ILines_PO.DateAcct, v_Qty, 'N', 'Y', 'N' ) ; END LOOP; END; ELSE -- Actualiza las cantidades facturadas de los pedidos de venta, y las lineas de albaryn facturadas DECLARE CurLines RECORD; p_DateInvoiced TIMESTAMP; v_totalQtyInvoiced NUMERIC; v_ODocumentNo C_ORDER.DocumentNo%TYPE; v_NewPendingToInvoice NUMERIC; v_deliveredQty NUMERIC; v_inOutStatus VARCHAR(60) ; --OBTG:varchar2-- BEGIN SELECT DateInvoiced INTO p_DateInvoiced FROM C_INVOICE WHERE C_Invoice_ID=v_Record_ID; FOR CurLines IN (SELECT * FROM C_INVOICELINE WHERE C_INVOICE_ID=v_Record_ID ORDER BY line) LOOP IF(CurLines.C_OrderLine_ID IS NOT NULL) THEN --Check that qty pending to invoice is higher or equal to the qty being invoiced SELECT o.documentno, ABS(ol.qtyordered) - ABS(ol.qtyinvoiced + CurLines.QtyInvoiced) INTO v_ODocumentNo, v_NewPendingToInvoice FROM c_order o, c_orderline ol WHERE o.c_order_id = ol.c_order_id AND ol.c_orderline_id = CurLines.c_orderline_id; IF (v_NewPendingToInvoice <0 ) THEN v_Message := '@NotPossibleCompleteInvoice@' || ' ' || v_DocumentNo; v_Message := v_Message || ' ' || '@line@' || ' ' || CurLines.line || '. '; v_Message := v_Message || '@OrderDocumentno@' || ' ' || v_ODocumentNo; v_Message := v_Message || ': ' || '@QtyInvoicedHigherOrdered@' || '.'; RAISE EXCEPTION '%', v_Message; --OBTG:-20000-- END IF; UPDATE C_ORDERLINE SET QtyInvoiced=QtyInvoiced + CurLines.QtyInvoiced, DateInvoiced=p_DateInvoiced, Updated=TO_DATE(NOW()) WHERE C_OrderLine_ID=CurLines.C_OrderLine_ID; END IF; IF(CurLines.M_InOutLine_ID IS NOT NULL) THEN SELECT m.DOCSTATUS INTO v_inOutStatus FROM M_INOUT m, M_INOUTLINE ml WHERE M.M_InOut_ID=ml.M_InOut_ID AND ml.M_InOutLine_ID=CurLines.M_InOutLine_ID; IF(v_inOutStatus<>'RE') THEN SELECT COALESCE(SUM(C_INVOICELINE.QTYINVOICED), 0) INTO v_totalQtyInvoiced FROM C_INVOICELINE, C_INVOICE WHERE C_INVOICE.C_Invoice_ID=C_INVOICELINE.C_Invoice_ID AND C_INVOICE.Processed='Y' AND C_INVOICELINE.M_InOutLine_ID=CurLines.M_InOutLine_ID; v_totalQtyInvoiced:=v_totalQtyInvoiced + CurLines.QtyInvoiced; SELECT MovementQty INTO v_deliveredQty FROM M_INOUTLINE WHERE M_InOutLine_ID=CurLines.M_InOutLine_ID; UPDATE M_INOUTLINE SET IsInvoiced=( CASE v_totalQtyInvoiced WHEN 0 THEN 'N' ELSE 'Y' END ) WHERE M_InOutLine_ID=CurLines.M_InOutLine_ID; END IF; END IF; END LOOP; END; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN -- Modified by Ismael Ciordia -- Generate C_Debt_Payment linked to this invoice DECLARE v_totalCash NUMERIC:=0; v_processed CHAR(1):='N'; v_debtPaymentID VARCHAR(32) ; --OBTG:varchar2-- v_amount NUMERIC; v_cashBook VARCHAR(32) ; --OBTG:VARCHAR2-- v_bankAccount VARCHAR(32) ; --OBTG:VARCHAR2-- v_cash VARCHAR(32) ; --OBTG:VARCHAR2-- v_IsoCode C_CURRENCY.ISO_CODE%TYPE; v_CashLine VARCHAR(32) ; --OBTG:VARCHAR2-- v_line NUMERIC ; v_BPartnerName C_BPARTNER.NAME%TYPE; v_GenDP_Org VARCHAR(32); --OBTG:VARCHAR2-- BEGIN v_ResultStr:='Generating C_Debt_Payment'; UPDATE C_DEBT_PAYMENT SET C_INVOICE_ID=v_Record_ID WHERE EXISTS (SELECT 1 FROM C_ORDERLINE ol, C_INVOICELINE il WHERE ol.C_ORDERLINE_ID=il.C_ORDERLINE_ID AND il.C_INVOICE_ID=v_Record_ID AND ol.C_ORDER_ID=C_DEBT_PAYMENT.C_ORDER_ID ) AND C_INVOICE_ID IS NULL; UPDATE C_DEBT_PAYMENT SET IsValid='Y' WHERE C_INVOICE_ID=v_Record_ID AND IsValid!='Y'; -- Is it a Credit Memo:4 SELECT DocBaseType INTO v_TargetDocBaseType FROM C_DOCTYPE WHERE C_DocType_ID=v_DocTypeTarget_ID; IF v_TargetDocBaseType in ('ARC','APC') THEN v_MultiplierARC:=-1; END IF; --Sums debt payments from the order and the ones that have been inserted manually, added by ALO SELECT COALESCE(SUM(C_Currency_Round(C_Currency_Convert((Amount + WriteOffAmt)*v_MultiplierARC, C_Currency_ID, v_Currency_ID, v_DateInvoiced, NULL, v_Client_ID, v_Org_ID), v_Currency_ID, NULL)), 0) INTO v_totalCash FROM C_DEBT_PAYMENT_V dp WHERE C_INVOICE_ID=v_Record_ID; --Insert C_Debt_Payment if GrandTotal - v_totalCash <> 0; IF(v_GrandTotal<>v_totalCash) THEN DECLARE CUR_PAYMENTS RECORD; v_plannedDate TIMESTAMP; v_pendingAmount NUMERIC; v_paymentAmount NUMERIC; v_GenDebt_PaymentID VARCHAR(32); --OBTG:varchar2-- v_SettlementDocTypeID VARCHAR(32) ; --OBTG:varchar2-- v_settlement_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_CB_Curr VARCHAR(32) ; --OBTG:VARCHAR2-- v_SDocument_No C_SETTLEMENT.DocumentNo%TYPE; BEGIN IF v_IsSOTrx ='Y' THEN v_pendingAmount:=v_GrandTotal - v_totalCash; ELSE v_pendingAmount:=v_GrandTotal + v_totalCash; END IF; FOR CUR_PAYMENTS IN (SELECT LINE, PERCENTAGE, ONREMAINDER, EXCLUDETAX, COALESCE(PAYMENTRULE, v_PaymentRule) AS PAYMENTRULE, FIXMONTHDAY, FIXMONTHDAY2, FIXMONTHDAY3, NETDAYS, FIXMONTHOFFSET, NETDAY, ISNEXTBUSINESSDAY FROM C_PAYMENTTERMLINE WHERE C_PAYMENTTERM_ID=v_PaymentTerm UNION -- Header of paymentTerm is processed at last SELECT 9999 AS LINE, 100 AS PERCENTAGE, 'Y' AS ONREMAINDER, 'N' AS EXCLUDETAX, v_PaymentRule AS PAYMENTRULE, FIXMONTHDAY, FIXMONTHDAY2, FIXMONTHDAY3, NETDAYS, FIXMONTHOFFSET, NETDAY, ISNEXTBUSINESSDAY FROM C_PAYMENTTERM WHERE C_PAYMENTTERM_ID=v_PaymentTerm ORDER BY LINE ) LOOP IF(CUR_PAYMENTS.PaymentRule IN('B', 'C')) THEN SELECT MAX(C_CashBook_ID) INTO v_cashBook FROM C_CASHBOOK WHERE AD_Client_ID=v_Client_ID AND isActive='Y' AND isDefault='Y' AND AD_IsOrgIncluded(v_ad_org_id,AD_ORG_ID, AD_Client_ID)<>-1; IF v_cashBook IS NULL THEN RAISE EXCEPTION '%', '@NoDefaultCashBook@'; --OBTG:-20000-- END IF; v_bankAccount:=NULL; ELSE SELECT COALESCE(( CASE v_IsSOTrx WHEN 'Y' THEN SO_BankAccount_ID ELSE PO_BankAccount_ID END ), (SELECT MAX(C_BankAccount_ID) FROM C_BANKACCOUNT WHERE AD_Client_ID=v_Client_ID AND isDefault='Y' ) ) INTO v_bankAccount FROM C_BPARTNER WHERE c_BPartner_ID=v_BPartner_ID; v_cashBook:=NULL; END IF; v_plannedDate:=C_Paymentduedate(v_BPartner_ID, v_IsSOTrx, CUR_PAYMENTS.FixMonthDay, CUR_PAYMENTS.FixMonthDay2, CUR_PAYMENTS.FixMonthDay3, CUR_PAYMENTS.NetDays, CUR_PAYMENTS.FixMonthOffset, CUR_PAYMENTS.NetDay, CUR_PAYMENTS.IsNextbusinessday, v_DateInvoiced) ; SELECT COALESCE(SUM(C_DEBT_PAYMENT_V.AMOUNT),0) INTO v_partialAmount FROM C_DEBT_PAYMENT_V, C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_V.C_INVOICE_ID = V_RECORD_ID AND C_DEBT_PAYMENT_V.C_DEBT_PAYMENT_ID = C_DEBT_PAYMENT.C_DEBT_PAYMENT_ID AND ISAUTOMATICGENERATED='N'; IF(CUR_PAYMENTS.EXCLUDETAX='Y') THEN -- if excludeTax = 'Y', percentage is aplied on the TotalLines v_paymentAmount:=C_Currency_Round((v_TotalLines-v_partialAmount) *CUR_PAYMENTS.PERCENTAGE/100, v_Currency_ID, NULL) ; ELSIF(CUR_PAYMENTS.ONREMAINDER='N') THEN -- if onRemainder = 'N', percentage is aplied on the GrandTotal v_paymentAmount:=C_Currency_Round((v_GrandTotal-v_partialAmount) *CUR_PAYMENTS.PERCENTAGE/100, v_Currency_ID, NULL) ; ELSE v_paymentAmount:=C_Currency_Round((v_pendingAmount) *CUR_PAYMENTS.PERCENTAGE/100, v_Currency_ID, NULL) ; END IF; v_pendingAmount:=v_pendingAmount - v_paymentAmount; SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID) ; INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_CANCEL_ID, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_INVOICE_ID, C_BPARTNER_ID, C_CURRENCY_ID, C_CASHLINE_ID, C_BANKACCOUNT_ID, C_CASHBOOK_ID, PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, C_BANKSTATEMENTLINE_ID, CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, c_project_id, status, status_initial, withholdingamount,C_WITHHOLDING_ID ) VALUES ( v_debtPaymentID, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_IsSOTrx, NULL, NULL, '* ' || v_DocumentNo || ' * (' || COALESCE(TO_CHAR(v_BPartnerName) ,'') ||( CASE WHEN v_POReference IS NULL THEN '' ELSE ' .Ref:'||TO_CHAR(v_POReference) END) || ' )', v_Record_ID, v_BPartner_ID, v_Currency_ID, NULL, v_bankAccount, v_cashBook, CUR_PAYMENTS.PaymentRule, 'N', C_Currency_Round((v_paymentamount *v_multiplierarc) -withholdamount *(v_paymentamount *v_multiplierarc / v_grandtotal), v_Currency_ID, NULL), 0, v_plannedDate, 'N', 'Y', NULL, 'N', 'N', 'N', v_C_Project_Id, 'DE', 'DE', C_Currency_Round(withholdamount *(v_paymentamount *v_multiplierarc / v_grandtotal), v_Currency_ID, NULL),cWithHoldId ) ; --AL --Looking for autogenerated debt-payments SELECT MAX(c_Debt_Payment_Id), MAX(ad_Org_ID) INTO v_GenDebt_PaymentID, v_GenDP_Org FROM C_DEBT_PAYMENT DP WHERE C_BPartner_ID=v_BPartner_ID AND C_Debt_Payment_Status(C_Settlement_Cancel_ID, Cancel_Processed, Generate_Processed, IsPaid, IsValid, C_Cashline_ID, C_BankstatementLine_ID)='P' AND(-1) *Amount=v_paymentAmount AND c_currency_ID=v_Currency_ID AND C_SETTLEMENT_GENERATE_ID IS NOT NULL AND Ad_Isorgincluded(v_ad_Org_id, dp.ad_org_id,v_Client_ID) != -1 AND ad_client_id = v_Client_ID AND EXISTS (SELECT 1 FROM C_SETTLEMENT S WHERE DP.C_SETTLEMENT_GENERATE_ID = S.C_Settlement_ID AND IsGenerated = 'Y') AND NOT EXISTS (SELECT 1 FROM C_REMITTANCELINE rl WHERE rl.C_DEBT_PAYMENT_CANCELLED = DP.C_DEBT_PAYMENT_ID); IF v_GenDebt_PaymentID IS NOT NULL THEN v_SettlementDocTypeID:=Ad_Get_Doctype(v_Client_ID, v_GenDP_Org, TO_CHAR('STT')) ; SELECT * INTO v_settlement_ID FROM Ad_Sequence_Next('C_Settlement', v_Record_ID) ; SELECT * INTO v_SDocument_No FROM Ad_Sequence_Doctype(v_SettlementDocTypeID, v_Record_ID, 'Y') ; IF(v_SDocument_No IS NULL) THEN SELECT * INTO v_SDocument_No FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_Client_ID, 'Y') ; END IF; INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, PROCESSING, PROCESSED, POSTED, C_CURRENCY_ID, ISGENERATED ) /*, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, CREATEFROM)*/ VALUES ( v_Settlement_ID, v_Client_ID, v_GenDP_Org, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, '*C*'||v_SDocument_No, TRUNC(TO_DATE(NOW())), TRUNC(TO_DATE(NOW())), 'C', v_SettlementDocTypeID, 'N', 'N', 'N', v_Currency_ID, 'Y' ) ; UPDATE C_DEBT_PAYMENT SET C_Settlement_Cancel_Id=v_Settlement_ID, Updated=TO_DATE(NOW()), UpdatedBy=v_UpdatedBy WHERE c_Debt_Payment_ID IN(v_genDebt_PaymentID, v_debtPaymentID) ; PERFORM C_SETTLEMENT_POST(NULL, v_Settlement_ID) ; END IF; --If Invoice.paymentRule = 'B', insert de cashline de tipo efecto apuntando al efecto IF(v_cashBook IS NOT NULL AND CUR_PAYMENTS.PaymentRule='B') THEN SELECT MAX(C.C_CASH_ID) INTO v_Cash FROM C_CASH C WHERE C.C_CASHBOOK_ID=v_cashBook AND TRUNC(C.DATEACCT)=TRUNC(v_DateAcct) AND C.PROCESSED='N'; SELECT C_CURRENCY_ID INTO v_CB_Curr FROM C_CASHBOOK WHERE C_CASHBOOK_ID = v_cashBook; IF(v_Cash IS NULL) THEN v_ResultStr:='Creating C_Cash'; SELECT ISO_CODE INTO v_IsoCode FROM C_CURRENCY WHERE C_Currency_ID=v_CB_Curr; SELECT * INTO v_Cash FROM Ad_Sequence_Next('C_Cash', v_Record_ID) ; INSERT INTO C_CASH ( C_Cash_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_CashBook_ID, NAME, StatementDate, DateAcct, BeginningBalance, EndingBalance, StatementDifference, Processing, Processed, Posted ) VALUES (v_Cash, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_cashBook, (TO_CHAR(v_DateAcct, 'YYYY-MM-DD') || ' ' || v_IsoCode), v_DateAcct, v_DateAcct, 0, 0, 0, 'N', 'N', 'N'); END IF; -- v_Cash IS NULL v_ResultStr:='Creating C_CashLine'; SELECT * INTO v_CashLine FROM Ad_Sequence_Next('C_CashLine', v_Record_ID) ; SELECT COALESCE(MAX(LINE), 0) + 10 INTO v_line FROM C_CASHLINE WHERE C_CASH_ID=v_Cash; SELECT SUM(AMOUNT) INTO v_Amount FROM C_DEBT_PAYMENT_V WHERE C_INVOICE_ID = v_Record_ID; INSERT INTO C_CASHLINE ( C_CashLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Cash_ID, C_Debt_Payment_ID, Line, Description, Amount, CashType, C_Currency_ID, DiscountAmt, WriteOffAmt, IsGenerated ) VALUES ( v_CashLine, v_Client_ID, v_Org_ID, 'Y', TO_DATE(TO_DATE(NOW())), v_UpdatedBy, TO_DATE(TO_DATE(NOW())), v_UpdatedBy, v_Cash, v_debtPaymentID, v_line, v_BPartnerName, v_Amount, 'P', v_Currency_ID, 0, 0, 'Y' ) ; END IF; -- v_cashBook IS NOT NULL END LOOP; END; END IF; -- v_GrandTotal <> v_totalCash END; IF(NOT FINISH_PROCESS AND v_IsSOTrx='Y') THEN PERFORM C_BP_SOCREDITUSED_REFRESH(v_BPartner_ID) ; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN -- Finish up ------------------------------------------------------------- UPDATE C_INVOICE SET DocStatus='CO', Processed='Y', DocAction='RE', Updated=TO_DATE(NOW()) WHERE C_Invoice_ID=v_Record_ID; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- End Processing -------------------------------------------------------- ---- <> v_ResultStr:='UnLockingInvoice'; UPDATE C_INVOICE SET Processing='N', Updated=TO_DATE(NOW()), UpdatedBy=v_UpdatedBy WHERE C_Invoice_ID=v_Record_ID; -- Commented by cromero 19102006 IF(p_PInstance_ID IS NOT NULL) THEN -- Commented by cromero 19102006 -- COMMIT; -- Commented by cromero 19102006 END IF; END IF;--FINISH_PROCESS --C_Invoice_Post - Finish_Process Extension Point SELECT count(*) INTO v_count FROM DUAL where exists (select 1 from ad_ep_procedures where ad_extension_points_id = 'CBE7DD2E561E4D3D8257ECEA5F19687F'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); --OBTG:VARCHAR2-- v_extension_point_id VARCHAR(32) := 'CBE7DD2E561E4D3D8257ECEA5F19687F'; --OBTG:VARCHAR2-- BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Record_ID', v_record_id, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'DocAction', v_DocAction, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'User', v_UpdatedBy, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Message', NULL, NULL, NULL, NULL, NULL, NULL, v_Message); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Result', NULL, NULL, v_result, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); SELECT p_number INTO v_Result FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'Result'; SELECT p_text INTO v_Message FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'Message'; DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; END IF; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_UpdatedBy, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','--<> ' || v_Message ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%',v_ResultStr ; v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; -- Commented by cromero 19102006 RETURN; END ; $_$ LANGUAGE plpgsql; gDROP FUNCTION public.c_invoice_post(p_pinstance_id character varying, p_invoice_id character varying); publictadfalse23416125536685"c_invoice_post0(character varying)FUNCTIONCREATE FUNCTION c_invoice_post0(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Invoice_Post0.sql,v 1.2 2002/10/21 04:49:46 jjanke Exp $ *** * Title: Post single Invoice *************************************************************************/ BEGIN PERFORM C_INVOICE_POST(p_PInstance_ID, NULL); END ; $_$ LANGUAGE plpgsql; HDROP FUNCTION public.c_invoice_post0(p_pinstance_id character varying); publictadfalse23416A125595460c_invoice_reverse_trg()FUNCTION CREATE FUNCTION c_invoice_reverse_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Check the introduced BP is the same as the Invoice ************************************************************************/ v_n NUMERIC; v_isprocessed C_Invoice.Processed%TYPE; v_bpheader_id C_Invoice.C_BPARTNER_ID%TYPE; v_bpreversed_id C_Invoice.C_BPARTNER_ID%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT PROCESSED, C_BPARTNER_ID INTO v_isprocessed, v_bpheader_id FROM C_INVOICE WHERE C_INVOICE_ID=NEW.C_INVOICE_ID; SELECT C_BPARTNER_ID INTO v_bpreversed_id FROM C_INVOICE WHERE C_INVOICE_ID=NEW.REVERSED_C_INVOICE_ID; IF(v_isprocessed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(v_bpheader_id <> v_bpreversed_id) THEN RAISE EXCEPTION '%', '@NotEqualBPartner@'; --OBTG:-20000-- END IF; END IF; IF(TG_OP = 'DELETE') THEN SELECT PROCESSED INTO v_isprocessed FROM C_INVOICE WHERE C_INVOICE_ID=OLD.C_INVOICE_ID; IF(v_isprocessed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.c_invoice_reverse_trg(); publictadfalse23416B125595462c_invoice_trg()FUNCTION:CREATE FUNCTION c_invoice_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Check in tg_op = 'DELETE', invoice not processed ************************************************************************/ v_n NUMERIC; v_count NUMERIC; v_result NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- If invoice is processed, is not allowed to change C_BPartner IF TG_OP = 'UPDATE' THEN IF(OLD.Processed='Y' AND ((COALESCE(OLD.C_BPartner_ID, '0') <> COALESCE(NEW.C_BPartner_ID, '0')) OR(COALESCE(OLD.DOCUMENTNO, '.') <> COALESCE(NEW.DOCUMENTNO, '.')) OR(COALESCE(OLD.C_DOCTYPE_ID, '0') <> COALESCE(NEW.C_DOCTYPE_ID, '0')) OR(COALESCE(OLD.C_DOCTYPETARGET_ID, '0') <> COALESCE(NEW.C_DOCTYPETARGET_ID, '0')) OR(COALESCE(OLD.DATEINVOICED, TO_DATE('31-12-9999', 'DD-MM-YYYY')) <> COALESCE(NEW.DATEINVOICED, TO_DATE('31-12-9999', 'DD-MM-YYYY'))) OR(COALESCE(OLD.C_BPARTNER_LOCATION_ID, '0') <> COALESCE(NEW.C_BPARTNER_LOCATION_ID, '0')) OR(COALESCE(OLD.PAYMENTRULE, '.') <> COALESCE(NEW.PAYMENTRULE, '.')) OR(COALESCE(OLD.C_PAYMENTTERM_ID, '0') <> COALESCE(NEW.C_PAYMENTTERM_ID, '0')) OR(COALESCE(OLD.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0')) OR(COALESCE(OLD.CHARGEAMT, 0) <> COALESCE(NEW.CHARGEAMT, 0)) OR(COALESCE(OLD.M_PRICELIST_ID, '0') <> COALESCE(NEW.M_PRICELIST_ID, '0')) OR(COALESCE(OLD.AD_USER_ID, '0') <> COALESCE(NEW.AD_USER_ID, '0')) OR(COALESCE(OLD.AD_ORGTRX_ID, '0') <> COALESCE(NEW.AD_ORGTRX_ID, '0')) OR(COALESCE(OLD.USER1_ID, '0') <> COALESCE(NEW.USER1_ID, '0')) OR(COALESCE(OLD.USER2_ID, '0') <> COALESCE(NEW.USER2_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) THEN SELECT COUNT(*) INTO V_COUNT FROM C_INVOICELINE WHERE C_INVOICE_ID = NEW.C_INVOICE_ID; IF(V_COUNT > 0) THEN SELECT COUNT(*) INTO V_RESULT FROM C_INVOICELINE WHERE C_INVOICE_ID = NEW.C_INVOICE_ID AND AD_ISORGINCLUDED(NEW.AD_ORG_ID,AD_ORG_ID,NEW.AD_CLIENT_ID) <> -1; IF(V_RESULT = 0) THEN RAISE EXCEPTION '%', '@orgnizationHeaderCheck@' ; --OBTG:-20000-- END IF; END IF; END IF; IF (COALESCE(OLD.C_BPartner_ID, '0')!=COALESCE(NEW.C_BPartner_ID, '0')) OR (COALESCE(OLD.M_PriceList_ID,'0') != COALESCE(NEW.M_PriceList_ID,'0')) THEN SELECT COUNT(*) INTO v_n FROM C_INVOICELINE WHERE C_Invoice_ID = NEW.C_Invoice_ID; IF v_n>0 THEN RAISE EXCEPTION '%', 'Cannot change bussiness partner or price list if there are lines' ; --OBTG:-20502-- END IF; END IF; IF(OLD.Posted='Y' AND ((COALESCE(OLD.DATEACCT, TO_DATE('31-12-9999', 'DD-MM-YYYY')) <> COALESCE(NEW.DATEACCT, TO_DATE('31-12-9999', 'DD-MM-YYYY'))) OR(COALESCE(OLD.C_CAMPAIGN_ID, '0') <> COALESCE(NEW.C_CAMPAIGN_ID, '0')) OR(COALESCE(OLD.C_PROJECT_ID, '0') <> COALESCE(NEW.C_PROJECT_ID, '0')) OR(COALESCE(OLD.C_ACTIVITY_ID, '0') <> COALESCE(NEW.C_ACTIVITY_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.PROCESSED='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(OLD.PROCESSED='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; &DROP FUNCTION public.c_invoice_trg(); publictadfalse23416C125595464c_invoice_trg2()FUNCTIONCREATE FUNCTION c_invoice_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Discounts RECORD; v_Key VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; FOR Cur_Discounts IN ( SELECT C_DISCOUNT_ID, LINE, CASCADE FROM C_BPARTNER_DISCOUNT WHERE C_BPARTNER_ID=NEW.C_BPARTNER_ID AND ISACTIVE='Y' AND(ISCUSTOMER=NEW.ISSOTRX OR ISVENDOR <> NEW.ISSOTRX) AND APPLYINORDER='N' ORDER BY LINE ) LOOP SELECT * INTO v_Key FROM Ad_Sequence_Next('C_Invoice_Discount', NEW.AD_Client_ID) ; INSERT INTO C_INVOICE_DISCOUNT ( C_INVOICE_DISCOUNT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_INVOICE_ID, C_DISCOUNT_ID, LINE, CASCADE ) VALUES ( v_Key, NEW.AD_Client_ID, NEW.AD_Org_ID, 'Y', TO_DATE(NOW()), NEW.CREATEDBY, TO_DATE(NOW()), NEW.UPDATEDBY, NEW.C_INVOICE_ID, Cur_Discounts.C_DISCOUNT_ID, Cur_Discounts.LINE, Cur_Discounts.CASCADE ) ; END LOOP; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_invoice_trg2(); publictadfalse23416;125595441c_invoicediscount_trg()FUNCTIONCREATE FUNCTION c_invoicediscount_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RO NUMERIC; v_Processed VARCHAR(60) ; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN SELECT PROCESSED INTO v_Processed FROM C_INVOICE WHERE C_INVOICE_ID=OLD.C_INVOICE_ID; IF(v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; -- Get ID IF(TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_ID:=NEW.C_Invoice_ID; ELSE v_ID:=OLD.C_Invoice_ID; END IF; -- ReadOnly Check SELECT COUNT(*) INTO v_RO FROM C_INVOICE WHERE C_Invoice_ID=v_ID AND(Processed='Y' OR Posted='Y') ; IF(v_RO > 0) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.c_invoicediscount_trg(); publictadfalse23416125536690$c_invoiceline_tax(character varying)FUNCTION CREATE FUNCTION c_invoiceline_tax(p_invoiceline_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): _______________________________________. ************************************************************************/ v_INVOICELINE_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Tax_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_IsTaxIncluded VARCHAR(1); v_LineNet NUMERIC; v_Rate NUMERIC; xTaxAmt NUMERIC:=0; v_IsSummary VARCHAR(1); v_StdPrecision NUMERIC; xTaxBaseAmt NUMERIC; v_GrandTotal NUMERIC:=0; v_FirstLine BOOLEAN:=FALSE; v_ActualBaseAmt NUMERIC:=0; --TYPE RECORD IS REFCURSOR; Cur_MultiTax RECORD; BEGIN --Calculates for each line, its tax info SELECT l.C_INVOICELINE_ID, l.C_Tax_ID, i.IsTaxIncluded, COALESCE(l.LineNetAmt, 0) + COALESCE(l.ChargeAmt, 0) AS LineNet, t.Rate, t.IsSummary, c.StdPrecision INTO v_INVOICELINE_ID, v_Tax_ID, v_IsTaxIncluded, v_LineNet, v_Rate, v_IsSummary, v_StdPrecision FROM C_INVOICE i, C_INVOICELINE l, C_TAX t, C_CURRENCY c WHERE i.C_Invoice_ID=l.C_Invoice_ID AND l.C_InvoiceLine_ID=p_InvoiceLine_ID AND l.C_Tax_ID=t.C_Tax_ID AND i.C_Currency_ID=c.C_Currency_ID AND UPPER(T.NAME) NOT LIKE '%I%R%P%F%' AND UPPER(T.NAME) NOT LIKE '%RETEN%' ORDER BY 4 DESC ; --Process line xTaxBaseAmt:=v_LineNet; IF(v_IsSummary='N') THEN xTaxAmt:=ROUND(xTaxBaseAmt * v_Rate / 100, v_StdPrecision) ; RETURN xTaxAmt; ELSE -- Multiple Taxes v_GrandTotal:=v_GrandTotal + xTaxBaseAmt; v_FirstLine := TRUE; FOR Cur_MultiTax IN (SELECT C_Tax_ID, Rate, CASCADE FROM C_TAX WHERE Parent_Tax_ID=v_Tax_ID AND UPPER(NAME) NOT LIKE '%I%R%P%F%' AND UPPER(NAME) NOT LIKE '%RETEN%' ORDER BY Line) LOOP IF ((Cur_MultiTax.CASCADE = 'Y') AND (NOT v_FirstLine)) THEN --cannot apply cascade to the first line v_ActualBaseAmt := v_GrandTotal; ELSE v_ActualBaseAmt := xTaxBaseAmt; END IF; v_FirstLine := FALSE; xTaxAmt:=xTaxAmt + ROUND(v_ActualBaseAmt * Cur_MultiTax.Rate / 100, v_StdPrecision) ; v_GrandTotal:=v_GrandTotal + xTaxAmt; -- END LOOP; RETURN xTaxAmt; END IF; END ; $$ LANGUAGE plpgsql; LDROP FUNCTION public.c_invoiceline_tax(p_invoiceline_id character varying); publictadfalse23416=125595445c_invoiceline_trg()FUNCTIONPCREATE FUNCTION c_invoiceline_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_newTaxBaseAmt NUMERIC; v_oldTaxBaseAmt NUMERIC; v_oldLine NUMERIC:= 0; v_newLine NUMERIC:= 0; v_taxAmt NUMERIC:= 0; v_HasTaxLine BOOLEAN := FALSE; v_isPosted VARCHAR(60); v_ID VARCHAR(32); --OBTG:varchar2-- v_Processed VARCHAR(60); v_Prec NUMERIC:=2; v_UOM_ID VARCHAR(32); --OBTG:varchar2-- v_Currency VARCHAR(32); --OBTG:VARCHAR2-- v_ChargeAmt NUMERIC; v_LineNetAmt NUMERIC; v_CinvoiceTaxID VARCHAR(32); --OBTG:varchar2-- v_AttrSetValueType M_Product.AttrSetValueType%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF NOT(COALESCE(old.QtyInvoiced,0) <> COALESCE(NEW.QtyInvoiced,0) OR COALESCE(old.LineNetAmt,0) <> COALESCE(NEW.LineNetAmt,0) OR COALESCE(old.ChargeAmt,0) <> COALESCE(NEW.ChargeAmt,0) OR COALESCE(old.M_Product_ID,'0') <> COALESCE(NEW.M_Product_ID,'0') OR COALESCE(old.C_Tax_ID,'0') <> COALESCE(NEW.C_Tax_ID,'0') OR COALESCE(old.C_Uom_ID,'0') <> COALESCE(NEW.C_Uom_ID,'0')) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; -- Difference, ID IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN IF (NEW.M_PRODUCT_ID IS NOT NULL) THEN SELECT C_UOM_ID INTO v_UOM_ID FROM M_PRODUCT WHERE M_PRODUCT_ID=NEW.M_PRODUCT_ID; IF (COALESCE(v_UOM_ID,'0') <> COALESCE(NEW.C_UOM_ID,'0')) THEN IF (NEW.M_INOUTLINE_ID IS NOT NULL) THEN SELECT C_UOM_ID INTO v_UOM_ID FROM M_INOUTLINE WHERE M_INOUTLINE_ID = NEW.M_INOUTLINE_ID; IF (COALESCE(v_UOM_ID,'0') <> COALESCE(NEW.C_UOM_ID,'0')) THEN RAISE EXCEPTION '%', 'Unit of Measure mismatch (product/transaction)'; --OBTG:-20111-- END IF; ELSIF (NEW.C_ORDERLINE_ID IS NOT NULL) THEN SELECT C_UOM_ID INTO v_UOM_ID FROM C_ORDERLINE WHERE C_ORDERLINE_ID = NEW.C_ORDERLINE_ID; IF (COALESCE(v_UOM_ID,'0') <> COALESCE(NEW.C_UOM_ID,'0')) THEN RAISE EXCEPTION '%', 'Unit of Measure mismatch (product/transaction)'; --OBTG:-20111-- END IF; ELSE RAISE EXCEPTION '%', 'Unit of Measure mismatch (product/transaction)'; --OBTG:-20111-- END IF; END IF; END IF; v_ID := NEW.C_Invoice_ID; ELSE v_ID := OLD.C_Invoice_ID; END IF; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN --Does not allow to change the attribute set value -- for products which attribute set value type is Fixed IF (NEW.M_PRODUCT_ID IS NOT NULL AND COALESCE(new.M_AttributeSetInstance_ID,'0')!='0') THEN SELECT ATTRSETVALUETYPE INTO v_AttrSetValueType FROM M_PRODUCT WHERE M_PRODUCT_ID=NEW.M_PRODUCT_ID; IF (v_AttrSetValueType='F') THEN RAISE EXCEPTION '%', '@AttrSetValueFixed@'; --OBTG:-20000-- END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_invoiceline_trg(); publictadfalse23416@125595447c_invoiceline_trg2()FUNCTION?)CREATE FUNCTION c_invoiceline_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Offer RECORD; v_InvoiceLine_Offer_ID VARCHAR(32); --OBTG:VARCHAR2-- v_lineno NUMERIC:=0; v_Price NUMERIC; v_PriceNew NUMERIC; v_Amt NUMERIC; v_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Insert BOOLEAN :=FALSE; v_DateInvoiced TIMESTAMP; v_Precision NUMERIC; v_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Processed C_ORDER.PROCESSED%TYPE; v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_oldLine NUMERIC; v_newLineNetAmt NUMERIC; v_newLineAlternate NUMERIC; v_taxAmt NUMERIC; v_Prec C_CURRENCY.STDPRECISION%TYPE; v_BaseAmount C_TAX.BASEAMOUNT%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- This trigger is used for calculate the applied offers f0r the invoice IF (TG_OP = 'DELETE') THEN v_ID:=OLD.C_INVOICE_ID; ELSE v_ID:=NEW.C_INVOICE_ID; END IF; IF TG_OP = 'UPDATE' THEN IF ( (COALESCE(NEW.M_Product_ID,'0') != COALESCE(OLD.M_Product_ID,'0')) OR (COALESCE(NEW.PriceActual,0) != COALESCE(OLD.PriceActual,0)) OR (COALESCE(NEW.QtyInvoiced,0) != COALESCE(OLD.QtyInvoiced,0))) THEN DELETE FROM C_INVOICELINE_OFFER WHERE C_InvoiceLine_ID = NEW.C_InvoiceLine_ID; v_Insert := TRUE; END IF; END IF; IF TG_OP = 'INSERT' OR v_Insert THEN SELECT C_BPartner_ID, dateInvoiced, priceprecision, M_PriceList_ID INTO v_BPartner_ID, v_DateInvoiced, v_Precision, v_PriceList_ID FROM C_INVOICE i, C_CURRENCY c WHERE C_Invoice_ID = NEW.C_Invoice_ID AND i.C_Currency_ID = c.C_Currency_ID; --Get the new "std" price from the Actual price (if actual price is the std price they will be equal) v_Price := NEW.PriceActual; FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE v_DateInvoiced BETWEEN DATEFROM AND COALESCE(DATETO,TO_DATE('31-12-9999','DD-MM-YYYY')) AND IsActive = 'Y' AND (NEW.QtyInvoiced >= COALESCE(Qty_From,0) OR Qty_From IS NULL) AND (NEW.QtyInvoiced <= COALESCE(Qty_To,0) OR Qty_To IS NULL) AND ((PRICELIST_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID)) OR (PRICELIST_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID))) AND ((BPARTNER_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID)) OR (BPARTNER_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID))) AND ((BP_GROUP_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID)) OR (BP_GROUP_SELECTION='N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID))) AND ((PRODUCT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID)) OR (PRODUCT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID))) AND ((PROD_CAT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID)) OR (PROD_CAT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID))) ORDER BY PRIORITY DESC, M_OFFER_ID) LOOP v_Price := M_Get_Offer_Std_Price(Cur_Offer.M_Offer_ID, v_Price); END LOOP; FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE v_DateInvoiced BETWEEN DATEFROM AND COALESCE(DATETO,TO_DATE('31-12-9999','DD-MM-YYYY')) AND IsActive = 'Y' AND (NEW.QtyInvoiced >= COALESCE(Qty_From,0) OR Qty_From IS NULL) AND (NEW.QtyInvoiced <= COALESCE(Qty_To,0) OR Qty_To IS NULL) AND ((PRICELIST_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID)) OR (PRICELIST_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID))) AND ((BPARTNER_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID)) OR (BPARTNER_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID))) AND ((BP_GROUP_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID)) OR (BP_GROUP_SELECTION='N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID))) AND ((PRODUCT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID)) OR (PRODUCT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID))) AND ((PROD_CAT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID)) OR (PROD_CAT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID))) ORDER BY PRIORITY, M_OFFER_ID DESC) LOOP SELECT * INTO v_InvoiceLine_Offer_ID FROM Ad_Sequence_Next('C_InvoiceLine_Offer', NEW.AD_Client_ID); v_lineno := v_lineno + 10; v_PriceNew := M_Get_Offer_Price(Cur_Offer.M_Offer_ID, v_Price); v_Amt := v_Price - v_PriceNew; INSERT INTO C_INVOICELINE_OFFER (C_INVOICELINE_OFFER_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_INVOICELINE_ID, LINE, M_OFFER_ID, PRICEOFFER, AMTOFFER) VALUES (v_InvoiceLine_Offer_ID, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, TO_DATE(NOW()),NEW.CreatedBy, TO_DATE(NOW()),NEW.UpdatedBy, NEW.C_InvoiceLine_ID, v_lineno, Cur_Offer.M_Offer_Id, ROUND(v_Price,v_Precision), ROUND(v_Amt, v_Precision)); v_Price := v_PriceNew; END LOOP; END IF; /************************************************************************** * Calculate Tax, etc. */ SELECT processed, stdPrecision INTO v_Processed, v_Prec FROM C_Invoice, C_Currency WHERE C_Invoice.C_Currency_ID = C_Currency.C_Currency_ID AND C_Invoice_ID=v_ID; v_oldLine:=0; v_newLineNetAmt:=0; IF(v_Processed='N') THEN -- Calculate taxes IF(TG_OP = 'UPDATE') THEN v_oldLine:= COALESCE(old.LineNetAmt,0); END IF; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN DELETE FROM C_INVOICELINETAX WHERE C_INVOICELINE_ID = new.C_InvoiceLine_ID; v_newLineNetAmt := COALESCE(new.LineNetAmt,0); v_newLineAlternate := COALESCE(new.TaxBaseAmt,0); IF(new.C_Tax_ID IS NOT NULL) THEN SELECT BaseAmount INTO v_BaseAmount FROM C_TAX WHERE C_TAX_ID = new.C_Tax_ID; PERFORM C_INVOICELINETAX_INSERT(new.AD_Org_ID, new.C_Invoice_ID, new.C_InvoiceLine_ID, new.UpdatedBy, new.C_Tax_ID, new.C_Tax_ID, v_newLineNetAmt, v_newLineAlternate, v_Prec); END IF; -- Get Total Tax Amt SELECT SUM(TaxAmt) INTO v_taxAmt FROM C_InvoiceTax WHERE C_Invoice_ID=new.C_Invoice_ID; -- DBMS_OUTPUT.PUT_LINE('TaxAmt = ' || v_taxAmt); -- Update Header UPDATE C_Invoice SET TotalLines = TotalLines - v_oldLine + v_newLineNetAmt, GrandTotal = TotalLines - v_oldLine + v_newLineNetAmt + COALESCE(v_taxAmt, 0) -- Updated = SysDate -- Don't update as otherwise it does not save changes WHERE C_Invoice_ID = new.C_Invoice_ID; ELSE -- DELETING SELECT SUM(TaxAmt) INTO v_taxAmt FROM C_InvoiceTax WHERE C_Invoice_ID=old.C_Invoice_ID; -- DBMS_OUTPUT.PUT_LINE('TaxAmt = ' || v_taxAmt); -- Update Header UPDATE C_Invoice SET TotalLines = TotalLines - v_oldLine + v_newLineNetAmt, GrandTotal = TotalLines - v_oldLine + v_newLineNetAmt + COALESCE(v_taxAmt, 0) -- Updated = SysDate -- Don't update as otherwise it does not save changes WHERE C_Invoice_ID=old.C_Invoice_ID; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_invoiceline_trg2(); publictadfalse23416A125595450c_invoiceline_trg3()FUNCTIONCREATE FUNCTION c_invoiceline_trg3() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --Invoice vwithholdingtotal NUMERIC; vBusPartId VARCHAR(32); --OBTG:varchar2-- vIsSalesInvoice CHAR(1); vProcessed VARCHAR(60); --InvoiceLine v_invoiceid VARCHAR(32); --OBTG:varchar2-- vexcludeforwh CHAR(1); vlinebaseamountnew NUMERIC; vlinebaseamountold NUMERIC; -- BP_Withholding isbaseamountpercent CHAR(1); baseamountpercent NUMERIC; includetaxinps CHAR(1); taxinps_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Tax vTaxAmount NUMERIC; -- Withholding withpercent NUMERIC; --Calculated Variable vwithholdingnew NUMERIC; vwithholdingold NUMERIC; taxamountwith NUMERIC; vwithholdingtax NUMERIC; vwithid VARCHAR(32); --OBTG:varchar2-- finish_process BOOLEAN := FALSE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT') THEN v_invoiceid := NEW.c_invoice_id; vexcludeforwh := NEW.excludeforwithholding; vlinebaseamountnew := NEW.linenetamt; vlinebaseamountold := 0; ELSIF(TG_OP = 'UPDATE') THEN v_invoiceid := NEW.c_invoice_id; vexcludeforwh := NEW.excludeforwithholding; vlinebaseamountnew := NEW.linenetamt; vlinebaseamountold := OLD.linenetamt; ELSIF(TG_OP = 'DELETE') THEN v_invoiceid := OLD.c_invoice_id; vexcludeforwh := OLD.excludeforwithholding; vlinebaseamountnew := 0; vlinebaseamountold := OLD.linenetamt; END IF; -- If The lines is excluded for calculate the witholding --> exit IF vexcludeforwh = 'Y' THEN finish_process:= true; END IF; IF (NOT finish_process) THEN SELECT COALESCE(withholdingamount, 0), c_bpartner_id, IsSOTrx , coalesce(processed,'N') ,c_withholding_id INTO vwithholdingtotal,vBusPartId, vIsSalesInvoice, vProcessed ,vwithid FROM c_invoice WHERE c_invoice_id = v_invoiceid; END IF; IF (NOT finish_process) THEN -- Se the invoice isn't purchase exit from trigger if (vIsSalesInvoice <> 'N') then finish_process:= true; end if; END IF; IF (NOT finish_process) THEN BEGIN select bpwh.is_percent_wh, bpwh.wh_percent, bpwh.include_tax, bpwh.c_tax_id,wh.rate into isbaseamountpercent, baseamountpercent, includetaxinps, taxinps_id,withpercent from c_bp_withholding bpwh, c_withholding wh where bpwh.c_bpartner_id = vBusPartId and bpwh.c_withholding_id = wh.c_withholding_id and bpwh.c_withholding_id = vwithid; EXCEPTION When DATA_EXCEPTION THEN finish_process:= true; end; END IF; IF (NOT finish_process) THEN -- ReadOnly Check IF (vProcessed = 'N') THEN IF(isbaseamountpercent <> 'Y') THEN baseamountpercent := 100; END IF; -- New WithHolding For LineAmount vlinebaseamountnew := vlinebaseamountnew *baseamountpercent / 100; vwithholdingnew :=(withpercent * vlinebaseamountnew) / 100; -- Old WithHolding For LineAmount vlinebaseamountold := vlinebaseamountold *baseamountpercent / 100; vwithholdingold :=(withpercent *vlinebaseamountold) / 100; -- WithHolding Tax vTaxAmount := 0; IF (includetaxinps = 'Y') THEN select coalesce(sum(taxamt),0) into vTaxAmount from c_invoicetax invtax , c_tax tax where tax.c_tax_id = invtax.c_tax_id and tax.iswithholdingtax='Y' and invtax.c_invoice_id = v_invoiceid and tax.c_tax_id=taxinps_id; END IF; taxamountwith := baseamountpercent * (vTaxAmount)/100; vwithholdingtax := withpercent*taxamountwith/100 ; -- Update WITHHOLDINGAMOUNT della c_invoice = totale+(new valore wh of line) -(old valore wh of line) vwithholdingtotal := vwithholdingtotal + vwithholdingnew -vwithholdingold+ vwithholdingtax; UPDATE c_invoice SET withholdingamount = vwithholdingtotal WHERE c_invoice_id = v_invoiceid; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_invoiceline_trg3(); publictadfalse23416>125595453c_invoiceline_trg4()FUNCTIONCREATE FUNCTION c_invoiceline_trg4() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ V_PRECISION NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT C.STDPRECISION INTO V_PRECISION FROM C_INVOICE I, C_CURRENCY C WHERE I.C_CURRENCY_ID=C.C_CURRENCY_ID AND I.C_INVOICE_ID=NEW.C_INVOICE_ID; IF (ROUND(TO_NUMBER(NEW.QTYINVOICED) * TO_NUMBER(NEW.PRICEACTUAL),V_PRECISION)!=TO_NUMBER(NEW.LINENETAMT)) THEN RAISE EXCEPTION '%','Line Amount Is Not Correct'; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_invoiceline_trg4(); publictadfalse23416125556472c_invoicelinetax_insert(character varying, character varying, character varying, character varying, character varying, character varying, numeric, numeric, numeric)FUNCTIONMCREATE FUNCTION c_invoicelinetax_insert(p_org_id character varying, p_invoice_id character varying, p_invoiceline_id character varying, p_user_id character varying, p_originaltax_id character varying, p_tax_id character varying, p_linenetamt numeric, p_alternatetaxbaseamt numeric, p_stdprecision numeric) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_IsSummary C_TAX.ISSUMMARY%TYPE; v_Cascade C_TAX.CASCADE%TYPE; v_TaxBaseAmount NUMERIC; v_BaseAmount C_TAX.BASEAMOUNT%TYPE; v_AlreadyExists NUMERIC; v_C_TaxBase_ID C_TAX.C_TAXBASE_ID%TYPE; v_LineNet NUMERIC; v_AlternateTaxBaseAmt NUMERIC; v_LineNo C_INVOICETAX.LINE%TYPE; v_Rate C_TAX.RATE%TYPE; v_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Taxes RECORD; FINISH_PROCESS BOOLEAN:=false; BEGIN --BODY v_TaxBaseAmount:=0; SELECT ISSUMMARY, CASCADE, RATE, BASEAMOUNT, AD_CLIENT_ID, C_TAXBASE_ID INTO v_IsSummary, v_Cascade, v_Rate, v_BaseAmount, v_Client_ID, v_C_TaxBase_ID FROM C_TAX WHERE C_TAX_ID = p_tax_id; IF(v_BaseAmount='LNA' OR v_BaseAmount='LNATAX') THEN v_TaxBaseAmount:=p_LineNetAmt; ELSIF (v_BaseAmount='TBA' OR v_BaseAmount='TBATAX') THEN v_TaxBaseAmount:=p_AlternateTaxBaseAmt; END IF; IF (v_TaxBaseAmount IS NULL) THEN v_TaxBaseAmount:=0; END IF; IF (v_BaseAmount='TAX' OR v_BaseAmount='LNATAX' OR v_BaseAmount='TBATAX') THEN SELECT COALESCE(SUM(TAXAMT),0) + v_TaxBaseAmount INTO v_TaxBaseAmount FROM C_INVOICELINETAX, C_TAX WHERE C_INVOICELINETAX.C_TAX_ID = C_TAX.C_TAX_ID AND C_TAX_ISMEMBER(v_C_TaxBase_ID,C_TAX.C_TAX_ID) = 1 AND C_INVOICELINE_ID = p_invoiceline_id AND C_TAX.ISSUMMARY='N'; END IF; IF(v_Cascade='Y') THEN SELECT COALESCE(SUM(TAXAMT), 0) + v_TaxBaseAmount INTO v_TaxBaseAmount FROM C_INVOICELINETAX WHERE C_INVOICELINE_ID = p_invoiceline_id; END IF; IF(v_IsSummary='N') THEN SELECT COALESCE(MAX(LINE),0) + 10 INTO v_LineNo FROM C_INVOICELINETAX WHERE C_INVOICELINE_ID = p_invoiceline_id; IF(p_invoice_id IS NULL OR p_invoiceline_id IS NULL) THEN RAISE EXCEPTION '%', 'Null ORDER OR LINE ID'; --OBTG:-20200-- END IF; INSERT INTO C_INVOICELINETAX ( C_InvoiceLineTax_ID, C_InvoiceLine_ID, C_Invoice_ID, C_Tax_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, TaxBaseAmt, TaxAmt, Line) VALUES ( GET_UUID(), p_invoiceline_id, p_invoice_id, p_tax_id, v_Client_ID, p_org_id, 'Y', TO_DATE(NOW()), p_user_id, TO_DATE(NOW()), p_user_id, v_TaxBaseAmount, ROUND(v_TaxBaseAmount*v_Rate / 100, p_StdPrecision), v_LineNo); ELSE FOR Cur_Taxes IN (SELECT C_Tax_ID, RATE FROM C_TAX WHERE Parent_Tax_ID=p_tax_id ORDER BY Line) LOOP PERFORM C_INVOICELINETAX_INSERT(p_org_id, p_invoice_id, p_invoiceline_id, p_user_id, p_originaltax_id, Cur_Taxes.C_Tax_ID, p_LineNetAmt, p_AlternateTaxBaseAmt, p_StdPrecision); END LOOP; END IF; RETURN; ---- <> EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; RAISE EXCEPTION '%', SQLERRM; END ; $$ LANGUAGE plpgsql; 8DROP FUNCTION public.c_invoicelinetax_insert(p_org_id character varying, p_invoice_id character varying, p_invoiceline_id character varying, p_user_id character varying, p_originaltax_id character varying, p_tax_id character varying, p_linenetamt numeric, p_alternatetaxbaseamt numeric, p_stdprecision numeric); publictadfalse23416<125595443c_invoicelinetax_trg()FUNCTIONiCREATE FUNCTION c_invoicelinetax_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2010 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ v_Count NUMERIC; v_LineNo NUMERIC; v_C_Invoice_ID C_INVOICELINETAX.C_INVOICE_ID%TYPE; v_C_Tax_ID C_INVOICELINETAX.C_TAX_ID%TYPE; v_Prec C_CURRENCY.STDPRECISION%TYPE; v_DocTaxAmount C_TAX.DOCTAXAMOUNT%TYPE; v_Rate C_TAX.RATE%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN v_C_Tax_ID:=NEW.C_Tax_ID; v_C_Invoice_ID:=NEW.C_INVOICE_ID; ELSE v_C_Tax_ID:=OLD.C_Tax_ID; v_C_Invoice_ID:=OLD.C_INVOICE_ID; END IF; SELECT C_CURRENCY.STDPRECISION INTO v_Prec FROM C_INVOICE, C_CURRENCY WHERE C_INVOICE.C_CURRENCY_ID = C_CURRENCY.C_CURRENCY_ID AND C_INVOICE_ID = v_C_Invoice_ID; SELECT DOCTAXAMOUNT, RATE INTO v_DocTaxAmount, v_Rate FROM C_TAX WHERE C_TAX_ID = v_C_Tax_ID; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT COUNT(C_TAX_ID) INTO v_Count FROM C_INVOICETAX WHERE C_INVOICE_ID = NEW.C_Invoice_ID AND C_TAX_ID = NEW.C_TAX_ID; IF(v_Count>0) THEN UPDATE C_INVOICETAX SET TAXAMT = (CASE WHEN v_DocTaxAmount='D' THEN ROUND((TAXBASEAMT + NEW.TAXBASEAMT) * v_Rate/100, v_Prec) ELSE (TAXAMT + NEW.TAXAMT) END), TAXBASEAMT=TAXBASEAMT + NEW.TAXBASEAMT WHERE C_INVOICE_ID = NEW.C_Invoice_ID AND C_TAX_ID = NEW.C_TAX_ID; ELSE SELECT COALESCE(MAX(LINE),0) + 10 INTO v_LineNo FROM C_INVOICETAX WHERE C_INVOICE_ID = NEW.C_Invoice_ID; INSERT INTO C_INVOICETAX ( C_InvoiceTax_ID, C_Invoice_ID, C_Tax_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, TaxBaseAmt, TaxAmt, Line) VALUES ( GET_UUID(), NEW.C_Invoice_ID, NEW.C_TAX_ID, NEW.AD_CLIENT_ID, NEW.AD_ORG_ID, 'Y', TO_DATE(NOW()), NEW.UPDATEDBY, TO_DATE(NOW()), NEW.UPDATEDBY, NEW.TAXBASEAMT, NEW.TAXAMT, v_LineNo); END IF; ELSE UPDATE C_INVOICETAX SET TAXAMT = (CASE WHEN v_DocTaxAmount='D' THEN ROUND((TAXBASEAMT - OLD.TAXBASEAMT) * v_Rate/100, v_Prec) ELSE (TAXAMT - OLD.TAXAMT) END), TAXBASEAMT=TAXBASEAMT - OLD.TAXBASEAMT WHERE C_INVOICE_ID = OLD.C_Invoice_ID AND C_TAX_ID = OLD.C_TAX_ID; DELETE FROM C_INVOICETAX WHERE C_INVOICE_ID = OLD.C_Invoice_ID AND C_TAX_ID = OLD.C_TAX_ID AND TAXAMT=0 AND TAXBASEAMT=0; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.c_invoicelinetax_trg(); publictadfalse23416?125595455c_invoicetax_trg()FUNCTION CREATE FUNCTION c_invoicetax_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_InvoiceTax_Trg.sql,v 1.3 2003/03/18 07:08:07 jjanke Exp $ *** * Title: ReadOnly Check * Description: ************************************************************************/ v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RO NUMERIC; v_Processed VARCHAR(60) ; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN SELECT PROCESSED INTO v_Processed FROM C_INVOICE WHERE C_INVOICE_ID=old.C_INVOICE_ID; IF(v_Processed='Y' AND ((COALESCE(old.TAXBASEAMT, 0) <> COALESCE(new.TAXBASEAMT, 0)) OR(COALESCE(old.TAXAMT, 0) <> COALESCE(new.TAXAMT, 0)) OR(COALESCE(old.C_TAX_ID, '0') <> COALESCE(new.C_TAX_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; -- Get ID IF(TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_ID:=new.C_Invoice_ID; ELSE v_ID:=old.C_Invoice_ID; END IF; -- ReadOnly Check SELECT COUNT(*) INTO v_RO FROM C_Invoice WHERE C_Invoice_ID=v_ID AND(Processed='Y' OR Posted='Y') ; IF(v_RO > 0) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; )DROP FUNCTION public.c_invoicetax_trg(); publictadfalse23416@125595457c_invoicetax_trg2()FUNCTIONwCREATE FUNCTION c_invoicetax_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Invoice v_buspartid VARCHAR(32); --OBTG:varchar2-- vIsSalesInvoice CHAR(1); whamountold NUMERIC; vProcessed CHAR(1); -- InvoiceTax v_invoiceid VARCHAR(32); --OBTG:varchar2-- v_taxid VARCHAR(32); --OBTG:varchar2-- taxamountnew NUMERIC; taxamountold NUMERIC; -- BP_Withholding isbaseamountpercent CHAR(1); baseamountpercent NUMERIC; includetaxinps CHAR(1); taxinps_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Withholding withpercent NUMERIC; -- Tax v_IsWithTax CHAR(1); -- Calculated Variables baseamount NUMERIC; whamountnew NUMERIC; vwithid VARCHAR(32); --OBTG:varchar2-- finish_process BOOLEAN := FALSE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(tg_op = 'INSERT') THEN v_invoiceid := NEW.c_invoice_id; v_taxid := NEW.c_tax_id; taxamountnew := NEW.taxamt; taxamountold := 0; ELSIF(tg_op = 'UPDATE') THEN v_invoiceid := NEW.c_invoice_id; v_taxid := NEW.c_tax_id; taxamountnew := NEW.taxamt; taxamountold := OLD.taxamt; ELSIF(tg_op = 'DELETE') THEN v_invoiceid := OLD.c_invoice_id; v_taxid := OLD.c_tax_id; taxamountnew := 0; taxamountold := OLD.taxamt; END IF; -- Read data from invoice select c_bpartner_id,withholdingamount,issotrx , coalesce(processed,'N') ,c_withholding_id into v_buspartid, whamountold, vissalesinvoice, vProcessed ,vwithid from c_invoice where c_invoice_id=v_invoiceid; -- Se the invoice isn't purchase exit from trigger if (vIsSalesInvoice <> 'N') then finish_process:= true; end if; IF (NOT finish_process) THEN -- Read data from tax select iswithholdingtax into v_IsWithTax from c_tax where c_tax_id=v_taxid; -- Read data from Withholding BEGIN select bpwh.is_percent_wh, bpwh.wh_percent, bpwh.include_tax, bpwh.c_tax_id , wh.rate into isbaseamountpercent, baseamountpercent, includetaxinps, taxinps_id, withpercent from c_bp_withholding bpwh ,c_withholding wh where bpwh.c_bpartner_id = v_buspartid and bpwh.c_withholding_id = wh.c_withholding_id and bpwh.c_withholding_id = vwithid; EXCEPTION when DATA_EXCEPTION THEN finish_process:= true; end; END IF; IF (NOT finish_process) THEN IF(isbaseamountpercent <> 'Y') THEN baseamountpercent := 100; END IF; END IF; IF (NOT finish_process) THEN -- ReadOnly Check IF (vProcessed = 'N') THEN -- Is the tax is for WithHolding and the BP have the flag activate it add the tax amount IF (v_IsWithTax= 'Y') and (includetaxinps = 'Y') THEN baseamount := baseamountpercent * (taxamountnew-taxamountold)/100; whamountnew := whamountold + withpercent*baseamount/100 ; if (v_taxid<>taxinps_id) then whamountnew:=whamountold; end if; UPDATE c_invoice SET withholdingamount = whamountnew WHERE c_invoice_id = v_invoiceid; END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_invoicetax_trg2(); publictadfalse23416125536700Qc_invoicetodate(character varying, numeric, numeric, timestamp without time zone)FUNCTION CREATE FUNCTION c_invoicetodate(p_invoicefrecuency character varying, p_invoiceday numeric, p_invoicecutoff numeric, p_date timestamp without time zone) RETURNS timestamp without time zone AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Description: return the last TIMESTAMP that is allowed to invoice orders ************************************************************************/ v_invoiceToDate TIMESTAMP; v_auxDate TIMESTAMP; v_date TIMESTAMP; v_invoiceDay NUMERIC; v_invoiceCutOff NUMERIC; BEGIN v_invoiceDay:=p_invoiceDay; v_invoiceCutOff:=p_invoiceCutOff; v_date:=TRUNC(p_date) ; IF(p_invoiceFrecuency IN('T')) THEN IF(TO_NUMBER(TO_CHAR(v_date, 'DD')) < v_invoiceDay) THEN v_invoiceDay:=v_invoiceDay + 15; END IF; IF((v_invoiceDay < v_invoiceCutOff) OR((v_invoiceCutOff+15) <= v_invoiceDay)) THEN v_invoiceCutOff:=v_invoiceCutOff + 15; END IF; END IF; IF(p_invoiceFrecuency IN('M', 'T')) THEN -- If date before invoiceDay (and date is not last month day) go to last month IF((TO_NUMBER(TO_CHAR(v_date, 'DD')) < p_invoiceDay) AND(v_date < LAST_DAY(v_date))) THEN v_auxDate:=C_DATEDAYINMONTH(v_invoiceDay, TO_DATE(ADD_MONTHS(v_date, -1))) ; ELSE v_auxDate:=C_DATEDAYINMONTH(v_invoiceDay, TO_DATE(v_date)) ; END IF; IF((TO_NUMBER(TO_CHAR(v_auxDate, 'DD')) < v_invoiceCutOff) AND(v_auxDate < LAST_DAY(v_auxDate))) THEN v_invoiceToDate:=C_DATEDAYINMONTH(v_invoiceCutOff, TO_DATE(ADD_MONTHS(v_auxDate, -1))) ; ELSE v_invoiceToDate:=C_DATEDAYINMONTH(v_invoiceCutOff, TO_DATE(v_auxDate)) ; END IF; ELSIF(p_invoiceFrecuency IN('W')) THEN v_auxDate:=v_date; WHILE(TO_NUMBER(TO_CHAR(v_auxDate, 'D')) <> v_invoiceDay) LOOP v_auxDate:=v_auxDate - 1; END LOOP; v_invoiceToDate:=v_auxDate; WHILE(TO_NUMBER(TO_CHAR(v_invoiceToDate, 'D')) <> v_invoiceCutOff) LOOP v_invoiceToDate:=v_invoiceToDate - 1; END LOOP; ELSIF(p_invoiceFrecuency='D') THEN v_invoiceToDate:=v_date; ELSE RAISE NOTICE '%','InvoiceFrecuency not valid: ' || p_invoiceFrecuency ; END IF; RETURN v_invoiceToDate; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.c_invoicetodate(p_invoicefrecuency character varying, p_invoiceday numeric, p_invoicecutoff numeric, p_date timestamp without time zone); publictadfalse23416D125595466c_invtax_chk_restrictions_trg()FUNCTIONF CREATE FUNCTION c_invtax_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_C_INVOICE_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_INVOICE_ID:=new.C_INVOICE_ID; ELSE v_C_INVOICE_ID:=old.C_INVOICE_ID; END IF; SELECT PROCESSED INTO v_Processed FROM C_INVOICE WHERE C_INVOICE_ID=v_C_INVOICE_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND ((COALESCE(old.TAXBASEAMT, 0) <> COALESCE(new.TAXBASEAMT, 0)) OR(COALESCE(old.TAXAMT, 0) <> COALESCE(new.TAXAMT, 0)) OR(COALESCE(old.C_TAX_ID, '0') <> COALESCE(new.C_TAX_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted - ' || old.TAXBASEAMT || ' - ' ||new.TAXBASEAMT || ' - ' ||old.TAXAMT || ' - ' || new.TAXAMT || ' - ' || old.C_TAX_ID || ' - ' ||new.C_TAX_ID ; --OBTG:-20501-- END IF; END IF; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 6DROP FUNCTION public.c_invtax_chk_restrictions_trg(); publictadfalse23416125536702)c_location_description(character varying)FUNCTION$CREATE FUNCTION c_location_description(p_c_location_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return the description of the location * Description: * ************************************************************************/ v_description VARCHAR(4000) ; --OBTG:NVARCHAR2-- BEGIN SELECT COALESCE(TO_CHAR(L.ADDRESS1), '') ||( CASE WHEN(L.ADDRESS2) IS NULL THEN '' ELSE(CHR(10) ||TO_CHAR(L.ADDRESS2)) END ) || ( CASE WHEN(L.POSTAL||L.CITY||R.NAME) IS NULL THEN '' ELSE CHR(10) ||L.POSTAL ||( CASE WHEN(L.POSTAL) IS NULL THEN '' ELSE ' - '||TO_CHAR(L.CITY) END ) || ( CASE WHEN(R.NAME) IS NULL THEN '' ELSE ' ('||TO_CHAR(R.NAME) || ')' END ) END ) INTO v_description FROM C_LOCATION L LEFT JOIN C_REGION R ON L.C_REGION_ID=R.C_REGION_ID WHERE L.C_LOCATION_ID=p_C_Location_ID; RETURN v_description; END ; $$ LANGUAGE plpgsql; PDROP FUNCTION public.c_location_description(p_c_location_id character varying); publictadfalse23416j.00BFUNCTION c_location_description(p_c_location_id character varying)COMMENTCOMMENT ON FUNCTION c_location_description(p_c_location_id character varying) IS '--OBTG:C_LOCATION_DESCRIPTIONfunc=NVARCHAR--'; publictadfalse207125536703(c_location_identifier(character varying)FUNCTIONY CREATE FUNCTION c_location_identifier(p_c_location_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return the description of the location for search fields * Description: * ************************************************************************/ v_description VARCHAR(4000) ; --OBTG:NVARCHAR2-- v_DefaultCountry VARCHAR(4000) ; --OBTG:VARCHAR2-- BEGIN SELECT MAX(C_COUNTRY_ID) INTO v_DefaultCountry FROM C_COUNTRY WHERE ISACTIVE = 'Y' AND ISDEFAULT = 'Y'; SELECT COALESCE(TO_CHAR(L.ADDRESS1), '') || CASE WHEN(L.ADDRESS2) IS NULL THEN '' ELSE ', ' || TO_CHAR(L.ADDRESS2) END || CASE WHEN(L.POSTAL) IS NULL THEN '' ELSE ', '|| L.POSTAL END || CASE WHEN(L.CITY) IS NULL THEN '' ELSE ', '||TO_CHAR(L.CITY) END || CASE WHEN(R.NAME) IS NULL THEN '' ELSE ', '||TO_CHAR(R.NAME) END ||( CASE C.C_COUNTRY_ID WHEN v_DefaultCountry THEN '' ELSE ' (' || TO_CHAR(C.NAME) || ')' END ) INTO v_description FROM C_REGION R LEFT JOIN C_COUNTRY C ON R.C_COUNTRY_ID = C.C_COUNTRY_ID RIGHT JOIN C_LOCATION L ON L.C_REGION_ID = R.C_REGION_ID WHERE L.C_LOCATION_ID = p_C_Location_ID; RETURN v_description; END ; $$ LANGUAGE plpgsql; ODROP FUNCTION public.c_location_identifier(p_c_location_id character varying); publictadfalse23416k.00AFUNCTION c_location_identifier(p_c_location_id character varying)COMMENTCOMMENT ON FUNCTION c_location_identifier(p_c_location_id character varying) IS '--OBTG:C_LOCATION_IDENTIFIERfunc=NVARCHAR--'; publictadfalse208125536704"c_location_name(character varying)FUNCTIONqCREATE FUNCTION c_location_name(p_c_location_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Return the short name of the location * Description: * ************************************************************************/ v_name VARCHAR(242) ; --OBTG:NVARCHAR2-- BEGIN SELECT COALESCE(TO_CHAR(L.CITY), '') ||', '||COALESCE(TO_CHAR(L.ADDRESS1), '') INTO v_name FROM C_LOCATION L WHERE L.C_LOCATION_ID=p_C_Location_ID; IF(LENGTH(v_name) > 59) THEN v_name:=SUBSTR(v_name, 1, 56) ||'...'; END IF; RETURN v_name; END ; $$ LANGUAGE plpgsql; IDROP FUNCTION public.c_location_name(p_c_location_id character varying); publictadfalse23416l.00;FUNCTION c_location_name(p_c_location_id character varying)COMMENTsCOMMENT ON FUNCTION c_location_name(p_c_location_id character varying) IS '--OBTG:C_LOCATION_NAMEfunc=NVARCHAR--'; publictadfalse209E125595468c_location_trg()FUNCTIONCREATE FUNCTION c_location_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; cur_Bank RECORD; cur_BankAccount RECORD; v_IBANCount NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; FOR cur_Bank IN (SELECT C_BANK_ID FROM C_BANK WHERE C_LOCATION_ID=NEW.C_LOCATION_ID) LOOP FOR cur_BankAccount IN (SELECT C_BANKACCOUNT_ID FROM C_BANKACCOUNT WHERE C_BANK_ID=cur_Bank.C_BANK_ID) LOOP SELECT COUNT(IBAN) INTO v_IBANCount FROM C_BANKACCOUNT WHERE C_BANKACCOUNT_ID=cur_BankAccount.C_BANKACCOUNT_ID; IF (v_IBANCount > 0 AND OLD.C_COUNTRY_ID <> NEW.C_COUNTRY_ID) THEN RAISE EXCEPTION '%', 'An IBAN account is defined for this bank. Country must not be changed.' ; --OBTG:-20259-- END IF; END LOOP; END LOOP; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_location_trg(); publictadfalse23416125536706.c_order_actualize_pricelist(character varying)FUNCTION CREATE FUNCTION c_order_actualize_pricelist(pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistics v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- Success v_ResultStr_aux VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_DateFrom TIMESTAMP; v_DateTo TIMESTAMP; v_Warehouse_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_BPartner_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- v_pinstance VARCHAR(32) ; --OBTG:VARCHAR2-- v_priceList VARCHAR(32) ; --OBTG:VARCHAR2-- v_priceListVersion VARCHAR(32) ; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_PEDIDOS RECORD; Cur_PRICELISTVERSION RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || PInstance_ID ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr_aux:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=PInstance_ID ORDER BY p.SeqNo ) LOOP IF(Cur_Parameter.ParameterName='DateFrom') THEN v_DateFrom:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DateFrom=' || v_DateFrom ; ELSIF(Cur_Parameter.ParameterName='DateTo') THEN v_DateTo:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DateTo=' || v_DateTo ; ELSIF(Cur_Parameter.ParameterName='C_BPartner_ID') THEN v_BPartner_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BPartner_ID=' || v_BPartner_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter FOR Cur_PEDIDOS IN (SELECT Ad_Client_ID, C_Order_ID, C_BPartner_ID, DateOrdered FROM C_ORDER WHERE C_ORDER.IsSoTrx='Y' AND DateOrdered>=v_DateFrom AND DateOrdered0) THEN SELECT M_PriceList_ID INTO v_priceList FROM C_BPARTNER WHERE C_BPartner_ID=Cur_PEDIDOS.C_Bpartner_ID; FOR Cur_PRICELISTVERSION IN (SELECT M_PriceList_Version_ID FROM M_PRICELIST_VERSION WHERE M_PriceList_ID=v_priceList AND IsActive='Y' AND ValidFrom> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', v_Result, v_ResultStr) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; -- ROLLBACK; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; RDROP FUNCTION public.c_order_actualize_pricelist(pinstance_id character varying); publictadfalse23416M125595486c_order_chk_restrinctions_trg()FUNCTIONCREATE FUNCTION c_order_chk_restrinctions_trg() RETURNS trigger AS $$ DECLARE v_n NUMERIC; v_OrderLine_Offer_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Price NUMERIC; v_lineNo NUMERIC; v_PriceNew NUMERIC; v_amt NUMERIC; v_DateNull TIMESTAMP := TO_DATE('01-01-1900','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF(OLD.Processed='Y' AND OLD.Docaction <> 'CL' AND( (COALESCE(OLD.C_BPartner_ID, '0') <> COALESCE(NEW.C_BPartner_ID, '0')) OR(COALESCE(OLD.DOCUMENTNO, '.') <> COALESCE(NEW.DOCUMENTNO, '.')) OR(COALESCE(OLD.C_DOCTYPE_ID, '0') <> COALESCE(NEW.C_DOCTYPE_ID, '0')) OR(COALESCE(OLD.C_DOCTYPETARGET_ID, '0') <> COALESCE(NEW.C_DOCTYPETARGET_ID, '0')) OR(COALESCE(OLD.DATEORDERED, v_DateNull) <> COALESCE(NEW.DATEORDERED, v_DateNull)) OR(COALESCE(OLD.C_BPARTNER_LOCATION_ID, '0') <> COALESCE(NEW.C_BPARTNER_LOCATION_ID, '0')) OR(COALESCE(OLD.PAYMENTRULE, '.') <> COALESCE(NEW.PAYMENTRULE, '.')) OR(COALESCE(OLD.C_PAYMENTTERM_ID, '0') <> COALESCE(NEW.C_PAYMENTTERM_ID, '0')) OR(COALESCE(OLD.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0')) OR(COALESCE(OLD.CHARGEAMT, 0) <> COALESCE(NEW.CHARGEAMT, 0)) OR(COALESCE(OLD.TOTALLINES, 0) <> COALESCE(NEW.TOTALLINES, 0)) OR(COALESCE(OLD.GRANDTOTAL, 0) <> COALESCE(NEW.GRANDTOTAL, 0)) OR(COALESCE(OLD.DATEPROMISED, v_DateNull) <> COALESCE(NEW.DATEPROMISED, v_DateNull)) OR(COALESCE(OLD.BILLTO_ID, '0') <> COALESCE(NEW.BILLTO_ID, '0')) OR(COALESCE(OLD.DELIVERYRULE, '.') <> COALESCE(NEW.DELIVERYRULE, '.')) OR(COALESCE(OLD.M_PRICELIST_ID, '0') <> COALESCE(NEW.M_PRICELIST_ID, '0')) OR(COALESCE(OLD.AD_USER_ID, '0') <> COALESCE(NEW.AD_USER_ID, '0')) OR(COALESCE(OLD.AD_ORGTRX_ID, '0') <> COALESCE(NEW.AD_ORGTRX_ID, '0')) OR(COALESCE(OLD.USER1_ID, '0') <> COALESCE(NEW.USER1_ID, '0')) OR(COALESCE(OLD.M_WAREHOUSE_ID, '0') <> COALESCE(NEW.M_WAREHOUSE_ID, '0')) OR(COALESCE(OLD.DROPSHIP_USER_ID, '0') <> COALESCE(NEW.DROPSHIP_USER_ID, '0')) OR(COALESCE(OLD.USER2_ID, '0') <> COALESCE(NEW.USER2_ID, '0')) OR(COALESCE(OLD.DROPSHIP_BPARTNER_ID, '0') <> COALESCE(NEW.DROPSHIP_BPARTNER_ID, '0')) OR(COALESCE(OLD.DROPSHIP_LOCATION_ID, '0') <> COALESCE(NEW.DROPSHIP_LOCATION_ID, '0')) OR(COALESCE(OLD.DELIVERYVIARULE, '.') <> COALESCE(NEW.DELIVERYVIARULE, '.')) OR(COALESCE(OLD.PRIORITYRULE,'.') <> COALESCE(NEW.PRIORITYRULE, '.')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) ) )THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(OLD.Posted='Y' AND ((COALESCE(OLD.DATEACCT, v_DateNull) <> COALESCE(NEW.DATEACCT, v_DateNull)) OR(COALESCE(OLD.C_CAMPAIGN_ID, '0') <> COALESCE(NEW.C_CAMPAIGN_ID, '0')) OR(COALESCE(OLD.C_PROJECT_ID, '0') <> COALESCE(NEW.C_PROJECT_ID, '0')) OR(COALESCE(OLD.C_ACTIVITY_ID, '0') <> COALESCE(NEW.C_ACTIVITY_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF (COALESCE(OLD.C_BPartner_ID, '0')!=COALESCE(NEW.C_BPartner_ID, '0')) OR (COALESCE(OLD.M_PriceList_ID,'0') != COALESCE(NEW.M_PriceList_ID,'0')) THEN SELECT COUNT(*) INTO v_n FROM C_ORDERLINE WHERE C_Order_ID = NEW.C_Order_ID; IF v_n>0 THEN RAISE EXCEPTION '%', 'Cannot change bussiness partner or price list if there are lines' ; --OBTG:-20502-- END IF; END IF; END IF; IF(TG_OP = 'DELETE') THEN IF OLD.Processed='Y' THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF NEW.Processed='Y' THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 6DROP FUNCTION public.c_order_chk_restrinctions_trg(); publictadfalse23416125536709%c_order_fact_reset(character varying)FUNCTIONCREATE FUNCTION c_order_fact_reset(p_c_order_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_AD_Table_ID VARCHAR(32) ; --OBTG:VARCHAR2-- BEGIN SELECT AD_Table_ID INTO v_AD_Table_ID FROM AD_Table WHERE TABLENAME='C_Order'; IF v_AD_Table_ID IS NULL THEN RAISE EXCEPTION '%', '@TableNotFound@' ; --OBTG:-20000-- END IF; UPDATE C_Order SET Posted='N', Processing='N' WHERE C_Order_ID=p_C_Order_ID AND(Posted<>'N' OR Posted IS NULL OR Processing<>'N' OR Processing IS NULL) ; DELETE FROM Fact_Acct WHERE AD_Table_ID=v_AD_Table_ID AND RECORD_ID=p_C_Order_ID; -- Commented by cromero 19102006 -- COMMIT; RETURN; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '%', SQLERRM; -- ROLLBACK; RETURN; END ; $$ LANGUAGE plpgsql; IDROP FUNCTION public.c_order_fact_reset(p_c_order_id character varying); publictadfalse23416125536710$c_order_po_create(character varying)FUNCTIONSECREATE FUNCTION c_order_po_create(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Order_PO_Create.sql,v 1.4 2003/05/26 22:31:16 jjanke Exp $ *** * Title: Create PO from SO * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_DateOrdered_From TIMESTAMP; v_DateOrdered_To TIMESTAMP; v_C_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Vendor_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- -- v_Created NUMERIC:=0; FINISH_PROCESS BOOLEAN:=false; v_PInstance_Log_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.P_Date_To FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='DateOrdered') THEN v_DateOrdered_From:=Cur_Parameter.P_Date; v_DateOrdered_To:=Cur_Parameter.P_Date_To; RAISE NOTICE '%',' DateOrdered=' || v_DateOrdered_From || '-' || v_DateOrdered_To ; ELSIF(Cur_Parameter.ParameterName='C_BPartner_ID') THEN v_C_BPartner_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BPartner_ID=' || v_C_BPartner_ID ; ELSIF(Cur_Parameter.ParameterName='Vendor_ID') THEN v_Vendor_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' Vendor_ID=' || v_Vendor_ID ; ELSIF(Cur_Parameter.ParameterName='C_Order_ID') THEN v_C_Order_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_Order_ID=' || v_C_Order_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Check that we have some restrictions v_ResultStr:='CheckRestriction'; IF(v_DateOrdered_From IS NULL AND v_DateOrdered_To IS NULL AND v_C_BPartner_ID IS NULL AND v_Vendor_ID IS NULL AND v_C_Order_ID IS NULL) THEN RAISE EXCEPTION '%', '@NoParametersSelected@'; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN DECLARE Cur_SO RECORD; -- Cur_SOL RECORD; -- v_C_PaymentTerm_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_DocType_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_M_PriceList_Version_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Tax_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- -- v_BillTo_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_BPartner_Location_ID VARCHAR(32); --OBTG:VARCHAR2-- -- v_PO_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(30) ; --OBTG:NVARCHAR2-- v_NextID VARCHAR(32); --OBTG:varchar2-- v_Lines NUMERIC:=0; -- BEGIN v_ResultStr:='StartLoop'; FOR Cur_SO IN (SELECT so.AD_Client_ID, so.AD_Org_ID, so.UpdatedBy, so.Description, so.SalesRep_ID, so.DateOrdered, so.DatePromised, so.DateAcct, so.C_Order_ID, so.DocumentNo, so.PriorityRule, so.M_WareHouse_ID, so.C_Campaign_ID, so.C_Project_ID, so.C_Activity_ID, po.C_BPartner_ID, v.PO_PaymentTerm_ID, v.PaymentRulePO, v.POReference, pl.M_PriceList_ID, pl.C_Currency_ID FROM C_ORDER so INNER JOIN C_ORDERLINE sol ON(so.C_Order_ID=sol.C_Order_ID) INNER JOIN M_PRODUCT_PO po ON(sol.M_Product_ID=po.M_Product_ID) INNER JOIN C_BPARTNER v ON(po.C_BPartner_ID=v.C_BPartner_ID) INNER JOIN M_PRICELIST pl ON(v.PO_PriceList_ID=pl.M_PriceList_ID) WHERE po.IsCurrentVendor='Y' -- Optional Order No AND(v_C_Order_ID IS NULL OR so.C_Order_ID=v_C_Order_ID) -- Optional Sales BPartner AND(v_C_BPartner_ID IS NULL OR so.C_BPartner_ID=v_C_BPartner_ID) -- Optional Purchase BPartner AND(v_Vendor_ID IS NULL OR po.C_BPartner_ID=v_Vendor_ID) -- Optional Date Range AND(v_DateOrdered_From IS NULL OR so.DateOrdered BETWEEN v_DateOrdered_From AND v_DateOrdered_To) -- Don't create twice AND sol.Ref_OrderLine_ID IS NULL GROUP BY so.AD_Client_ID, so.AD_Org_ID, so.UpdatedBy, so.Description, so.SalesRep_ID, so.DateOrdered, so.DatePromised, so.DateAcct, so.C_Order_ID, so.DocumentNo, so.PriorityRule, so.M_WareHouse_ID, so.C_Campaign_ID, so.C_Project_ID, so.C_Activity_ID, po.C_BPartner_ID, v.PO_PaymentTerm_ID, v.PaymentRulePO, v.POReference, pl.M_PriceList_ID, pl.C_Currency_ID ORDER BY po.C_BPartner_ID ) LOOP -- All Payment Types are the same for the same Client IF(v_C_PaymentTerm_ID IS NULL) THEN v_ResultStr:='DefaultPaymentTerm'; SELECT MAX(C_PaymentTerm_ID) INTO v_C_PaymentTerm_ID FROM C_PAYMENTTERM WHERE IsDefault='Y' AND AD_Client_ID=Cur_SO.AD_Client_ID; IF(v_C_PaymentTerm_ID IS NULL) THEN RAISE EXCEPTION '%', '@DefaultPaymenttermNotdefined@'; --OBTG:-20000-- END IF; END IF; -- All Document Types are the same for the same Client IF(v_C_DocType_ID IS NULL) THEN v_ResultStr:='DocType'; v_C_DocType_ID:=Ad_Get_DocType(Cur_SO.AD_Client_ID, Cur_SO.AD_Org_ID, 'POO') ; IF(v_C_DocType_ID IS NULL) THEN RAISE EXCEPTION '%', '@PODocumenttypenotfound@'; --OBTG:-20000-- END IF; END IF; -- Tax Default for Client IF(v_C_Tax_ID IS NULL) THEN v_ResultStr:='DefaultTax'; SELECT MAX(C_Tax_ID) INTO v_C_Tax_ID FROM C_TAX WHERE IsDefault='Y' AND AD_Client_ID=Cur_SO.AD_Client_ID; IF(v_C_Tax_ID IS NULL) THEN RAISE EXCEPTION '%', '@TaxNotFound@'; --OBTG:-20000-- END IF; END IF; v_ResultStr:='BPLocation_B'; SELECT MAX(C_BPartner_Location_ID) INTO v_BillTo_ID FROM C_BPARTNER_LOCATION WHERE IsBillTo='Y' AND C_BPartner_ID=Cur_SO.C_BPartner_ID; v_ResultStr:='BPLocation_S'; SELECT MAX(C_BPartner_Location_ID) INTO v_C_BPartner_Location_ID FROM C_BPARTNER_LOCATION WHERE IsShipTo='Y' AND C_BPartner_ID=Cur_SO.C_BPartner_ID; -- What PO PriceListVersion to use (first record only) v_ResultStr:='PriceListVersion'; DECLARE Cur_PLV RECORD; BEGIN FOR Cur_PLV IN (SELECT plv.M_PriceList_Version_ID FROM C_ORDERLINE sol INNER JOIN M_PRODUCT_PO po ON(sol.M_Product_ID=po.M_Product_ID) INNER JOIN C_BPARTNER v ON(po.C_BPartner_ID=v.C_BPartner_ID) INNER JOIN M_PRICELIST_VERSION plv ON(v.PO_PriceList_ID=plv.M_PriceList_ID AND plv.ValidFrom> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; JDROP FUNCTION public.c_order_po_create(p_pinstance_id character varying); publictadfalse23416125536712c_order_post(character varying)FUNCTIONCREATE FUNCTION c_order_post(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /****************************************************************************** * The contents of this file are subject to the Compiere License Version 1.1 * ("License"); You may not use this file except in compliance with the License * You may obtain a copy of the License at http://www.compiere.org/license.html * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2006 Openbravo S.L. ******************************************************************************/ BEGIN PERFORM C_ORDER_POST1(p_PInstance_ID, NULL) ; END ; $$ LANGUAGE plpgsql; EDROP FUNCTION public.c_order_post(p_pinstance_id character varying); publictadfalse234161255564813c_order_post1(character varying, character varying)FUNCTION%CREATE FUNCTION c_order_post1(p_pinstance_id character varying, p_order_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistics v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_User VARCHAR(32); --OBTG:VARCHAR2-- v_IsProcessing CHAR(1) ; v_IsProcessed VARCHAR(60) ; v_Result NUMERIC:=1; -- Success v_is_included NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_Order RECORD; -- Record Info v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_Name VARCHAR(60); --OBTG:VARCHAR2-- v_UpdatedBy VARCHAR(32); --OBTG:VARCHAR2-- v_DocAction VARCHAR(60) ; v_DocStatus VARCHAR(60) ; v_InvoiceRule VARCHAR(60) ; v_M_Warehouse_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocTypeTarget_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocSubTypeSO VARCHAR(60) ; v_DocSubTypeSOTarget VARCHAR(60) ; v_IsBinding CHAR(1):='Y'; -- ToDeliver NUMERIC; ToInvoice NUMERIC; -- InOut_ID VARCHAR(32); --OBTG:VARCHAR2-- Invoice_ID VARCHAR(32); --OBTG:VARCHAR2-- --Added by P.SAROBE v_documentno_Settlement VARCHAR(40); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_Cancel_Processed VARCHAR(60); v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_Bankstatementline_ID VARCHAR(32); --OBTG:VARCHAR2-- --Finish added by P.Sarobe v_AuxCashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ispaid CHAR(1); v_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Cash_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Line NUMERIC:=0; v_CashBook_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Debtpayment_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ISO_Code VARCHAR(10) ; v_DocumentNo VARCHAR(200) ; --OBTG:VARCHAR2-- v_GrandTotal NUMERIC; v_Multiplier NUMERIC:=1; v_Date TIMESTAMP; v_WarehouseName VARCHAR(60) ; --OBTG:VARCHAR2-- v_CashProcessed NUMERIC; v_count NUMERIC; v_isSoTrx CHAR(1) ; v_Aux NUMERIC; v_c_Bpartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_c_currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_C_PROJECT_ID VARCHAR(32); --OBTG:VARCHAR2-- v_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- FINISH_PROCESS BOOLEAN:=FALSE; END_PROCESSING BOOLEAN:=FALSE; v_CBPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- rowcount NUMERIC; v_CumDiscount NUMERIC; v_OldCumDiscount NUMERIC; v_OrderLineSeqNo NUMERIC; Cur_COrderDiscount RECORD; Cur_TaxDiscount RECORD; v_OrderLine VARCHAR(32); --OBTG:VARCHAR2-- v_Discount NUMERIC; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter ELSE v_Record_ID:=p_Order_ID; SELECT CREATEDBY INTO v_User FROM C_ORDER WHERE C_ORDER_ID=p_Order_ID; END IF; RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; BEGIN --BODY /** * Read Order */ v_ResultStr:='ReadingOrder'; SELECT Processing, Processed, DocAction, DocStatus, C_DocType_ID, C_DocTypeTarget_ID, AD_Client_ID, AD_Org_ID, UpdatedBy, M_Warehouse_ID, TRUNC(DateOrdered), Issotrx, c_Bpartner_Id, c_currency_id, C_PROJECT_ID, C_BPartner_ID, M_PriceList_ID, invoicerule INTO v_IsProcessing, v_IsProcessed, v_DocAction, v_DocStatus, v_DocType_ID, v_DocTypeTarget_ID, v_Client_ID, v_Org_ID, v_UpdatedBy, v_M_Warehouse_ID, v_Date, v_isSoTrx, v_c_Bpartner_Id, v_c_currency_id, v_C_PROJECT_ID, v_CBPartner_ID, v_PriceList_ID, v_invoicerule FROM C_ORDER WHERE C_Order_ID=v_Record_ID FOR UPDATE; -- Get current DocSubTypeSO SELECT DocSubTypeSO INTO v_DocSubTypeSO FROM C_DOCTYPE WHERE C_DocType_ID=v_DocType_ID; -- Get the name of the org of the Order. Added by P.Sarobe SELECT name INTO v_Org_Name FROM AD_ORG WHERE ad_org_id = v_Org_ID; RAISE NOTICE '%','DocAction=' || v_DocAction || ', DocStatus=' || v_DocStatus || ', DocType_ID=' || v_DocType_ID || ', DocTypeTarget_ID=' || v_DocTypeTarget_ID || ', DocSubTypeSO=' || v_DocSubTypeSO ; /** * Check if order has lines */ IF (v_DocAction = 'CO') THEN SELECT COUNT(*) INTO v_Aux FROM C_ORDERLINE WHERE C_ORDER_ID = v_Record_ID; IF v_Aux=0 THEN RAISE EXCEPTION '%', '@OrderWithoutLines@'; --OBTG:-20000-- END IF; END IF; /** * Order Closed, Voided or Reversed - No action possible */ IF(v_DocStatus IN('CL', 'VO', 'RE')) THEN RAISE EXCEPTION '%', '@AlreadyPosted@' ; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN /** * Waiting on Prepayment can only be closed */ IF(v_DocStatus='WP' AND v_DocAction<>'CL') THEN RAISE EXCEPTION '%', '@WaitingPayment@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS SELECT DocSubTypeSO INTO v_DocSubTypeSOTarget FROM C_DOCTYPE WHERE C_DocType_ID=v_DocTypetarget_ID; IF (v_DocSubTypeSOTarget='PR' AND v_invoicerule <> 'I') THEN RAISE EXCEPTION '%', '@PrepayMustImmediate@'; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN /** * Unlock */ IF(v_DocAction='XL') THEN UPDATE C_ORDER SET Processing='N', DocAction='--', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; FINISH_PROCESS:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN IF(v_IsProcessing='Y') THEN RAISE EXCEPTION '%', '@OtherProcessActive@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Re-activate */ IF(v_DocAction='RE') THEN IF (v_DocSubTypeSO IN ('WR', 'WI')) THEN RAISE EXCEPTION '%', '@ActionNotSupported@'; --OBTG:-20000-- END IF; --Verify not managed debtPayments added by ALO --Added by P.Sarobe. New messages SELECT max(c_debt_payment_id), COUNT(*) INTO v_Debtpayment_ID, v_Aux FROM C_DEBT_PAYMENT WHERE C_Order_ID=v_Record_ID AND C_Debt_Payment_Status(C_Settlement_Cancel_ID, Cancel_Processed, Generate_Processed, IsPaid, IsValid, C_CashLine_ID, C_BankStatementLine_ID)!='P'; IF v_Aux!=0 THEN --Added by P.Sarobe. New messages SELECT c_Bankstatementline_Id, c_cashline_id, c_settlement_cancel_id, ispaid, cancel_processed INTO v_Bankstatementline_ID, v_CashLine_ID, v_Settlement_Cancel_ID, v_ispaid, v_Cancel_Processed FROM C_DEBT_PAYMENT WHERE C_Debt_Payment_ID = v_Debtpayment_ID; IF v_Bankstatementline_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_BANKSTATEMENTLINE_ID = v_Bankstatementline_ID; RAISE EXCEPTION '%', '@ManagedDebtPaymentOrderBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_CashLine_ID IS NOT NULL THEN SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@ManagedDebtPaymentOrderCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; IF v_Cancel_Processed='Y' AND v_ispaid='N' THEN SELECT documentno, datetrx INTO v_documentno_Settlement, v_dateSettlement FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = v_Settlement_Cancel_ID; RAISE EXCEPTION '%', '@ManagedDebtPaymentOrderCancel@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF; IF(NOT FINISH_PROCESS) THEN RAISE NOTICE '%','Re-Activating ' || v_DocSubTypeSO || ': ' || v_Record_ID ; IF(v_DocSubTypeSO IN('WI', 'WP', 'WR')) THEN -- Cancel existing Deli very + Invoice Documents PERFORM M_INOUT_CANCEL(NULL, v_Record_ID) ; IF(v_DocSubTypeSO<>'WP') THEN PERFORM C_INVOICE_CANCEL(NULL, v_Record_ID); END IF; END IF; -- Update Order v_ResultStr:='ReActivate'; UPDATE C_ORDER SET DocStatus='IP', -- In Progress DocAction='CO', Processing='N', Processed='N', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; DELETE FROM C_ORDERLINE WHERE C_ORDER_DISCOUNT_ID IS NOT NULL AND C_ORDER_ID=v_Record_ID; --ADDED BY E.ARGAL --Invalidate debt payments added by ALO UPDATE C_DEBT_PAYMENT SET IsValid='N' WHERE C_Order_ID=v_Record_ID AND IsAutomaticGenerated='N'; DELETE FROM C_CASHLINE WHERE C_Debt_Payment_Id IN (SELECT C_DEBT_PAYMENT_ID FROM C_DEBT_PAYMENT WHERE C_Order_ID=v_Record_ID AND COALESCE(IsAutomaticGenerated, 'Y')='Y' ) ; DELETE FROM C_DEBT_PAYMENT WHERE C_Order_ID=v_Record_ID AND COALESCE(IsAutomaticGenerated, 'Y')='Y'; DECLARE Cur_ResLine RECORD; v_QtySO NUMERIC; -- Reserved v_QtyOrderSO NUMERIC; v_QtyPO NUMERIC; -- Ordered v_QtyOrderPO NUMERIC; BEGIN v_ResultStr:='ReserveInventory'; -- For all lines needing reservation FOR Cur_ResLine IN (SELECT l.M_Warehouse_ID, l.M_Product_ID, l.M_AttributeSetInstance_ID, l.C_OrderLine_ID, -- Target Level = 0 if DirectShip='Y' or Binding='N' l.QtyOrdered AS Qty, l.QUANTITYORDER, l.qtyreserved, l.qtydelivered, l.C_UOM_ID, l.M_PRODUCT_UOM_ID FROM C_ORDERLINE l, M_PRODUCT p WHERE l.C_Order_ID=v_Record_ID -- Reserve Products (not: services, null products) AND l.M_Product_ID=p.M_Product_ID AND p.IsStocked='Y' AND p.ProductType='I' FOR UPDATE ) LOOP -- Qty corrected for SO/PO IF(v_DocSubTypeSO IS NULL) THEN v_QtySO:=0; v_QtyOrderSO:=NULL; v_QtyPO:=Cur_ResLine.qtydelivered-Cur_ResLine.qty; v_QtyOrderPO:=NULL; IF (Cur_ResLine.QtyDelivered=0) THEN v_QtyOrderPO := -Cur_ResLine.QuantityOrder; ELSIF Cur_ResLine.M_Product_UOM_ID IS NOT NULL THEN v_QtyOrderPO := -C_Uom_Convert(v_QtyPO, Cur_ResLine.C_UOM_ID, Cur_ResLine.M_Product_UOM_ID, 'Y'); END IF; ELSE v_QtySO:=-Cur_ResLine.QtyReserved; IF (Cur_ResLine.QtyReserved=Cur_ResLine.Qty) THEN v_QtyOrderSO := -Cur_ResLine.QuantityOrder; ELSIF Cur_ResLine.M_Product_UOM_ID IS NOT NULL THEN v_QtyOrderSO := -C_Uom_Convert(v_QtySO, Cur_ResLine.C_UOM_ID, Cur_ResLine.M_Product_UOM_ID, 'Y'); END IF; v_QtyPO:=0; v_QtyOrderPO:=NULL; END IF; PERFORM M_UPDATE_STORAGE_PENDING(v_Client_ID, v_Org_ID, v_UpdatedBy, Cur_ResLine.M_Product_ID, Cur_ResLine.M_Warehouse_ID, Cur_ResLine.M_AttributeSetInstance_ID, Cur_ResLine.C_UOM_ID, Cur_ResLine.M_PRODUCT_UOM_ID, v_QtySO, v_QtyOrderSO, v_QtyPO, v_QtyOrderPO) ; END LOOP; -- Set reserved quantity to 0 UPDATE C_ORDERLINE SET QtyReserved = 0 WHERE c_orderline_id IN (select c_orderline_id from c_orderline where c_order_id = v_Record_id); END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN --ADDED BY P.SAROBE but to be deprecated 26052007 SELECT MAX(C_CASHLINE_ID) INTO v_CashLine_ID FROM C_CASHLINE WHERE C_ORDER_ID=v_Record_ID; IF(v_CashLine_ID IS NOT NULL) THEN SELECT PROCESSED INTO v_IsProcessed FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID=C_CASHLINE.C_CASH_ID AND C_CASHLINE_ID=v_CashLine_ID; IF(v_IsProcessed='N') THEN DELETE FROM C_CASHLINE WHERE C_CASHLINE_ID=v_CashLine_ID; ELSE SELECT C_CASH.NAME, C_CASH.STATEMENTDATE, C_CASHLINE.LINE INTO v_nameCash, v_dateCash, v_Line FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@Ordercahslineprocessed@'||v_nameCash||' '||'@Bydate@'||v_dateCash||' '||'@line@'||v_Line ; --OBTG:-20000-- /* ALO SELECT CB.C_CASHBOOK_ID, C_CURRENCY.ISO_CODE INTO v_CashBook_ID, v_ISO_Code FROM C_CASH C, C_CASHLINE CL, C_CASHBOOK CB, C_CURRENCY WHERE C.C_CASH_ID = CL.C_CASH_ID AND C.C_CASHBOOK_ID = CB.C_CASHBOOK_ID AND CB.C_CURRENCY_ID = C_CURRENCY.C_CURRENCY_ID AND CL.C_CASHLINE_ID = v_CashLine_ID; SELECT MAX(C.C_CASH_ID) INTO v_Cash_ID FROM C_CASH C WHERE C.C_CASHBOOK_ID=v_CashBook_ID AND C.DATEACCT = v_Date AND C.PROCESSED = 'N'; IF (v_Cash_Id IS NULL) THEN v_ResultStr := 'Create C_Cash'; SELECT * INTO v_Cash_ID FROM Ad_Sequence_Next('C_Cash', v_Org_ID); INSERT INTO C_CASH (C_Cash_ID,AD_Client_ID, AD_Org_ID, IsActive, Created,CreatedBy, Updated,UpdatedBy, C_CashBook_ID, Name, StatementDate,DateAcct, BeginningBalance,EndingBalance,StatementDifference, Processing,Processed,Posted) VALUES (v_Cash_ID, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()),UpdatedBy, TO_DATE(NOW()),UpdatedBy, v_CashBook_ID, TO_CHAR(v_Date, 'YYYY-MM-DD') || ' ' || v_ISO_Code, v_Date, v_Date, 0,0,0, 'N','N','N'); END IF; v_ResultStr := 'Create negative C_CashLine'; v_AuxCashLine_ID := v_CashLine_ID; SELECT * INTO v_CashLine_ID FROM Ad_Sequence_Next('C_CashLine', v_Org_ID); SELECT COALESCE(MAX(LINE),0) + 10 INTO v_Line FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASH.C_CASH_ID = v_Cash_ID; INSERT INTO C_CASHLINE (C_CashLine_ID,AD_Client_ID,AD_Org_ID, IsActive,Created,CreatedBy,Updated,UpdatedBy, C_Cash_ID, C_Order_ID, Line, Description,Amount,CashType, DiscountAmt, WriteOffAmt, IsGenerated) SELECT v_CashLine_ID, AD_Client_ID, AD_Org_ID, IsActive,Created,CreatedBy,Updated,UpdatedBy, v_Cash_ID, C_Order_ID, v_Line, Description,-Amount,CashType, DiscountAmt, WriteOffAmt, IsGenerated FROM C_CASHLINE WHERE C_CASHLINE_ID= v_AuxCashLine_ID; */ END IF; END IF;--FINISH_PROCESS END IF; UPDATE C_ORDER SET DocStatus='DR', -- Draft DocAction='CO', Processing='N', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; FINISH_PROCESS:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*) INTO v_Count FROM C_ORDER C, C_DOCTYPE WHERE C_DocType.DocBaseType IN ('SOO', 'POO') AND C_DocType.IsSOTrx=C.ISSOTRX AND AD_ISORGINCLUDED(C.AD_Org_ID,C_DocType.AD_Org_ID, C.AD_Client_ID) <> -1 AND C.C_DOCTYPETARGET_ID = C_DOCTYPE.C_DOCTYPE_ID AND C.C_ORDER_ID = v_Record_ID; IF v_Count=0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgDoctypeOrder@' ; --OBTG:-20000-- END IF; -- Set org lines like the headear UPDATE C_ORDERLINE SET AD_ORG_ID = (SELECT AD_ORG_ID FROM C_ORDER WHERE C_ORDER_ID = v_Record_ID) WHERE C_ORDER_ID = v_Record_ID; /** * Close Order - prepare */ IF(v_DocAction='CL') THEN -- Cancel undelivered Items IF(v_isSoTrx='Y') THEN --Sales orders UPDATE C_ORDERLINE SET QtyOrdered=QtyDelivered, --MODIFIED BY P.SAROBE linenetamt=QtyDelivered*priceactual, --MODIFIED BY F.IRIAZABAL QuantityOrder=QuantityOrder, Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID AND QtyOrdered<>QtyDelivered; -- For Purchase orders, M_MatchPO table used. Notice that only delivered lines(C_Invoiceline_Id is null) using ELSE UPDATE C_ORDERLINE SET QTYORDERED=COALESCE ( (SELECT SUM(M_MATCHPO.QTY) FROM M_MATCHPO WHERE M_MATCHPO.C_ORDERLINE_ID=C_ORDERLINE.C_ORDERLINE_ID AND M_MATCHPO.C_INVOICELINE_ID IS NULL ) , 0 ) , QuantityOrder=C_ORDERLINE.QuantityOrder, Updated=TO_DATE(NOW()), linenetamt=COALESCE ( (SELECT SUM(M_MATCHPO.QTY) FROM M_MATCHPO WHERE M_MATCHPO.C_ORDERLINE_ID=C_ORDERLINE.C_ORDERLINE_ID AND M_MATCHPO.C_INVOICELINE_ID IS NULL ) , 0 ) *priceactual WHERE C_ORDERLINE.C_ORDER_ID=v_Record_ID; END IF; -- if there is no change, the tax calculation, etc. is not needed. -- potential problem, if posted (i.e. encumbered) for full amount -- and the rest then cancelled out. END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /** * Void Order - prepare */ IF(v_DocAction='VO') THEN -- Cancel all Items UPDATE C_ORDERLINE SET QtyOrdered=0, --MODIFIED BY F.IRIAZABAL QuantityOrder= CASE WHEN M_PRODUCT_UOM_ID IS NULL THEN NULL ELSE 0 END , LineNetAmt=0, Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID AND QtyOrdered<>0; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /************************************************************************** * Start Processing ------------------------------------------------------ *************************************************************************/ /************************************************************************** * Start Processing ------------------------------------------------------ *************************************************************************/ -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_ORDER, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_ORDER.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_ORDER.C_ORDER_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_ORDER', 'C_ORDERLINE', v_Record_ID, 'C_ORDER_ID', 'C_ORDER_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; IF(p_PInstance_ID IS NOT NULL) THEN v_ResultStr:='LockingOrder'; UPDATE C_ORDER SET Processing='Y' WHERE C_Order_ID=v_Record_ID; -- COMMIT; END IF; -- Now, needs to go to END_PROCESSING to unlock /** * Allowed Actions: AProve, COmplete, PRocess, CLose, VOid */ IF(v_DocAction IN('AP', 'CO', 'PR', 'CL', 'VO')) THEN NULL; ELSE RAISE EXCEPTION '%', '@ActionNotAllowedHere@' ; --OBTG:-20000-- END IF; END IF;--END_PROCESSING IF(NOT END_PROCESSING AND NOT FINISH_PROCESS) THEN SELECT COUNT(*) INTO v_count FROM AD_CLIENTINFO WHERE AD_CLIENT_ID=v_Client_ID AND CHECKORDERORG='Y'; IF v_count>0 THEN v_ResultStr:='CheckingRestrictions - C_ORDER ORG IS IN C_BPARTNER ORG TREE'; SELECT COUNT(*) INTO v_count FROM C_ORDER c, C_BPARTNER bp WHERE c.C_Order_ID=v_Record_ID AND c.C_BPARTNER_ID=bp.C_BPARTNER_ID AND Ad_Isorgincluded(c.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1; IF v_count>0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgBpartnerOrder@' ; --OBTG:-20000-- END IF; END IF; END IF;--END_PROCESSING IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Calculate Discounts *************************************************************************/ -- Delete first previous discounts if any and then recalculate them DELETE FROM C_ORDERLINE WHERE C_ORDER_DISCOUNT_ID IS NOT NULL AND C_ORDER_ID=v_Record_ID; v_CumDiscount:=0; v_OldCumDiscount:=0; v_Line:=10; SELECT MAX(LINE) +10 INTO v_OrderLineSeqNo FROM C_ORDERLINE WHERE C_ORDER_ID=v_Record_ID; FOR Cur_COrderDiscount IN (SELECT C_ORDER_DISCOUNT.C_ORDER_DISCOUNT_ID, C_DISCOUNT.DISCOUNT, C_DISCOUNT.M_PRODUCT_ID, C_DISCOUNT.NAME, C_ORDER_DISCOUNT.CASCADE, C_DISCOUNT.C_DISCOUNT_ID, M_PRODUCT.C_UOM_ID FROM C_ORDER_DISCOUNT, C_DISCOUNT, M_PRODUCT WHERE C_ORDER_DISCOUNT.C_DISCOUNT_ID=C_DISCOUNT.C_DISCOUNT_ID AND C_DISCOUNT.M_PRODUCT_ID=M_PRODUCT.M_PRODUCT_ID AND C_ORDER_DISCOUNT.C_ORDER_ID=v_Record_ID AND C_ORDER_DISCOUNT.ISACTIVE='Y' ORDER BY C_ORDER_DISCOUNT.LINE ) LOOP v_CumDiscount:=(1-v_OldCumDiscount) * Cur_COrderDiscount.Discount/100; v_OldCumDiscount:=v_OldCumDiscount + v_CumDiscount; FOR Cur_TaxDiscount IN (SELECT C_ORDERLINE.C_TAX_ID, SUM(C_ORDERLINE.LINENETAMT) AS LINENETAMT FROM C_ORDERLINE WHERE C_ORDER_ID=v_Record_ID AND C_ORDERLINE.LINENETAMT<>0 AND C_ORDER_DISCOUNT_ID IS NULL GROUP BY C_TAX_ID ) LOOP IF(Cur_COrderDiscount.CASCADE='Y') THEN v_Discount:=(-1) * Cur_TaxDiscount.LINENETAMT * v_CumDiscount; ELSE v_Discount:=(-1) * Cur_TaxDiscount.LINENETAMT * Cur_COrderDiscount.Discount/100; END IF; v_OrderLineSeqNo:=10 + v_OrderLineSeqNo; v_OrderLine:=get_uuid() ; INSERT INTO c_orderline ( c_orderline_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, c_order_id, line, c_bpartner_id, c_bpartner_location_id, dateordered, datepromised, datedelivered, dateinvoiced, description, m_product_id, m_warehouse_id, directship, c_uom_id, qtyordered, qtyreserved, qtydelivered, qtyinvoiced, m_shipper_id, c_currency_id, pricelist, priceactual, pricelimit, linenetamt, discount, freightamt, c_charge_id, chargeamt, c_tax_id, s_resourceassignment_id, ref_orderline_id, m_attributesetinstance_id, isdescription, quantityorder, m_product_uom_id, m_offer_id, pricestd, C_ORDER_DISCOUNT_ID ) VALUES ( v_OrderLine, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_Record_ID, v_OrderLineSeqNo, NULL, NULL, TO_DATE(NOW()), TO_DATE(NOW()), TO_DATE(NOW()), TO_DATE(NOW()), Cur_COrderDiscount.NAME, Cur_COrderDiscount.M_PRODUCT_ID, v_M_Warehouse_ID, 'N', Cur_COrderDiscount.C_UOM_ID, 1, 0, 0, 0, NULL, v_c_currency_id, v_Discount, v_Discount, v_Discount, v_Discount, 0, 0, NULL, NULL, Cur_TaxDiscount.C_TAX_ID, NULL, NULL, NULL, 'N', NULL, NULL, NULL, v_Discount, NULL ); UPDATE C_ORDERLINE SET C_ORDER_DISCOUNT_ID=Cur_COrderDiscount.C_ORDER_DISCOUNT_ID WHERE C_ORDERLINE_ID=v_OrderLine; END LOOP; v_Line:=v_Line + 10; END LOOP; END IF; IF(NOT END_PROCESSING AND NOT FINISH_PROCESS) THEN /** * Convert to Target DocType */ DECLARE v_DocSubTypeSO_Target VARCHAR(60) ; BEGIN v_ResultStr:='ConvertingDocType'; IF(v_DocType_ID<>v_DocTypeTarget_ID) THEN -- New IF(v_DocStatus='DR' OR v_DocType_ID='0') THEN -- Update to Target Document Type WHILE(v_DocType_ID<>v_DocTypeTarget_ID) LOOP BEGIN v_ResultStr:='UpdateDocType'; UPDATE C_ORDER SET C_DocType_ID=v_DocTypeTarget_ID WHERE C_Order_ID=v_Record_ID; v_DocType_ID:=v_DocTypeTarget_ID; EXCEPTION WHEN OTHERS THEN v_ResultStr:='UpdateDocumentNo'; UPDATE C_ORDER SET DocumentNo=DocumentNo || '.' WHERE C_Order_ID=v_Record_ID; END; END LOOP; ELSE v_ResultStr:='GetTargetDocType'; SELECT DocSubTypeSO INTO v_DocSubTypeSO_Target FROM C_DOCTYPE WHERE C_DocType_ID=v_DocTypeTarget_ID; RAISE NOTICE '%','Changing DocType from ' || v_DocSubTypeSO || ' to ' || v_DocSubTypeSO_Target ; -- Change Offer to anything, Change InProcess to anything IF(v_DocSubTypeSO IN('ON', 'OB') OR v_DocStatus='IP') THEN -- Update to Target Document Type WHILE(v_DocType_ID<>v_DocTypeTarget_ID) LOOP BEGIN v_ResultStr:='UpdateDocType'; UPDATE C_ORDER SET C_DocType_ID=v_DocTypeTarget_ID WHERE C_Order_ID=v_Record_ID; v_DocType_ID:=v_DocTypeTarget_ID; EXCEPTION WHEN OTHERS THEN v_ResultStr:='UpdateDocumentNo'; UPDATE C_ORDER SET DocumentNo=DocumentNo || '.' WHERE C_Order_ID=v_Record_ID; END; END LOOP; ELSE -- Change Back UPDATE C_ORDER SET C_DocTypeTarget_ID=v_DocType_ID WHERE C_Order_ID=v_Record_ID; RAISE EXCEPTION '%', '@CannotChangeDocType@' ; --OBTG:-20000-- END IF; END IF; END IF; -- C_DocType_ID <> C_DocTypeTarget_ID END; -- Conversion END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /** * Get DocSubTypeSO + Is it Binding :1:2 */ v_ResultStr:='TestBinding DocType_ID=' || v_DocType_ID; SELECT CASE DocSubTypeSO WHEN 'ON' THEN 'N' ELSE 'Y' END , DocSubTypeSO INTO v_IsBinding, v_DocSubTypeSO FROM C_DOCTYPE WHERE C_DocType_ID=v_DocType_ID; RAISE NOTICE '%','DocSubTypeSO=' || v_DocSubTypeSO || ' IsBinding=' || v_IsBinding ; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Resolve not-stocked BOMs *************************************************************************/ DECLARE -- Order Lines with non-stocked BOMs CUR_BOM_Line RECORD; -- BOM Product List CUR_BOM RECORD; -- CountNo NUMERIC; v_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- NextNo VARCHAR(32); --OBTG:varchar2-- v_Line NUMERIC; v_FreightAmt NUMERIC; v_ChargeAmt NUMERIC; v_Parner_ID VARCHAR(32); --OBTG:VARCHAR2-- --v_PriceList_ID VARCHAR2(32); -- BEGIN LOOP -- How many BOMs do we have:3 SELECT COUNT(*) INTO CountNo FROM C_ORDERLINE l WHERE l.C_Order_ID=v_Record_ID AND EXISTS (SELECT * FROM M_PRODUCT p WHERE l.M_Product_ID=p.M_Product_ID AND p.IsBOM='Y' AND p.IsStocked='N' ) ; -- Nothing to do:4 EXIT WHEN CountNo=0; RAISE NOTICE '%',' BOMs to resolve=' || CountNo ; DECLARE Cur_MPriceListVersion RECORD; BEGIN -- last shipment FOR Cur_MPriceListVersion IN (SELECT COALESCE(v.M_PriceList_Version_ID, '0') AS PriceList_Version_ID, o.M_PriceList_ID FROM M_PRICELIST_VERSION v, C_ORDER o WHERE v.M_PriceList_ID=o.M_PriceList_ID AND v.ValidFrom<=o.DateOrdered AND v.IsActive='Y' AND o.C_Order_ID=v_Record_ID ORDER BY v.ValidFrom DESC ) LOOP v_PriceList_Version_ID:=Cur_MPriceListVersion.PriceList_Version_ID; -- v_PriceList_ID := Cur_MPriceListVersion.M_PriceList_Id; EXIT; END LOOP; END; -- Get Price List Version -- Replace Lines FOR CUR_BOM_Line IN (SELECT * FROM C_ORDERLINE l WHERE l.C_Order_ID=v_Record_ID AND IsActive='Y' AND EXISTS (SELECT * FROM M_PRODUCT p WHERE l.M_Product_ID=p.M_Product_ID AND p.IsBOM='Y' AND p.IsStocked='N' ) ORDER BY l.Line FOR UPDATE ) LOOP v_Line:=CUR_BOM_Line.Line; -- One Time variables v_FreightAmt:=CUR_BOM_Line.FreightAmt; v_ChargeAmt:=CUR_BOM_Line.ChargeAmt; -- Create New Lines FOR CUR_BOM IN (SELECT b.M_ProductBOM_ID, p.C_UOM_ID, b.BOMQty, b.Description FROM M_PRODUCT_BOM b INNER JOIN M_PRODUCT p ON(b.M_ProductBOM_ID=p.M_Product_ID) WHERE b.M_Product_ID=CUR_BOM_Line.M_Product_ID ORDER BY Line ) LOOP SELECT * INTO NextNo FROM Ad_Sequence_Next('C_OrderLine', CUR_BOM_Line.AD_Client_ID) ; v_Line:=v_Line + 1; INSERT INTO C_ORDERLINE ( C_OrderLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Order_ID, Line, C_BPartner_ID, C_BPartner_Location_ID, DateOrdered, DatePromised, DateDelivered, DateInvoiced, Description, M_Product_ID, M_Warehouse_ID, DirectShip, C_UOM_ID, QtyOrdered, QtyReserved, QtyDelivered, QtyInvoiced, M_Shipper_ID, C_Currency_ID, PriceList, PriceActual, PriceLimit, LineNetAmt, Discount, FreightAmt, C_Charge_ID, ChargeAmt, C_Tax_ID, QuantityOrder, M_Product_Uom_ID, PriceStd ) VALUES ( NextNo, CUR_BOM_Line.AD_Client_ID, CUR_BOM_Line.AD_Org_ID, CUR_BOM_Line.IsActive, TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', CUR_BOM_Line.C_Order_ID, v_Line, CUR_BOM_Line.C_BPartner_ID, CUR_BOM_Line.C_BPartner_Location_ID, CUR_BOM_Line.DateOrdered, CUR_BOM_Line.DatePromised, CUR_BOM_Line.DateDelivered, CUR_BOM_Line.DateInvoiced, CUR_BOM.Description, CUR_BOM.M_ProductBOM_ID, CUR_BOM_Line.M_Warehouse_ID, CUR_BOM_Line.DirectShip, CUR_BOM.C_UOM_ID, CUR_BOM_Line.QtyOrdered*CUR_BOM.BOMQty, CUR_BOM_Line.QtyReserved*CUR_BOM.BOMQty, CUR_BOM_Line.QtyDelivered*CUR_BOM.BOMQty, CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, CUR_BOM_Line.M_Shipper_ID, CUR_BOM_Line.C_Currency_ID, M_BOM_PriceList(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID), M_Get_Offers_Price(CUR_BOM_Line.DateOrdered, v_CBPartner_ID, CUR_BOM.M_ProductBOM_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID), CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, v_PriceList_ID), M_BOM_PriceLimit(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID), M_Get_Offers_Price(CUR_BOM_Line.DateOrdered, v_CBPartner_ID, CUR_BOM.M_ProductBOM_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID), CUR_BOM_Line.QtyInvoiced*CUR_BOM.BOMQty, v_PriceList_ID) * CUR_BOM_Line.QtyOrdered*CUR_BOM.BOMQty, CUR_BOM_Line.Discount, v_FreightAmt, CUR_BOM_Line.C_Charge_ID, v_ChargeAmt, CUR_BOM_Line.C_Tax_ID, CUR_BOM_Line.QuantityOrder, CUR_BOM_Line.M_Product_UOM_ID, M_BOM_PriceStd(CUR_BOM.M_ProductBOM_ID, v_PriceList_Version_ID) ) ; -- no Lot/SerNo for BOMs -- One Time variables v_FreightAmt:=0; v_ChargeAmt:=0; END LOOP; -- Create New Lines -- Convert into Comment Line UPDATE C_ORDERLINE SET M_Product_ID=NULL, PriceList=0, PriceActual=0, PriceLimit=0, LineNetAmt=0, FreightAmt=0, ChargeAmt=0, Description= (SELECT p.NAME || ' ' || C_ORDERLINE.Description FROM M_PRODUCT p WHERE p.M_Product_ID=CUR_BOM_Line.M_Product_ID ) , PriceStd=0, M_Offer_ID=NULL WHERE C_OrderLine_ID=CUR_BOM_Line.C_OrderLine_ID; END LOOP; -- Replace Lines END LOOP; -- BOM Loop END; END IF;--FINISH_PROCESS IF(NOT END_PROCESSING AND NOT FINISH_PROCESS) THEN /************************************************************************** * Always check and (un) Reserve Inventory (counterpart: M_InOut_Post) *************************************************************************/ DECLARE Cur_ResLine RECORD; v_QtySO NUMERIC; -- Reserved v_QtyOrderSO NUMERIC; v_QtyPO NUMERIC; -- Ordered v_QtyOrderPO NUMERIC; BEGIN v_ResultStr := 'ReserveInventory'; -- For all lines needing reservation FOR Cur_ResLine IN (SELECT l.M_Warehouse_ID, l.M_Product_ID, l.M_AttributeSetInstance_ID, l.C_OrderLine_ID, -- Target Level = 0 if DirectShip='Y' or Binding='N' (CASE l.DirectShip WHEN 'Y' THEN 0 ELSE (CASE v_IsBinding WHEN 'N' THEN 0 ELSE l.QtyOrdered END) END) -l.QtyReserved-l.QtyDelivered AS Qty, l.QUANTITYORDER, l.QtyReserved, l.QtyDelivered, l.DatePromised, l.C_UOM_ID, l.M_PRODUCT_UOM_ID FROM C_ORDERLINE l, M_PRODUCT p WHERE l.C_Order_ID=v_Record_ID -- Reserve Products (not: services, null products) -- AND l.M_Product_ID=p.M_Product_ID AND p.IsStocked='Y' AND p.ProductType='I' -- Target Level = 0 if DirectShip='Y' or Binding='N' AND (CASE l.DirectShip WHEN 'Y' THEN 0 ELSE (CASE v_IsBinding WHEN 'N' THEN 0 ELSE l.QtyOrdered END)END) -l.QtyReserved-l.QtyDelivered <> 0 FOR UPDATE) LOOP -- Qty corrected for SO/PO IF (v_DocSubTypeSO IS NOT NULL) THEN v_QtySO := Cur_ResLine.Qty; v_QtyOrderSO := NULL; IF Cur_ResLine.QtyReserved=0 AND Cur_ResLine.QtyDelivered=0 THEN v_QtyOrderSO := Cur_ResLine.QuantityOrder; ELSIF Cur_ResLine.M_Product_UOM_ID IS NOT NULL THEN v_QtyOrderSO := C_Uom_Convert(v_QtySO, Cur_ResLine.C_UOM_ID, Cur_ResLine.M_Product_UOM_ID, 'Y'); END IF; v_QtyPO := 0; v_QtyOrderPO := NULL; ELSE -- PO v_QtySO := 0; v_QtyOrderSO := NULL; v_QtyPO := Cur_ResLine.Qty; v_QtyOrderPO := NULL; IF Cur_ResLine.QtyReserved=0 AND Cur_ResLine.QtyDelivered=0 THEN v_QtyOrderPO := Cur_ResLine.QuantityOrder; ELSIF Cur_ResLine.M_Product_UOM_ID IS NOT NULL THEN v_QtyOrderPO := C_Uom_Convert(v_QtyPO, Cur_ResLine.C_UOM_ID, Cur_ResLine.M_Product_UOM_ID, 'Y'); END IF; END IF; PERFORM M_UPDATE_STORAGE_PENDING(v_Client_ID, v_Org_ID, v_UpdatedBy, Cur_ResLine.M_Product_ID, Cur_ResLine.M_Warehouse_ID, Cur_ResLine.M_AttributeSetInstance_ID, Cur_ResLine.C_UOM_ID, Cur_ResLine.M_PRODUCT_UOM_ID, v_QtySO, v_QtyOrderSO, v_QtyPO, v_QtyOrderPO); RAISE NOTICE '%','Reserved Warehouse=' || Cur_ResLine.M_Warehouse_ID || ', Product=' || Cur_ResLine.M_Product_ID || ', Attrib=' || Cur_ResLine.M_AttributeSetInstance_ID || ', Qty=' || v_QtySO || '/' || v_QtyPO; -- Update Order Line IF (v_DocSubTypeSO IS NOT NULL) THEN UPDATE C_ORDERLINE SET QtyReserved = QtyReserved + v_QtySO WHERE C_OrderLine_ID = Cur_ResLine.C_OrderLine_ID; END IF; GET DIAGNOSTICS rowcount:=ROW_COUNT; IF (rowcount <> 1) THEN IF (p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; v_ResultStr := 'LockingOrder'; UPDATE C_ORDER SET Processing = 'N' WHERE C_Order_ID = v_Record_ID; RAISE EXCEPTION '%','DATA_EXCEPTION'; -- COMMIT; END IF; RAISE EXCEPTION '%', 'Did not update Line'; --OBTG:-20011-- END IF; END LOOP; -- For all lines needing reservation END; -- Reserve Inventory END IF;--FINISH_PROCESS IF (NOT FINISH_PROCESS) THEN /************************************************************************** * Calculate Taxes and Totals *************************************************************************/ DECLARE Cur_Tax RECORD; Cur_MultiTax RECORD; xTotalLines NUMERIC:=0; v_LineNetAmt NUMERIC:=0; xTaxAmt NUMERIC:=0; xGrandTotal NUMERIC:=0; HeaderNotAdded BOOLEAN:=TRUE; v_FirstLine BOOLEAN; v_ActualBaseAmt NUMERIC; v_lineNo NUMERIC:= 0; BEGIN v_ResultStr:='DeleteOldTaxes'; DELETE FROM C_ORDERLINETAX WHERE C_OrderLine_ID IN (SELECT C_OrderLine_ID from C_OrderLine WHERE C_Order_ID = v_Record_ID); DELETE FROM C_ORDERTAX WHERE C_Order_ID=v_Record_ID; -- For all Tax Rates v_ResultStr:='InsertNewTaxes'; FOR Cur_Tax IN (SELECT l.C_OrderLine_ID, l.C_Tax_ID, o.IsTaxIncluded, SUM(l.LineNetAmt) + SUM(l.FreightAmt) + SUM(coalesce(l.ChargeAmt,0)) AS LineNetAmt, SUM(l.TaxBaseAmt) + SUM(l.FreightAmt) + SUM(coalesce(l.ChargeAmt,0)) AS TaxBaseAmt, SUM(o.FreightAmt) + SUM(coalesce(o.ChargeAmt,0)) AS HeaderNet, t.Rate, t.IsSummary, c.StdPrecision, t.BaseAmount, o.C_Order_ID FROM C_ORDER o, C_ORDERLINE l, C_TAX t, C_CURRENCY c WHERE o.C_Order_ID=l.C_Order_ID AND o.C_Order_ID=v_Record_ID -- Parameter AND l.C_Tax_ID=t.C_Tax_ID AND o.C_Currency_ID=c.C_Currency_ID GROUP BY l.C_OrderLine_ID, l.C_Tax_ID, o.IsTaxIncluded, t.Rate, t.IsSummary, c.StdPrecision, t.BaseAmount, o.C_Order_ID ORDER BY 4 DESC ) LOOP v_LineNetAmt:=Cur_Tax.LineNetAmt; xTotalLines:=xTotalLines + v_LineNetAmt; -- w/o Header Freight/Charge IF(HeaderNotAdded) THEN -- add header net to first tax HeaderNotAdded:=FALSE; v_LineNetAmt:=v_LineNetAmt + Cur_Tax.HeaderNet; END IF; PERFORM C_ORDERLINETAX_INSERT(v_Org_ID, Cur_Tax.C_Order_ID, Cur_Tax.C_OrderLine_ID, v_UpdatedBy, Cur_Tax.C_Tax_ID, Cur_Tax.C_Tax_ID, Cur_Tax.LineNetAmt, Cur_Tax.TaxBaseAmt, Cur_Tax.StdPrecision); END LOOP; -- Insert New Taxes SELECT COALESCE(SUM(TAXAMT), 0) INTO xGrandTotal FROM C_ORDERTAX WHERE C_ORDER_ID = v_Record_ID; xGrandTotal:=xGrandTotal+ xTotalLines; -- Update Header UPDATE C_ORDER SET TotalLines=xTotalLines, GrandTotal=xGrandTotal WHERE C_Order_ID=v_Record_ID; RAISE NOTICE '%','GrandTotal=' || xGrandTotal ; END; -- Calculate Tax and Totals -- Synchronize Client/Org Ownership UPDATE C_ORDERLINE SET AD_Client_ID=v_Client_ID, AD_Org_ID=v_Org_ID WHERE C_Order_ID=v_Record_ID AND(AD_Client_ID<>v_Client_ID OR AD_Org_ID<>v_Org_ID) ; END IF;--FINISH_PROCESS IF(NOT END_PROCESSING AND NOT FINISH_PROCESS) THEN /************************************************************************** * Order Complete:5 - Something to do:6 */ BEGIN v_ResultStr:='OrderCompleteCheck'; SELECT SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyDelivered*hex_to_int(C_OrderLine_ID)), SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyInvoiced*hex_to_int(C_OrderLine_ID)) INTO ToDeliver, ToInvoice FROM C_ORDERLINE WHERE C_Order_ID=v_Record_ID; -- If no lines, ToDeliver is NULL IF((ToDeliver=0 AND ToInvoice=0) OR(ToDeliver IS NULL AND ToInvoice IS NULL)) THEN RAISE NOTICE '%','OrderComplete' ; IF(v_DocAction='CL') THEN END_PROCESSING:=TRUE; ELSIF(v_DocAction='VO') THEN UPDATE C_ORDER SET DocStatus='VO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; END_PROCESSING:=TRUE; ELSE UPDATE C_ORDER SET DocStatus='CO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; END_PROCESSING:=TRUE; END IF; IF(NOT END_PROCESSING) THEN RAISE EXCEPTION '%', '@AlreadyPosted@'; --OBTG:-20000-- END IF;--END_PROCESSING END IF; END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /** * In Progress ----------------------------------------------------------- */ UPDATE C_ORDER SET DocStatus='IP', DateAcct=DateOrdered, Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; IF(p_PInstance_ID IS NOT NULL) THEN -- COMMIT; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /** * Finished with processing */ IF(v_DocAction='PR') THEN v_ResultStr:='FinishProcessing'; UPDATE C_ORDER SET DocStatus='IP', DocAction='CO', Processed='N', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; -- C_Order_PickList(NULL, v_Record_ID); -- Print PickList END_PROCESSING:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Prepayment Order Create Invoice *************************************************************************/ IF(v_DocSubTypeSO='PR' AND v_DocStatus<>'WP') THEN RAISE NOTICE '%','Create PreInvoice - ' || v_Record_ID ; v_ResultStr:='CreatePreInvoice'; SELECT * INTO Invoice_ID FROM C_Invoice_Create(NULL, v_Record_ID) ; RAISE NOTICE '%',' PreInvoice - ' || Invoice_ID ; IF(Invoice_ID='0') THEN RAISE EXCEPTION '%', '@PreInvoiceCreateFailed@'; --OBTG:-20000-- END IF; IF(NOT END_PROCESSING) THEN PERFORM C_INVOICE_POST(NULL, Invoice_ID) ; -- UPDATE C_ORDER SET DocStatus='WP', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; -- END IF;--END_PROCESSING END_PROCESSING:=TRUE; END IF; IF(NOT END_PROCESSING) THEN /** * Deliver Direct Shipments */ v_ResultStr:='NonInventoryDelivery'; UPDATE C_ORDERLINE SET QtyDelivered=QtyOrdered WHERE DirectShip='Y' AND C_Order_ID=v_Record_ID; END IF;--END_PROCESSING END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Will-Call + Walk In Processing * -- * (W)illCall(I)nvoice - (W)illCall(P)ickup - (W)alkIn(R)eceipt * -- *************************************************************************/ IF(v_DocSubTypeSO IN('WI', 'WP', 'WR')) THEN /************ * Shipment */ RAISE NOTICE '%','Create Shipment - ' || v_Record_ID ; v_ResultStr:='CreateShipment'; SELECT * INTO InOut_ID FROM M_Inout_Create(NULL, v_Record_ID, NULL, 'Y') ; -- Force Delivery RAISE NOTICE '%',' Shipment - ' || InOut_ID ; IF(InOut_ID='0') THEN RAISE EXCEPTION '%', '@InOutCreateFailed@'; --OBTG:-20000-- ELSE SELECT documentno INTO v_DocumentNo FROM M_INOUT WHERE M_INOUT_ID = InOut_ID; v_Message:='@InoutDocumentno@ ' || v_DocumentNo || ' @beenCreated@'; END IF; IF(NOT END_PROCESSING) THEN IF(v_DocSubTypeSO IN('WI', 'WR')) THEN /************ * Invoice */ RAISE NOTICE '%','Create Invoice - ' || v_Record_ID ; v_ResultStr:='CreateInvoice'; SELECT * INTO Invoice_ID FROM C_Invoice_Create(NULL, v_Record_ID) ; RAISE NOTICE '%',' Invoice - ' || Invoice_ID ; IF(Invoice_ID IS NULL OR Invoice_ID='0') THEN RAISE EXCEPTION '%', '@InvoiceCreateFailed@'; --OBTG:-20000-- ELSE SELECT documentno INTO v_DocumentNo FROM C_INVOICE WHERE C_INVOICE_ID = Invoice_ID; v_Message:=v_Message||' , '||'@InvoiceDocumentno@ ' || v_DocumentNo || ' @invbeenCreated@'; END IF; END IF; END IF;--END_PROCESSING END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /** * Final Completeness check */ SELECT SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyDelivered*hex_to_int(C_OrderLine_ID)), SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyInvoiced*hex_to_int(C_OrderLine_ID)) INTO ToDeliver, ToInvoice FROM C_ORDERLINE WHERE C_Order_ID=v_Record_ID; RAISE NOTICE '%','To deliver - ' || ToDeliver ; RAISE NOTICE '%','ToInvoice - ' || ToInvoice ; RAISE NOTICE '%','v_DocSubTypeSO - ' || v_DocSubTypeSO ; -- Nothing to Deliver + Invoice for (W)illCall(I)nvoice and (W)alkIn(R)eceipt IF(v_DocSubTypeSO IN('WI', 'WR') AND ToDeliver=0 AND ToInvoice=0) THEN UPDATE C_ORDER SET DocStatus='CO', DocAction='--', IsDelivered='Y', IsInvoiced='Y', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; RAISE NOTICE '%','DocAction - ' || v_DocAction ; IF(v_DocAction='VO') THEN UPDATE C_ORDER SET DocStatus='VO' WHERE C_Order_ID=v_Record_ID; END IF; END IF; -- Nothing to Deliver for (W)illCall(P)ickup (Invoice generated independently) IF(v_DocSubTypeSO='WP' AND ToDeliver=0) THEN UPDATE C_ORDER SET DocStatus='CO', DocAction='--', IsDelivered='Y', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; IF(v_DocAction='VO') THEN UPDATE C_ORDER SET DocStatus='VO' WHERE C_Order_ID=v_Record_ID; END IF; END IF; -- We are done with standard sales orders IF (v_DocSubTypeSO = 'RM') THEN FOR Cur_Order IN( SELECT ol.qtyordered from C_order o,C_orderline ol where o.C_Order_ID = v_Record_ID AND ol.C_Order_ID = o.C_Order_ID) LOOP IF (Cur_Order.qtyordered >0) THEN RAISE EXCEPTION '%', '@ReturnMaterialOrderType@' ; --OBTG:-20000-- END IF; END LOOP; END IF; IF(v_DocAction IN('CO', 'CL', 'VO') AND v_DocSubTypeSO IN('SO','RM')) THEN UPDATE C_ORDER SET DocStatus='CO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; END IF; -- Purchase Orders IF(v_DocAction IN('CO', 'CL', 'VO') AND v_DocSubTypeSO IS NULL) THEN UPDATE C_ORDER SET DocStatus='CO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE C_Order_ID=v_Record_ID; END IF; -- Only create cash entry if docAction is Complete IF(v_DocAction NOT IN('CO')) THEN END_PROCESSING:=TRUE; END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN /************************************************************************** * Create default Cash entry *************************************************************************/ DECLARE v_PaymentRule VARCHAR(60) ; CUR_CB RECORD; v_debtPaymentID VARCHAR(32); --OBTG:varchar2-- v_totalCash NUMERIC; v_CB_Curr VARCHAR(32); --OBTG:varchar2-- BEGIN /* ALO */ UPDATE C_DEBT_PAYMENT SET IsValid='Y' WHERE C_Order_ID=v_Record_ID; SELECT C_ORDER.PAYMENTRULE, C_ORDER.DOCUMENTNO||' - '||C_BPARTNER.NAME||' - '||C_ORDER.GRANDTOTAL, C_ORDER.GRANDTOTAL, C_ORDER.M_WAREHOUSE_ID INTO v_PaymentRule, v_DocumentNo, v_GrandTotal, v_M_Warehouse_ID FROM C_ORDER, C_BPARTNER WHERE C_ORDER.C_BPARTNER_ID=C_BPARTNER.C_BPARTNER_ID AND C_ORDER_ID=v_Record_ID; SELECT MAX(NAME) INTO v_WarehouseName FROM M_WAREHOUSE WHERE M_WAREHOUSE_ID=v_M_Warehouse_ID; --PaymentRule C, WI and WR have already created DP, this won't be inserted in cashline --because it will processed with the invoice. IF(v_PaymentRule='C') AND (v_DocSubTypeSO NOT IN ('WI', 'WR') OR v_DocSubTypeSO IS NULL) THEN IF(v_CashLine_ID IS NULL OR v_CashLine_ID='0') THEN -- Create CashLine -- Find Defaylt CashBook v_ResultStr:='Find C_CashBook Org_ID=' || v_Org_ID; BEGIN -- First active default Book of Org FOR CUR_CB IN (SELECT cb.C_CashBook_ID, c.ISO_Code, cb.NAME, cb.c_currency_id FROM C_CASHBOOK cb, C_CURRENCY c WHERE cb.AD_Org_ID=v_Org_ID AND cb.C_Currency_ID=c.C_Currency_ID AND cb.IsActive='Y' ORDER BY cb.IsDefault DESC ) LOOP IF(v_CashBook_ID IS NULL) THEN v_CashBook_ID:=CUR_CB.C_CashBook_ID; v_ISO_Code:=CUR_CB.ISO_Code; v_CB_Curr:=CUR_CB.C_Currency_ID; ELSIF(CUR_CB.NAME=v_WarehouseName) THEN v_CashBook_ID:=CUR_CB.C_CashBook_ID; v_ISO_Code:=CUR_CB.ISO_Code; v_CB_Curr:=CUR_CB.C_Currency_ID; END IF; END LOOP; END; IF(v_CashBook_ID IS NULL) THEN RAISE EXCEPTION '%', '@CashBookPRSCnotfoundOrg@' || v_Org_Name ; --OBTG:-20000-- END IF; RAISE NOTICE '%','CashBook_ID=' || v_CashBook_ID ; -- Find/Create Cash Journal v_ResultStr:='Find C_Cash for ' || v_Date; DECLARE Cur_CashId RECORD; BEGIN FOR Cur_CashId IN (SELECT C_Cash_ID AS Cash_ID FROM C_CASH WHERE C_CashBook_ID=v_CashBook_ID AND TRUNC(StatementDate)=v_Date AND Processed='N' ) LOOP v_Cash_ID:=Cur_CashId.Cash_ID; EXIT; END LOOP; EXCEPTION WHEN DATA_EXCEPTION THEN NULL; END; /************************************************************************** * Credit Multiplier *************************************************************************/ DECLARE v_DocBaseType C_DOCTYPE.DocBaseType%TYPE; BEGIN -- Is it a Credit Memo? SELECT DocBaseType INTO v_DocBaseType FROM C_DOCTYPE WHERE C_DocType_ID=v_DocType_ID; IF(v_DocBaseType IN('ARC', 'API')) THEN v_Multiplier:=-1; END IF; END; IF(v_Cash_ID IS NULL) THEN v_ResultStr:='Create C_Cash'; SELECT * INTO v_Cash_ID FROM Ad_Sequence_Next('C_Cash', v_Org_ID) ; INSERT INTO C_CASH ( C_Cash_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_CashBook_ID, NAME, StatementDate, DateAcct, BeginningBalance, EndingBalance, StatementDifference, Processing, Processed, Posted ) VALUES ( v_Cash_ID, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_CashBook_ID, TO_CHAR(v_Date, 'YYYY-MM-DD') || ' ' || v_ISO_Code, v_Date, v_Date, 0, 0, 0, 'N', 'N', 'N' ) ; END IF; /* Create a debt payment for paymentrule=C Note: for WI and WR we have already created an invoice and its DP, we only have to link it */ SELECT COALESCE(SUM(C_Currency_Round(C_Currency_Convert((Amount + WriteOffAmt), C_Currency_ID, v_CB_Curr, v_Date, NULL, v_Client_ID, v_Org_ID), v_c_Currency_ID, NULL)), 0) INTO v_totalCash FROM C_DEBT_PAYMENT_V dp WHERE C_Order_ID=v_Record_ID; /* SELECT COUNT(*) INTO v_Aux FROM C_DEBT_PAYMENT DP, C_INVOICE I WHERE I.C_ORDER_ID = v_Record_ID AND DP.C_INVOICE_ID = I.C_INVOICE_ID; IF v_Aux != 0 THEN -- DP already created SELECT dp.C_DEBT_PAYMENT_ID INTO v_debtPaymentID FROM C_DEBT_PAYMENT DP, C_INVOICE I WHERE I.C_ORDER_ID = v_Record_ID AND DP.C_INVOICE_ID = I.C_INVOICE_ID; UPDATE C_DEBT_PAYMENT SET C_ORDER_ID = v_Record_ID WHERE C_DEBT_PAYMENT_ID = v_debtPaymentID; ELSE */ SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID) ; INSERT INTO C_DEBT_PAYMENT (C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_CANCEL_ID, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_ORDER_ID, C_BPARTNER_ID, C_CURRENCY_ID, C_CASHLINE_ID, C_BANKACCOUNT_ID, C_CASHBOOK_ID, PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, C_BANKSTATEMENTLINE_ID, CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, c_project_id,IsAutomaticGenerated, STATUS_INITIAL) VALUES (v_debtPaymentID, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_isSoTrx, NULL, NULL, '', v_Record_ID, v_c_Bpartner_Id, v_c_currency_id, null, NULL, v_CashBook_ID, 'C', 'N', (v_GrandTotal-v_totalCash), 0, v_Date, 'N', 'Y', NULL, 'N', 'N', 'N', v_C_PROJECT_ID,'Y', 'DE'); -- END IF; RAISE NOTICE '%',' Cash_ID=' || v_Cash_ID ; -- Create CashJournal Line in invoice currency v_ResultStr:='Create C_CashLine'; SELECT * INTO v_CashLine_ID FROM Ad_Sequence_Next('C_CashLine', v_Org_ID) ; SELECT COALESCE(MAX(Line), 0) +10 INTO v_Line FROM C_CASHLINE WHERE C_Cash_ID=v_Cash_ID; -- INSERT INTO C_CASHLINE ( C_CashLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Cash_ID, C_Debt_Payment_ID, Line, Description, Amount, CashType, DiscountAmt, WriteOffAmt, IsGenerated ) VALUES ( v_CashLine_ID, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_UpdatedBy, TO_DATE(NOW()), v_UpdatedBy, v_Cash_ID, v_debtPaymentID, v_Line, v_DocumentNo, (v_GrandTotal-v_totalCash) * (CASE WHEN v_isSoTrx='N' THEN -1 ELSE 1 END), 'P', 0, 0, 'Y' ) ; RAISE NOTICE '%',' CashLine_ID=' || v_CashLine_ID ; END IF; -- CashLine_ID IS NULL OR CashLine_ID = '0' END IF; -- v_PaymentRule = 'C' END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- End Processing -------------------------------------------------------- ---- <> -- Cloase Order IF(v_DocAction='CL') THEN UPDATE C_ORDER SET DocStatus='CL', DocAction='--', Processed='Y' WHERE C_Order_ID=v_Record_ID; END IF; END IF;--FINISH_PROCESS --C_Order_Post - Finish_Process Extension Point SELECT count(*) INTO v_count FROM DUAL where exists (select 1 from ad_ep_procedures where ad_extension_points_id = 'CB68FC0E8A4547D9943C785761977E77'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); --OBTG:VARCHAR2-- v_extension_point_id VARCHAR(32) := 'CB68FC0E8A4547D9943C785761977E77'; --OBTG:VARCHAR2-- BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Record_ID', v_record_id, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'DocAction', v_DocAction, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'User', v_User, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Message', NULL, NULL, NULL, NULL, NULL, NULL, v_Message); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Result', NULL, NULL, v_result, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); SELECT p_number INTO v_Result FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'Result'; SELECT p_text INTO v_Message FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'Message'; DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; END IF; IF(NOT FINISH_PROCESS) THEN IF(p_PInstance_ID IS NOT NULL) THEN v_ResultStr:='UnLockingOrder'; UPDATE C_ORDER SET Processing='N', Updated=TO_DATE(NOW()), UpdatedBy=v_User WHERE C_Order_ID=v_Record_ID; -- COMMIT; END IF; END IF;--FINISH_PROCESS ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%',v_ResultStr ; v_ResultStr:= '@ERROR=' || SQLERRM; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; --Inserted by Carlos Romero 062706 UPDATE C_ORDER SET Processing='N' WHERE C_Order_ID=v_Record_ID; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $$ LANGUAGE plpgsql; dDROP FUNCTION public.c_order_post1(p_pinstance_id character varying, p_order_id character varying); publictadfalse23416125536715!c_order_status(character varying)FUNCTIONeCREATE FUNCTION c_order_status(p_orderid character varying) RETURNS character AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Status VARCHAR(60) ; v_OrderStatus VARCHAR(60) ; v_CountNotDelivered NUMERIC; v_CountNotInvoiced NUMERIC; v_CountNotPaid VARCHAR(32); --OBTG:varchar2-- BEGIN SELECT MAX(Docstatus) INTO v_OrderStatus FROM C_Order WHERE C_Order.C_Order_ID = p_OrderID; IF(v_OrderStatus IS NULL) THEN v_Status := '1'; -- In transit ELSIF(v_OrderStatus = 'VO') THEN v_Status := '0'; -- Cancelled ELSIF(v_OrderStatus = 'DR') THEN v_Status := '8'; -- Draft ELSE --delivered SELECT COUNT(*) INTO v_CountNotDelivered FROM C_OrderLine WHERE C_ORDER_ID = p_OrderID AND QtyOrdered <> QtyDelivered; --Invoiced SELECT COUNT(*) INTO v_CountNotInvoiced FROM C_OrderLine WHERE C_ORDER_ID = p_OrderID AND QtyOrdered <> QtyInvoiced; --paid IF(v_CountNotInvoiced = 0) THEN SELECT COUNT(*) INTO v_CountNotPaid FROM C_Invoice WHERE EXISTS (SELECT 1 FROM C_InvoiceLine, C_OrderLine WHERE C_InvoiceLine.C_OrderLine_ID = C_OrderLine.C_OrderLine_ID AND C_InvoiceLine.C_Invoice_ID = C_Invoice.C_Invoice_ID AND C_OrderLine.C_Order_ID = p_OrderID ) AND grandtotal <> (SELECT SUM(C_Currency_Convert(Amount, C_Debt_Payment.C_Currency_ID, C_Invoice.C_Currency_ID, C_Invoice.DateInvoiced, null, null, null)) FROM C_Debt_Payment WHERE C_Invoice_ID = C_Invoice.C_Invoice_ID AND C_Debt_Payment_Paid(C_Debt_Payment_ID) = 'Y' ) ; ELSE SELECT COUNT(*) INTO v_CountNotPaid FROM C_Order WHERE C_Order_ID = p_OrderID AND grandtotal <> (SELECT SUM(C_Currency_Convert(Amount, C_Debt_Payment.C_Currency_ID, C_Order.C_Currency_ID, TO_DATE(TO_DATE(NOW())), null, null, null)) FROM C_Debt_Payment WHERE C_Order_ID = p_OrderID AND C_Debt_Payment_Paid(C_Debt_Payment_ID) = 'Y' ) ; END IF; IF(v_CountNotDelivered <> 0 AND v_CountNotInvoiced <> 0 AND v_CountNotPaid <> 0) THEN v_Status := '2'; --Pending ELSIF(v_CountNotDelivered <> 0 AND v_CountNotInvoiced <> 0 AND v_CountNotPaid = 0) THEN v_Status := '3'; --Paid and not delivered ELSIF(v_CountNotDelivered = 0 AND v_CountNotInvoiced <> 0 AND v_CountNotPaid <> 0) THEN v_Status := '4'; --Delivered, not invoiced nor paid ELSIF(v_CountNotDelivered = 0 AND v_CountNotInvoiced = 0 AND v_CountNotPaid <> 0) THEN v_Status := '5'; --Invoiced not paid ELSIF(v_CountNotDelivered = 0 AND v_CountNotInvoiced <> 0 AND v_CountNotPaid = 0) THEN v_Status := '6'; --Pending to invoice ELSIF(v_CountNotDelivered = 0 AND v_CountNotInvoiced = 0 AND v_CountNotPaid = 0) THEN v_Status := '9'; --Finished END IF; END IF; RETURN v_Status; END ; $$ LANGUAGE plpgsql; BDROP FUNCTION public.c_order_status(p_orderid character varying); publictadfalse23416N125595488 c_order_trg()FUNCTION# CREATE FUNCTION c_order_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Order_Trg.sql,v 1.4 2003/05/30 04:23:38 jjanke Exp $ *** * Title: Order Trigger * Description: * Update potentially existing Invoices with Payment Info * Sync Header Changes to Lines ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(old.POReference, '.') <> COALESCE(NEW.POReference, '.') OR COALESCE(old.C_BPartner_ID, '0') <> COALESCE(NEW.C_BPartner_ID, '0') OR COALESCE(old.C_BPartner_Location_ID, '0') <> COALESCE(NEW.C_BPartner_Location_ID, '0') OR COALESCE(old.M_Warehouse_ID, '0') <> COALESCE(NEW.M_Warehouse_ID, '0') OR COALESCE(old.M_Shipper_ID, '0') <> COALESCE(NEW.M_Shipper_ID, '0') OR COALESCE(old.C_Currency_ID, '0') <> COALESCE(NEW.C_Currency_ID, '0') )) THEN -- If order is processed, is not allowed to change C_BPartner nor M_WareHouse nor AD_ORG_ID nor AD_CLIENT_ID IF(old.Processed='Y' AND ( (COALESCE(old.C_BPartner_ID, '0') <> COALESCE(new.C_BPartner_ID, '0')) OR (COALESCE(old.M_WareHouse_ID, '0') <> COALESCE(new.M_WareHouse_ID, '0')) OR (COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR (COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) ) ) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; -- Propagate Description changes UPDATE C_Invoice SET Description=new.Description, POReference=new.POReference WHERE C_Order_ID=new.C_Order_ID; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; $DROP FUNCTION public.c_order_trg(); publictadfalse23416O125595490c_order_trg2()FUNCTIONR CREATE FUNCTION c_order_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('01-01-1900','DD-MM-YYYY'); --TYPE RECORD IS REFCURSOR; Cur_Discounts RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.PaymentRule, '.') <> COALESCE(NEW.PaymentRule, '.') OR COALESCE(old.C_PaymentTerm_ID, '0') <> COALESCE(NEW.C_PaymentTerm_ID, '0') OR COALESCE(old.DateAcct, v_DateNull) <> COALESCE(NEW.DateAcct, v_DateNull))) THEN -- Propagate Changes of Payment Info to existing invoices UPDATE C_Invoice SET PaymentRule=new.PaymentRule, C_PaymentTerm_ID=new.C_PaymentTerm_ID, DateAcct=new.DateAcct WHERE C_Order_ID=new.C_Order_ID AND DocStatus NOT IN('RE', 'CL', 'CO') ; END IF; END IF; -- Discounts IF (TG_OP = 'INSERT') THEN FOR Cur_Discounts IN ( SELECT C_DISCOUNT_ID, LINE, CASCADE FROM C_BPARTNER_DISCOUNT WHERE C_BPARTNER_ID=NEW.C_BPARTNER_ID AND ISACTIVE='Y' AND(ISCUSTOMER=NEW.ISSOTRX OR ISVENDOR <> NEW.ISSOTRX) AND APPLYINORDER='Y' ORDER BY LINE ) LOOP INSERT INTO C_ORDER_DISCOUNT ( C_ORDER_DISCOUNT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_ORDER_ID, C_DISCOUNT_ID, LINE, CASCADE ) VALUES ( get_uuid(), NEW.AD_Client_ID, NEW.AD_Org_ID, 'Y', TO_DATE(NOW()), NEW.CREATEDBY, TO_DATE(NOW()), NEW.UPDATEDBY, NEW.C_ORDER_ID, Cur_Discounts.C_DISCOUNT_ID, Cur_Discounts.LINE, Cur_Discounts.CASCADE ) ; END LOOP; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.c_order_trg2(); publictadfalse23416F125595470c_orderdiscount_trg()FUNCTIONvCREATE FUNCTION c_orderdiscount_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID C_Order.C_Order_ID%TYPE; v_RO NUMERIC; v_Processed CHAR(1) ; BEGIN IF TG_OP = 'UPDATE' THEN SELECT PROCESSED INTO v_Processed FROM C_ORDER WHERE C_ORDER_ID=OLD.C_ORDER_ID; IF(v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; -- Get ID IF(TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_ID:=NEW.C_ORDER_ID; ELSE v_ID:=OLD.C_ORDER_ID; END IF; -- ReadOnly Check SELECT COUNT(*) INTO v_RO FROM C_ORDER WHERE C_ORDER_ID=v_ID AND(Processed='Y' OR Posted='Y') ; IF(v_RO > 0) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.c_orderdiscount_trg(); publictadfalse23416G125595472c_orderline2_trg()FUNCTION CREATE FUNCTION c_orderline2_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_QtyReserved NUMERIC; v_QtyOrderReserved NUMERIC; V_STOCKED NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF(NEW.M_PRODUCT_ID IS NOT NULL) THEN IF((COALESCE(old.QtyDelivered, 0) <> COALESCE(NEW.QtyDelivered, 0))) THEN -- Get ID v_ID:=new.C_Order_ID; v_QtyReserved:=-(new.qtydelivered - old.qtydelivered) ; IF old.qtydelivered=0 AND new.qtydelivered=new.qtyordered THEN v_QtyOrderReserved:=-new.QuantityOrder; ELSIF new.M_Product_UOM_ID IS NOT NULL THEN v_QtyOrderReserved:=C_Uom_Convert(v_QtyReserved, new.C_UOM_ID, new.m_product_uom_id, 'Y') ; END IF; SELECT COUNT(*) INTO V_STOCKED FROM M_PRODUCT WHERE M_Product_ID=NEW.M_PRODUCT_ID AND IsStocked='Y' AND ProductType='I'; IF V_STOCKED > 0 THEN PERFORM M_UPDATE_STORAGE_PENDING(new.AD_Client_ID, new.AD_Org_ID, new.UpdatedBy, new.M_Product_ID, new.M_Warehouse_ID, new.M_AttributeSetInstance_ID, new.C_UOM_ID, new.M_PRODUCT_UOM_ID, v_QtyReserved, v_QtyOrderReserved, 0, NULL) ; END IF; END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_orderline2_trg(); publictadfalse23416I125595476c_orderline_trg()FUNCTIONpCREATE FUNCTION c_orderline_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ v_newTaxBaseAmt NUMERIC; v_oldTaxBaseAmt NUMERIC; v_oldLine NUMERIC:= 0; v_newLineNetAmt NUMERIC:= 0; v_newLineAlternate NUMERIC:= 0; v_taxAmt NUMERIC:= 0; v_BaseAmount C_TAX.BASEAMOUNT%TYPE; v_HasTaxLine BOOLEAN := FALSE; v_Prec NUMERIC; v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Processed VARCHAR(60); v_UOM_ID VARCHAR(32); --OBTG:VARCHAR2-- v_IsSOTrx CHAR(1); v_Count NUMERIC; v_taxBaseAmt NUMERIC; v_rate NUMERIC; v_isSummary CHAR(1); xTaxAmt NUMERIC:=0; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'UPDATE') THEN IF NOT(COALESCE(old.M_Product_ID,'0') <> COALESCE(NEW.M_Product_ID,'0') OR COALESCE(old.LineNetAmt,0) <> COALESCE(NEW.LineNetAmt,0) OR COALESCE(old.FreightAmt,0) <> COALESCE(NEW.FreightAmt,0) OR COALESCE(old.ChargeAmt,0) <> COALESCE(NEW.ChargeAmt,0) OR COALESCE(old.C_Tax_ID,'0') <> COALESCE(NEW.C_Tax_ID,'0') OR COALESCE(old.C_Uom_ID,'0') <> COALESCE(NEW.C_Uom_ID,'0') OR COALESCE(old.qtyOrdered,0) <> COALESCE(NEW.qtyOrdered,0) OR COALESCE(old.PriceActual,0) <> COALESCE(NEW.PriceActual,0)) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; /** * Check Product changes = not possible when reservation, invoice or delivery exists */ IF (TG_OP = 'DELETE') THEN IF (old.QtyReserved <> 0 AND old.C_ORDER_DISCOUNT_ID IS NULL) THEN RAISE EXCEPTION '%', 'Changed Product had Reservation=' || old.QtyReserved; --OBTG:-20200-- ELSIF (old.QtyDelivered <> 0) THEN RAISE EXCEPTION '%', 'Changed Product had Delieveries=' || old.QtyDelivered; --OBTG:-20201-- ELSIF (old.QtyInvoiced <> 0) THEN RAISE EXCEPTION '%', 'Changed Product was Invoiced=' || old.QtyInvoiced; --OBTG:-20202-- END IF; ELSIF (TG_OP = 'UPDATE') THEN SELECT issotrx INTO v_IsSOTrx FROM c_order WHERE c_order_id = old.c_order_id; IF (old.M_Product_ID <> NEW.M_Product_ID) THEN IF (old.QtyReserved <> 0) THEN RAISE EXCEPTION '%', 'Changed Product had Reservation=' || old.QtyReserved; --OBTG:-20203-- ELSIF (old.QtyDelivered <> 0) THEN RAISE EXCEPTION '%', 'Changed Product had Delieveries=' || old.QtyDelivered; --OBTG:-20204-- ELSIF (old.QtyInvoiced <> 0) THEN RAISE EXCEPTION '%', 'Changed Product was Invoiced=' || old.QtyInvoiced; --OBTG:-20205-- ELSIF (v_IsSOTrx = 'N') THEN SELECT count(*) INTO v_Count FROM m_inoutline WHERE c_orderline_id = old.c_orderline_id; IF (v_count > 0) THEN RAISE EXCEPTION '%', 'Changed Product has good receipts'; --OBTG:-20206-- END IF; END IF; END IF; END IF; -- Get ID IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN IF (NEW.M_PRODUCT_ID IS NOT NULL) THEN SELECT C_UOM_ID INTO v_UOM_ID FROM M_PRODUCT WHERE M_PRODUCT_ID=NEW.M_PRODUCT_ID; IF (COALESCE(v_UOM_ID,'0') <> COALESCE(NEW.C_UOM_ID,'0')) THEN RAISE EXCEPTION '%', 'Unit of Measure mismatch (product/transaction)'; --OBTG:-20111-- END IF; END IF; v_ID := new.C_Order_ID; ELSE v_ID := old.C_Order_ID; END IF; SELECT StdPrecision INTO v_Prec FROM C_Currency, C_Order WHERE C_Currency.C_Currency_ID = C_Order.C_Currency_ID AND C_Order_ID = v_ID; /** * Round Base */ --v_Prec := 2; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN -- Modified by I.Ciordia. Sometimes js fails calculting lineNet new.LineNetAmt := ROUND(new.QtyOrdered*new.PriceActual, v_Prec);-- Modified by I.Ciordia new.FreightAmt := ROUND(new.FreightAmt, v_Prec); new.ChargeAmt := ROUND(new.ChargeAmt, v_Prec); END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; (DROP FUNCTION public.c_orderline_trg(); publictadfalse23416J125595479c_orderline_trg2()FUNCTION,CREATE FUNCTION c_orderline_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Offer RECORD; v_OrderLine_Offer_ID VARCHAR(32); --OBTG:VARCHAR2-- v_lineno NUMERIC:=0; v_Price NUMERIC; v_PriceNew NUMERIC; v_Amt NUMERIC; v_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Order_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Insert BOOLEAN :=FALSE; v_Precision NUMERIC; v_PriceList_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Processed C_ORDER.PROCESSED%TYPE; v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_oldLine NUMERIC; v_newLineNetAmt NUMERIC; v_newLineAlternate NUMERIC; v_taxAmt NUMERIC; v_Prec C_CURRENCY.STDPRECISION%TYPE; v_BaseAmount C_TAX.BASEAMOUNT%TYPE; v_AttrSetValueType M_Product.AttrSetValueType%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'DELETE') THEN v_ID:=OLD.C_ORDER_ID; ELSE v_ID:=NEW.C_ORDER_ID; END IF; IF TG_OP = 'UPDATE' THEN IF ((NEW.DateOrdered != OLD.DateOrdered) OR (COALESCE(NEW.PriceActual,0) != COALESCE(OLD.PriceActual,0)) OR (COALESCE(NEW.PriceList,0) != COALESCE(OLD.PriceList,0)) OR (COALESCE(NEW.M_Product_ID,'0') != COALESCE(OLD.M_Product_ID,'0')) OR (COALESCE(NEW.QtyOrdered,0) != COALESCE(OLD.QtyOrdered,0))) THEN DELETE FROM C_ORDERLINE_OFFER WHERE C_OrderLine_ID = NEW.C_OrderLine_ID; v_Insert := TRUE; END IF; END IF; IF TG_OP = 'INSERT' OR v_Insert THEN SELECT C_BPartner_ID, PricePrecision, M_PriceList_ID INTO v_BPartner_ID, v_Precision, v_PriceList_ID FROM C_ORDER o, C_CURRENCY c WHERE C_Order_ID = NEW.C_Order_ID AND o.C_Currency_ID = c.C_Currency_ID; --Get the new "std" price from the Actual price (if actual price is the std price they will be equal) v_Price := NEW.PriceActual; FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE NEW.DateOrdered BETWEEN DATEFROM AND COALESCE(DATETO,TO_DATE('31-12-9999','DD-MM-YYYY')) AND IsActive = 'Y' AND (NEW.QtyOrdered >= COALESCE(Qty_From,0) OR Qty_From IS NULL) AND (NEW.QtyOrdered <= COALESCE(Qty_To,0) OR Qty_To IS NULL) AND ((PRICELIST_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID)) OR (PRICELIST_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID))) AND ((BPARTNER_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID AND IsActive = 'Y')) OR (BPARTNER_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID AND IsActive = 'Y'))) AND ((BP_GROUP_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID)) OR (BP_GROUP_SELECTION='N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID))) AND ((PRODUCT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID)) OR (PRODUCT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID))) AND ((PROD_CAT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID)) OR (PROD_CAT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID))) ORDER BY PRIORITY DESC, M_OFFER_ID) LOOP v_Price := M_Get_Offer_Std_Price(Cur_Offer.M_Offer_ID, v_Price); END LOOP; -- :new.PriceStd := v_Price; FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE NEW.DateOrdered BETWEEN DATEFROM AND COALESCE(DATETO,TO_DATE('31-12-9999','DD-MM-YYYY')) AND IsActive = 'Y' AND (NEW.QtyOrdered >= COALESCE(Qty_From,0) OR Qty_From IS NULL) AND (NEW.QtyOrdered <= COALESCE(Qty_To,0) OR Qty_To IS NULL) AND ((PRICELIST_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID)) OR (PRICELIST_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = v_PriceList_ID))) AND ((BPARTNER_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID AND IsActive = 'Y')) OR (BPARTNER_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = v_BPartner_ID AND IsActive = 'Y'))) AND ((BP_GROUP_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID)) OR (BP_GROUP_SELECTION='N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = v_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID))) AND ((PRODUCT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID)) OR (PRODUCT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = NEW.M_PRODUCT_ID))) AND ((PROD_CAT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID)) OR (PROD_CAT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = NEW.M_PRODUCT_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID))) ORDER BY PRIORITY, M_OFFER_ID DESC) LOOP SELECT * INTO v_OrderLine_Offer_ID FROM Ad_Sequence_Next('C_OrderLine_Offer', NEW.AD_Client_ID); v_lineno := v_lineno + 10; v_PriceNew := M_Get_Offer_Price(Cur_Offer.M_Offer_ID, v_Price); v_Amt := v_Price - v_PriceNew; IF (NEW.CANCELPRICEAD='N') THEN INSERT INTO C_ORDERLINE_OFFER (C_ORDERLINE_OFFER_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_ORDERLINE_ID, LINE, M_OFFER_ID, PRICEOFFER, AMTOFFER) VALUES (v_OrderLine_Offer_ID, NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, TO_DATE(NOW()),NEW.CreatedBy, TO_DATE(NOW()),NEW.UpdatedBy, NEW.C_OrderLine_ID, v_lineno, Cur_Offer.M_Offer_Id, ROUND(v_Price,v_Precision), ROUND(v_Amt,v_Precision)); v_Price := v_PriceNew; END IF; END LOOP; END IF; /************************************************************************** * Calculate Tax, etc. */ SELECT processed, stdPrecision INTO v_Processed, v_Prec FROM C_Order, C_Currency WHERE C_Order.C_Currency_ID = C_Currency.C_Currency_ID AND C_Order_ID=v_ID; v_oldLine:=0; v_newLineNetAmt:=0; IF(v_Processed='N') THEN -- Calculate taxes IF(TG_OP = 'UPDATE') THEN v_oldLine:= COALESCE(old.LineNetAmt,0) + COALESCE(old.FreightAmt,0) + COALESCE(old.ChargeAmt,0); END IF; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN DELETE FROM C_ORDERLINETAX WHERE C_ORDERLINE_ID = new.C_OrderLine_ID; v_newLineNetAmt := COALESCE(new.LineNetAmt,0) + COALESCE(new.FreightAmt,0) + COALESCE(new.ChargeAmt,0); v_newLineAlternate := COALESCE(new.TaxBaseAmt,0) + COALESCE(new.FreightAmt,0) + COALESCE(new.ChargeAmt,0); SELECT BaseAmount INTO v_BaseAmount FROM C_TAX WHERE C_TAX_ID = new.C_Tax_ID; PERFORM C_ORDERLINETAX_INSERT(new.AD_Org_ID, new.C_Order_ID, new.C_OrderLine_ID, new.UpdatedBy, new.C_Tax_ID, new.C_Tax_ID, v_newLineNetAmt, v_newLineAlternate, v_Prec); -- Get Total Tax Amt SELECT SUM(TaxAmt) INTO v_taxAmt FROM C_OrderTax WHERE C_Order_ID=new.C_Order_ID; -- DBMS_OUTPUT.PUT_LINE('TaxAmt = ' || v_taxAmt); -- Update Header UPDATE C_Order SET TotalLines = TotalLines - v_oldLine + v_newLineNetAmt, GrandTotal = TotalLines - v_oldLine + v_newLineNetAmt + COALESCE(v_taxAmt, 0) -- Updated = SysDate -- Don't update as otherwise it does not save changes WHERE C_Order_ID = new.C_Order_ID; ELSE -- DELETING SELECT SUM(TaxAmt) INTO v_taxAmt FROM C_OrderTax WHERE C_Order_ID=old.C_Order_ID; -- DBMS_OUTPUT.PUT_LINE('TaxAmt = ' || v_taxAmt); -- Update Header UPDATE C_Order SET TotalLines = TotalLines - v_oldLine + v_newLineNetAmt, GrandTotal = TotalLines - v_oldLine + v_newLineNetAmt + COALESCE(v_taxAmt, 0) -- Updated = SysDate -- Don't update as otherwise it does not save changes WHERE C_Order_ID=old.C_Order_ID; END IF; END IF; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN --Does not allow to change the attribute set value -- for products which attribute set value type is Fixed IF (NEW.M_PRODUCT_ID IS NOT NULL AND COALESCE(new.M_AttributeSetInstance_ID,'0')!='0') THEN SELECT ATTRSETVALUETYPE INTO v_AttrSetValueType FROM M_PRODUCT WHERE M_PRODUCT_ID=NEW.M_PRODUCT_ID; IF (v_AttrSetValueType='F') THEN RAISE EXCEPTION '%', '@AttrSetValueFixed@'; --OBTG:-20000-- END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_orderline_trg2(); publictadfalse23416K125595482c_orderline_trg3()FUNCTIONyCREATE FUNCTION c_orderline_trg3() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ V_PRECISION NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT C.STDPRECISION INTO V_PRECISION FROM C_CURRENCY C WHERE C.C_CURRENCY_ID=NEW.C_CURRENCY_ID; IF (round(to_number(NEW.QTYORDERED) * to_number(NEW.PRICEACTUAL),V_PRECISION) != to_number(NEW.LINENETAMT)) THEN RAISE EXCEPTION '%', '@LineAmountNotCorrect@' ; --OBTG:-20000-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_orderline_trg3(); publictadfalse23416125556479c_orderlinetax_insert(character varying, character varying, character varying, character varying, character varying, character varying, numeric, numeric, numeric)FUNCTIONCREATE FUNCTION c_orderlinetax_insert(p_org_id character varying, p_order_id character varying, p_orderline_id character varying, p_user_id character varying, p_originaltax_id character varying, p_tax_id character varying, p_linenetamt numeric, p_alternatetaxbaseamt numeric, p_stdprecision numeric) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_IsSummary C_TAX.ISSUMMARY%TYPE; v_Cascade C_TAX.CASCADE%TYPE; v_TaxBaseAmount NUMERIC; v_BaseAmount C_TAX.BASEAMOUNT%TYPE; v_AlreadyExists NUMERIC; v_C_TaxBase_ID C_TAX.C_TAXBASE_ID%TYPE; v_LineNet NUMERIC; v_AlternateTaxBaseAmt NUMERIC; v_LineNo C_INVOICETAX.LINE%TYPE; v_Rate C_TAX.RATE%TYPE; v_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Taxes RECORD; FINISH_PROCESS BOOLEAN:=false; BEGIN --BODY v_TaxBaseAmount:=0; SELECT ISSUMMARY, CASCADE, RATE, BASEAMOUNT, AD_CLIENT_ID, C_TAXBASE_ID INTO v_IsSummary, v_Cascade, v_Rate, v_BaseAmount, v_Client_ID, v_C_TaxBase_ID FROM C_TAX WHERE C_TAX_ID = p_tax_id; IF(v_BaseAmount='LNA' OR v_BaseAmount='LNATAX') THEN v_TaxBaseAmount:=p_LineNetAmt; ELSIF (v_BaseAmount='TBA' OR v_BaseAmount='TBATAX') THEN v_TaxBaseAmount:=p_AlternateTaxBaseAmt; END IF; IF (v_TaxBaseAmount IS NULL) THEN v_TaxBaseAmount:=0; END IF; IF (v_BaseAmount='TAX' OR v_BaseAmount='LNATAX' OR v_BaseAmount='TBATAX') THEN SELECT COALESCE(SUM(TAXAMT),0) + v_TaxBaseAmount INTO v_TaxBaseAmount FROM C_ORDERLINETAX, C_TAX WHERE C_ORDERLINETAX.C_TAX_ID = C_TAX.C_TAX_ID AND C_TAX_ISMEMBER(v_C_TaxBase_ID,C_TAX.C_TAX_ID) = 1 AND C_ORDERLINE_ID = p_orderline_id AND C_TAX.ISSUMMARY='N'; END IF; IF(v_Cascade='Y') THEN SELECT COALESCE(SUM(TAXAMT), 0) + v_TaxBaseAmount INTO v_TaxBaseAmount FROM C_ORDERLINETAX WHERE C_ORDERLINE_ID = p_orderline_id; END IF; IF(v_IsSummary='N') THEN SELECT COALESCE(MAX(LINE),0) + 10 INTO v_LineNo FROM C_ORDERLINETAX WHERE C_ORDERLINE_ID = p_orderline_id; IF(p_order_id IS NULL OR p_orderline_id IS NULL) THEN RAISE EXCEPTION '%', 'Null ORDER OR LINE ID'; --OBTG:-20200-- END IF; INSERT INTO C_ORDERLINETAX ( C_OrderLineTax_ID, C_OrderLine_ID, C_Order_ID, C_Tax_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, TaxBaseAmt, TaxAmt, Line) VALUES ( GET_UUID(), p_orderline_id, p_order_id, p_tax_id, v_Client_ID, p_org_id, 'Y', TO_DATE(NOW()), p_user_id, TO_DATE(NOW()), p_user_id, v_TaxBaseAmount, ROUND(v_TaxBaseAmount*v_Rate / 100, p_StdPrecision), v_LineNo); ELSE FOR Cur_Taxes IN (SELECT C_Tax_ID, RATE FROM C_TAX WHERE Parent_Tax_ID=p_tax_id ORDER BY Line) LOOP PERFORM C_ORDERLINETAX_INSERT(p_org_id, p_order_id, p_orderline_id, p_user_id, p_originaltax_id, Cur_Taxes.C_Tax_ID, p_LineNetAmt, p_AlternateTaxBaseAmt, p_StdPrecision); END LOOP; END IF; RETURN; ---- <> EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; ---- ROLLBACK; RAISE EXCEPTION '%', SQLERRM; END ; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.c_orderlinetax_insert(p_org_id character varying, p_order_id character varying, p_orderline_id character varying, p_user_id character varying, p_originaltax_id character varying, p_tax_id character varying, p_linenetamt numeric, p_alternatetaxbaseamt numeric, p_stdprecision numeric); publictadfalse23416H125595474c_orderlinetax_trg()FUNCTION4CREATE FUNCTION c_orderlinetax_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2010 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ v_Count NUMERIC; v_LineNo NUMERIC; v_C_Order_ID C_ORDERLINETAX.C_ORDER_ID%TYPE; v_C_Tax_ID C_ORDERLINETAX.C_TAX_ID%TYPE; v_Prec C_CURRENCY.STDPRECISION%TYPE; v_DocTaxAmount C_TAX.DOCTAXAMOUNT%TYPE; v_Rate C_TAX.RATE%TYPE; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN v_C_Tax_ID:=NEW.C_Tax_ID; v_C_Order_ID:=NEW.C_ORDER_ID; ELSE v_C_Tax_ID:=OLD.C_Tax_ID; v_C_Order_ID:=OLD.C_ORDER_ID; END IF; SELECT C_CURRENCY.STDPRECISION INTO v_Prec FROM C_ORDER, C_CURRENCY WHERE C_ORDER.C_CURRENCY_ID = C_CURRENCY.C_CURRENCY_ID AND C_ORDER_ID = v_C_Order_ID; SELECT DOCTAXAMOUNT, RATE INTO v_DocTaxAmount, v_Rate FROM C_TAX WHERE C_TAX_ID = v_C_Tax_ID; IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN SELECT COUNT(C_TAX_ID) INTO v_Count FROM C_ORDERTAX WHERE C_ORDER_ID = NEW.C_Order_ID AND C_TAX_ID = NEW.C_TAX_ID; IF(v_Count>0) THEN UPDATE C_ORDERTAX SET TAXAMT = (CASE WHEN v_DocTaxAmount='D' THEN ROUND((TAXBASEAMT + NEW.TAXBASEAMT) * v_Rate/100, v_Prec) ELSE (TAXAMT + NEW.TAXAMT) END), TAXBASEAMT=TAXBASEAMT + NEW.TAXBASEAMT WHERE C_ORDER_ID = NEW.C_Order_ID AND C_TAX_ID = NEW.C_TAX_ID; ELSE SELECT COALESCE(MAX(LINE),0) + 10 INTO v_LineNo FROM C_ORDERTAX WHERE C_ORDER_ID = NEW.C_Order_ID; INSERT INTO C_ORDERTAX ( C_OrderTax_ID, C_Order_ID, C_Tax_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, TaxBaseAmt, TaxAmt, Line) VALUES ( GET_UUID(), NEW.C_Order_ID, NEW.C_TAX_ID, NEW.AD_CLIENT_ID, NEW.AD_ORG_ID, 'Y', TO_DATE(NOW()), NEW.UPDATEDBY, TO_DATE(NOW()), NEW.UPDATEDBY, NEW.TAXBASEAMT, NEW.TAXAMT, v_LineNo); END IF; ELSE UPDATE C_ORDERTAX SET TAXAMT = (CASE WHEN v_DocTaxAmount='D' THEN ROUND((TAXBASEAMT - OLD.TAXBASEAMT) * v_Rate/100, v_Prec) ELSE (TAXAMT - OLD.TAXAMT) END), TAXBASEAMT=TAXBASEAMT - OLD.TAXBASEAMT WHERE C_ORDER_ID = OLD.C_Order_ID AND C_TAX_ID = OLD.C_TAX_ID; DELETE FROM C_ORDERTAX WHERE C_ORDER_ID = OLD.C_Order_ID AND C_TAX_ID = OLD.C_TAX_ID AND TAXAMT=0 AND TAXBASEAMT=0; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_orderlinetax_trg(); publictadfalse23416L125595484c_ordertax_trg()FUNCTION CREATE FUNCTION c_ordertax_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_OrderTax_Trg.sql,v 1.3 2003/01/31 03:03:04 jjanke Exp $ *** * Title: ReadOnly Check * Description: ************************************************************************/ v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RO NUMERIC; v_Processed VARCHAR(60) ; v_C_ORDER_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Docaction VARCHAR(60) ; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_ORDER_ID:=new.C_ORDER_ID; ELSE v_C_ORDER_ID:=old.C_ORDER_ID; END IF; SELECT PROCESSED, DOCACTION INTO v_Processed, v_Docaction FROM C_ORDER WHERE C_ORDER_ID=v_C_ORDER_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND v_Docaction <> 'CL' AND ((COALESCE(old.TAXBASEAMT, 0) <> COALESCE(new.TAXBASEAMT, 0)) OR(COALESCE(old.TAXAMT, 0) <> COALESCE(new.TAXAMT, 0)) OR(COALESCE(old.C_TAX_ID, '0') <> COALESCE(new.C_TAX_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; NULL; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y' AND v_Docaction <> 'CL') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; /** Is not needed -- Get ID IF (TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_ID:=new.C_Order_ID; ELSE v_ID:=old.C_Order_ID; END IF; -- ReadOnly Check SELECT COUNT(*) INTO v_RO FROM C_Order WHERE C_Order_ID=v_ID AND DocAction <> 'CL' -- allow to close order AND (Processed='Y' OR Posted='Y'); IF (v_RO > 0) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; **/ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_ordertax_trg(); publictadfalse23416P125595492 c_ordline_chk_restrictions_trg()FUNCTIONcCREATE FUNCTION c_ordline_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_C_ORDER_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Docaction VARCHAR(60) ; v_Docstatus VARCHAR(60); v_DocumentNo C_ORDER.DocumentNO%TYPE; v_IsSOTrx CHAR(1); v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_ORDER_ID:=NEW.C_ORDER_ID; ELSE v_C_ORDER_ID:=OLD.C_ORDER_ID; END IF; IF TG_OP = 'UPDATE' THEN IF((COALESCE(old.LINE, 0) <> COALESCE(NEW.LINE, 0) OR COALESCE(old.M_PRODUCT_ID, '0') <> COALESCE(NEW.M_PRODUCT_ID, '0') OR COALESCE(old.QTYORDERED, 0) <> COALESCE(NEW.QTYORDERED, 0) OR COALESCE(old.PRICELIST, 0) <> COALESCE(NEW.PRICELIST, 0) OR COALESCE(old.PRICEACTUAL, 0) <> COALESCE(NEW.PRICEACTUAL, 0) OR COALESCE(old.PRICELIMIT, 0) <> COALESCE(NEW.PRICELIMIT, 0) OR COALESCE(old.LINENETAMT, 0) <> COALESCE(NEW.LINENETAMT, 0) OR COALESCE(old.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0') OR COALESCE(old.CHARGEAMT, 0) <> COALESCE(NEW.CHARGEAMT, 0) OR COALESCE(old.C_TAX_ID, '0') <> COALESCE(NEW.C_TAX_ID, '0') OR COALESCE(old.DIRECTSHIP, '.') <> COALESCE(NEW.DIRECTSHIP, '.') OR COALESCE(old.M_ATTRIBUTESETINSTANCE_ID, '0') <> COALESCE(NEW.M_ATTRIBUTESETINSTANCE_ID, '0') OR COALESCE(old.QUANTITYORDER, 0) <> COALESCE(NEW.QUANTITYORDER, 0) OR COALESCE( old.M_PRODUCT_UOM_ID, '0') <> COALESCE(NEW.M_PRODUCT_UOM_ID, '0') OR COALESCE(old.QtyInvoiced, 0) <> COALESCE(NEW.QtyInvoiced, 0))) THEN SELECT PROCESSED, DOCACTION, DOCSTATUS, DocumentNo, ISSOTRX INTO v_Processed, v_Docaction, v_DocStatus, v_DocumentNo, v_IsSOTrx FROM C_ORDER WHERE C_ORDER_ID=v_C_ORDER_ID; IF((COALESCE(OLD.LINE, 0) <> COALESCE(NEW.LINE, 0)) OR(COALESCE(OLD.M_PRODUCT_ID, '0') <> COALESCE(NEW.M_PRODUCT_ID, '0')) OR(COALESCE(OLD.QTYORDERED, 0) <> COALESCE(NEW.QTYORDERED, 0)) OR(COALESCE(OLD.PRICELIST, 0) <> COALESCE(NEW.PRICELIST, 0)) OR(COALESCE(OLD.PRICEACTUAL, 0) <> COALESCE(NEW.PRICEACTUAL, 0)) OR(COALESCE(OLD.PRICELIMIT, 0) <> COALESCE(NEW.PRICELIMIT, 0)) OR(COALESCE(OLD.LINENETAMT, 0) <> COALESCE(NEW.LINENETAMT, 0)) OR(COALESCE(OLD.C_CHARGE_ID, '0') <> COALESCE(NEW.C_CHARGE_ID, '0')) OR(COALESCE(OLD.CHARGEAMT, 0) <> COALESCE(NEW.CHARGEAMT, 0)) OR(COALESCE(OLD.C_TAX_ID, '0') <> COALESCE(NEW.C_TAX_ID, '0')) OR(COALESCE(OLD.DIRECTSHIP, '.') <> COALESCE(NEW.DIRECTSHIP, '.')) OR(COALESCE(OLD.M_ATTRIBUTESETINSTANCE_ID, '0') <> COALESCE(NEW.M_ATTRIBUTESETINSTANCE_ID, '0')) OR(COALESCE(OLD.QUANTITYORDER, 0) <> COALESCE(NEW.QUANTITYORDER, 0)) OR(COALESCE(OLD.M_PRODUCT_UOM_ID, '0') <> COALESCE(NEW.M_PRODUCT_UOM_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) ) THEN IF (v_Processed='Y' AND v_Docaction <> 'CL') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- ELSIF (v_IsSOTrx ='Y' AND v_DocStatus = 'DR' AND (OLD.QTYDELIVERED <> 0 OR OLD.QTYINVOICED <> 0) AND (COALESCE(OLD.PRICEACTUAL, 0) = COALESCE(NEW.PRICEACTUAL, 0) OR OLD.QTYINVOICED <> 0)) THEN RAISE EXCEPTION '%', '@DeliveredInvoicedOrderline@'; --OBTG:-20000-- END IF; ELSIF (v_IsSOTrx = 'Y' AND ABS(new.QtyInvoiced) > ABS(new.QtyOrdered)) THEN v_Message := '@OrderDocumentno@' || ' ' || v_DocumentNo || ' ' || '@line@' || old.line || '. '; v_Message := v_Message || '@QtyInvoicedHigherOrdered@'; RAISE EXCEPTION '%', v_Message; --OBTG:-20000-- END IF; END IF; END IF; IF(TG_OP = 'DELETE' OR TG_OP = 'INSERT') THEN SELECT PROCESSED, DOCACTION INTO v_Processed, v_Docaction FROM C_ORDER WHERE C_ORDER_ID=v_C_ORDER_ID; IF (v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 7DROP FUNCTION public.c_ordline_chk_restrictions_trg(); publictadfalse23416125536726(c_payinadvance_create(character varying)FUNCTION!"CREATE FUNCTION c_payinadvance_create(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32) ; v_AD_User_ID VARCHAR(32) ; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; --Parameter variables v_C_BPartner_ID VARCHAR(32); v_C_Cashline_ID VARCHAR(32); v_C_Cashbook_Id VARCHAR(32); v_Amount NUMERIC; v_C_Currency_ID VARCHAR(32); v_PaymentRule VARCHAR(60) ; v_DatePlanned TIMESTAMP; v_IsReceipt VARCHAR(1) ; --OBTG:VARCHAR2-- v_Description VARCHAR(60) ; --OBTG:VARCHAR2-- --Local variables v_Client_ID VARCHAR(32); v_AD_Org_ID VARCHAR(32); v_settlementID VARCHAR(32):=NULL; v_SettlementDocType_ID VARCHAR(32) ; v_SDocumentNo C_SETTLEMENT.DocumentNo%TYPE; v_debtPaymentID VARCHAR(32) ; v_CBankAccount_ID C_BankStatement.C_BankAccount_ID%TYPE; v_C_BankCurrency VARCHAR(32); v_BS_Date TIMESTAMP; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, i.AD_USER_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='C_BPartner_ID') THEN v_C_BPartner_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_BPartner_ID=' || v_C_BPartner_ID ; ELSIF(Cur_Parameter.ParameterName='Amount') THEN v_Amount:=Cur_Parameter.P_Number; RAISE NOTICE '%',' Amount=' || v_Amount ; ELSIF(Cur_Parameter.ParameterName='C_Currency_ID') THEN v_C_Currency_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' C_Currency_ID=' || v_C_Currency_ID ; ELSIF(Cur_Parameter.ParameterName='PaymentRule') THEN v_PaymentRule:=Cur_Parameter.P_String; RAISE NOTICE '%',' v_PaymentRule=' || v_PaymentRule ; ELSIF(Cur_Parameter.ParameterName='Dateplanned') THEN v_DatePlanned:=Cur_Parameter.P_Date; RAISE NOTICE '%',' DatePlanned=' || v_DatePlanned ; ELSIF(Cur_Parameter.ParameterName='IsReceipt') THEN v_IsReceipt:=Cur_Parameter.p_String; RAISE NOTICE '%',' IsReceipt='||v_IsReceipt ; ELSIF(Cur_Parameter.ParameterName='Description') THEN v_Description:=Cur_Parameter.p_String; RAISE NOTICE '%',' Description='||v_Description ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; --Read Cash Line v_ResultStr:='ReadingCashLine '||v_record_Id; --Only for clearness in SELECTs, UPDATEs and INSERTs v_C_Cashline_ID:=v_record_Id; --Get Client, Org and CashBook SELECT L.AD_Client_ID, L.AD_Org_ID, B.C_Cashbook_ID INTO v_Client_ID, v_AD_Org_ID, v_C_Cashbook_Id FROM C_Cashline L, C_Cash B WHERE L.C_Cashline_ID=v_C_Cashline_ID AND L.C_Cash_ID=B.C_Cash_ID; --Insert Settlement v_ResultStr:='InsertingSettlement'; v_SettlementDocType_ID:=Ad_Get_DocType(v_Client_ID, v_AD_Org_ID, TO_CHAR('STT')) ; SELECT * INTO v_settlementID FROM Ad_Sequence_Next('C_Settlement', v_Record_ID) ; SELECT * INTO v_SDocumentNo FROM Ad_Sequence_Doctype(v_SettlementDocType_ID, v_Record_ID, 'Y') ; IF(v_SDocumentNo IS NULL) THEN SELECT * INTO v_SDocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_Client_ID, 'Y') ; END IF; --We do here requirement 1) INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, PROCESSING, PROCESSED, POSTED, C_CURRENCY_ID, Description, ISGENERATED ) /*, C_PROJECT_ID, C_CAMPAIGN_ID, C_ACTIVITY_ID, USER1_ID, USER2_ID, CREATEFROM)*/ VALUES ( v_SettlementID, v_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, '*DPC*'||v_SDocumentNo, trunc(TO_DATE(NOW())), trunc(TO_DATE(NOW())), 'C', v_SettlementDocType_ID, 'N', 'N', 'N', v_C_Currency_ID, v_Description, 'Y' ) ; --Insert generated debt payment --We do here requirement 2.B) v_ResultStr:='InsertingGeneratedDebtPayement'; SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID) ; INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_INVOICE_ID, C_BPARTNER_ID, C_CURRENCY_ID, /*C_CASHLINE_ID, C_BANKACCOUNT_ID, C_CASHBOOK_ID,*/ PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, /*C_BANKSTATEMENTLINE_ID,*/ CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, STATUS_INITIAL ) VALUES ( v_debtPaymentID, v_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_IsReceipt, v_settlementID, v_Description, null, v_C_BPartner_ID, v_C_Currency_ID, v_PaymentRule, 'N', v_Amount*(-1), 0, v_DatePlanned, 'N', 'Y', 'N', 'N', 'Y', 'AN' ) ; SELECT * INTO v_debtPaymentID FROM Ad_Sequence_Next('C_Debt_Payment', v_Record_ID) ; --We insert it in the positive side of the bank account --We do here requirement 2.A) INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_SETTLEMENT_GENERATE_ID, DESCRIPTION, C_INVOICE_ID, C_BPARTNER_ID, C_CURRENCY_ID, /*C_CASHLINE_ID,*/ /*C_BANKACCOUNT_ID,*/ C_CASHBOOK_ID, PAYMENTRULE, ISPAID, AMOUNT, WRITEOFFAMT, DATEPLANNED, ISMANUAL, ISVALID, /*C_BANKSTATEMENTLINE_ID,*/ CHANGESETTLEMENTCANCEL, CANCEL_PROCESSED, GENERATE_PROCESSED, STATUS_INITIAL ) VALUES ( v_debtPaymentID, v_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_IsReceipt, v_settlementID, v_Description, null, v_C_BPartner_ID, v_C_Currency_ID, /*v_C_Cashline_ID,*/ v_C_Cashbook_Id, /*v_CBankAccount_ID,*/ v_PaymentRule, 'N', v_Amount, 0, v_DatePlanned, 'N', 'Y', 'N', 'N', 'Y', 'DE' ) ; PERFORM C_SETTLEMENT_POST(null, v_settlementID); --We do here requirements 3.A) and 3.B) and 3.C) UPDATE C_CASHLINE SET C_DEBT_PAYMENT_ID=v_debtPaymentID , CASHTYPE='P', AMOUNT=CASE v_IsReceipt WHEN 'Y' THEN v_Amount ELSE v_Amount*(-1) END WHERE C_CASHLINE_ID=v_C_Cashline_ID ; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.c_payinadvance_create(p_pinstance_id character varying); publictadfalse23416125536728c_paymentduedate(character varying, character, numeric, numeric, numeric, numeric, numeric, character, character, timestamp without time zone)FUNCTIONCREATE FUNCTION c_paymentduedate(p_bpartner_id character varying, p_issotrx character, p_fixmonthday1 numeric, p_fixmonthday2 numeric, p_fixmonthday3 numeric, p_netdays numeric, p_fixmonthoffset numeric, p_netday character, p_isnextbusinessday character, p_docdate timestamp without time zone) RETURNS timestamp without time zone AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2007 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Get Payment Due TIMESTAMP ************************************************************************/ v_docDate TIMESTAMP; v_DueDate TIMESTAMP; v_fixMonthDay1 NUMERIC; v_fixMonthDay2 NUMERIC; v_fixMonthDay3 NUMERIC; v_FixMonthDay NUMERIC; v_Aux NUMERIC; BEGIN IF(p_isSoTrx = 'Y') THEN SELECT FIXMONTHDAY, FIXMONTHDAY2, FIXMONTHDAY3 INTO v_FixMonthDay1, v_FixMonthDay2, v_FixMonthDay3 FROM C_BPARTNER WHERE C_BPARTNER_ID = p_bPartner_ID; ELSE SELECT PO_FIXMONTHDAY, PO_FIXMONTHDAY2, PO_FIXMONTHDAY3 INTO v_FixMonthDay1, v_FixMonthDay2, v_FixMonthDay3 FROM C_BPARTNER WHERE C_BPARTNER_ID = p_bPartner_ID; END IF; IF(v_FixMonthDay1 IS NULL) THEN v_FixMonthDay1 := p_fixMonthDay1; v_FixMonthDay2 := p_fixMonthDay2; v_FixMonthDay3 := p_fixMonthDay3; END IF; IF(v_fixMonthDay1 IS NOT NULL) THEN --First aply offset (days and months) v_docDate := p_DocDate + COALESCE(p_netDays, 0) ; v_docDate := C_ADD_MONTHS2(v_docDate, COALESCE(p_fixMonthOffset, 0)) ; IF((v_fixMonthDay2 < TO_NUMBER(TO_CHAR(TRUNC(v_docDate), 'dd'))) AND(v_fixMonthDay3 >= TO_NUMBER(TO_CHAR(TRUNC(v_docDate), 'dd')))) THEN v_FixMonthDay := v_fixMonthDay3; ELSIF((v_fixMonthDay1 < TO_NUMBER(TO_CHAR(TRUNC(v_docDate), 'dd'))) AND(v_fixMonthDay2 >= TO_NUMBER(TO_CHAR(TRUNC(v_docDate), 'dd')))) THEN v_FixMonthDay := v_fixMonthDay2; ELSE v_FixMonthDay := v_fixMonthDay1; IF(v_FixMonthDay < TO_NUMBER(TO_CHAR(TRUNC(v_docDate), 'dd'))) THEN v_docDate := ADD_MONTHS(v_docDate, 1) ; END IF; END IF; v_DueDate := C_Datedayinmonth(v_FixMonthDay, TO_DATE(v_docDate)) ; ELSE v_DueDate := TRUNC(p_DocDate) + COALESCE(p_netDays, 0) ; v_DueDate := ADD_MONTHS(v_DueDate, COALESCE(p_fixMonthOffset, 0)) ; WHILE(TO_CHAR(v_DueDate, 'D') NOT LIKE p_netDay) LOOP v_DueDate := v_DueDate + 1; END LOOP; END IF; IF(p_isNextbusinessday = 'Y') THEN --The first day of the week depends on the database configuration for oracle --It is used the Julian day to ensure that saturday and sunday are always --the days 6 and 7 of the week in both oracle and postgresql databases. SELECT MOD(to_number(to_char(v_DueDate, 'J')), 7) + 1 INTO v_Aux from DUAL; WHILE(v_Aux IN('6', '7')) LOOP v_DueDate := v_DueDate + 1; SELECT MOD(to_number(to_char(v_DueDate, 'J')), 7) + 1 INTO v_Aux from DUAL; END LOOP; END IF; RETURN COALESCE(v_DueDate, TRUNC(p_DocDate)) ; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.c_paymentduedate(p_bpartner_id character varying, p_issotrx character, p_fixmonthday1 numeric, p_fixmonthday2 numeric, p_fixmonthday3 numeric, p_netdays numeric, p_fixmonthoffset numeric, p_netday character, p_isnextbusinessday character, p_docdate timestamp without time zone); publictadfalse23416125536729Xc_paymentterm_duedate(character varying, timestamp without time zone, character varying)FUNCTIONCREATE FUNCTION c_paymentterm_duedate(p_paymentterm_id character varying, p_docdate timestamp without time zone, p_bpartner_id character varying) RETURNS timestamp without time zone AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Get Due TIMESTAMP * Description: * Grace days are not considered! ************************************************************************/ v_DueDate TIMESTAMP; -- --TYPE RECORD IS REFCURSOR; Cur_PT RECORD; BEGIN FOR Cur_PT IN (SELECT * FROM C_PaymentTerm WHERE C_PaymentTerm_ID = p_PaymentTerm_ID) LOOP -- Pending: Vendor invoices not arranged v_DueDate := C_PaymentDueDate(p_BPartner_ID, 'Y', Cur_PT.FixMonthDay, Cur_PT.FixMonthDay2, Cur_PT.FixMonthDay3, Cur_PT.NetDays, Cur_PT.FixMonthOffset, Cur_PT.NetDay, Cur_PT.IsNextbusinessday, p_DocDate) ; END LOOP; RETURN COALESCE(v_DueDate, TRUNC(p_DocDate)) ; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.c_paymentterm_duedate(p_paymentterm_id character varying, p_docdate timestamp without time zone, p_bpartner_id character varying); publictadfalse23416125536730bc_paymentterm_duedays(character varying, timestamp without time zone, timestamp without time zone)FUNCTIONCREATE FUNCTION c_paymentterm_duedays(p_paymentterm_id character varying, p_docdate timestamp without time zone, p_paydate timestamp without time zone) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN RETURN TRUNC(p_PayDate) - C_PAYMENTTERM_DUEDATE(p_PaymentTerm_ID, p_DocDate, NULL) ; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.c_paymentterm_duedays(p_paymentterm_id character varying, p_docdate timestamp without time zone, p_paydate timestamp without time zone); publictadfalse23416125536731Ec_paymentterm_duedays(character varying, timestamp without time zone)FUNCTIONCREATE FUNCTION c_paymentterm_duedays(p_paymentterm_id character varying, p_docdate timestamp without time zone) RETURNS numeric AS $_$ DECLARE BEGIN RETURN C_PAYMENTTERM_DUEDAYS ($1, $2, TO_DATE(NOW())); END ; $_$ LANGUAGE plpgsql; wDROP FUNCTION public.c_paymentterm_duedays(p_paymentterm_id character varying, p_docdate timestamp without time zone); publictadfalse23416Q125595494c_paymentterm_trg()FUNCTION^ CREATE FUNCTION c_paymentterm_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert C_PaymentTerm Trigger -- for Translation IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_PaymentTerm_Trl ( C_PaymentTerm_Trl_ID, C_PaymentTerm_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, DocumentNote, IsTranslated ) SELECT get_uuid(), new.C_PaymentTerm_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.DocumentNote, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting -- C_PaymentTerm update trigger -- synchronize name,... IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.DocumentNote, '.') <> COALESCE(NEW.DocumentNote, '.') OR COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.'))) THEN UPDATE C_PaymentTerm_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_PaymentTerm_ID=new.C_PaymentTerm_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_paymentterm_trg(); publictadfalse23416125556483#c_period_process(character varying)FUNCTION3)CREATE FUNCTION c_period_process(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Period_Process.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Opens/Closes all PeriodControl for a C_Period * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Record_ID_Log VARCHAR(32); --OBTG:VARCHAR2-- v_Count NUMERIC:=0; v_Count2 NUMERIC:=0; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Document RECORD; -- Parameter Variables p_Organization C_PeriodControl_Log.AD_Org_ID%TYPE; p_IsRecursive C_PeriodControl_Log.IsRecursive%TYPE; p_Calendar C_PeriodControl_Log.C_Calendar_ID%TYPE; p_Year C_PeriodControl_Log.C_Year_ID%TYPE; p_YearName C_Year.Year%TYPE; p_PeriodNO C_PeriodControl_Log.PeriodNO%TYPE; p_DocBaseType C_PeriodControl_Log.DocBaseType%TYPE; p_PeriodAction C_PeriodControl_Log.PeriodAction%TYPE; p_Processing C_PeriodControl_Log.Processing%TYPE; v_AD_Client_ID C_PeriodControl_Log.AD_Client_ID%TYPE; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN -- Get Parameters SELECT Record_ID INTO v_Record_ID_Log FROM AD_PInstance WHERE AD_PInstance_ID=p_PInstance_ID; SELECT L.AD_Client_ID, L.AD_Org_ID, L.C_Calendar_ID, L.ISRecursive, L.C_Year_ID, C_Year.Year, L.PeriodNO, L.DocBaseType, L.PeriodAction, L.Processing INTO v_AD_Client_ID, p_Organization, p_Calendar, p_IsRecursive, p_Year, p_YearName, p_PeriodNO, p_DocBaseType, p_PeriodAction, p_Processing FROM C_PeriodControl_Log L, C_Year WHERE L.C_PeriodControl_Log_ID=v_Record_ID_Log AND C_Year.C_Year_Id = L.C_Year_Id; IF (p_Processing='N') THEN UPDATE C_PeriodControl_Log SET Processing='Y' WHERE C_PeriodControl_Log_ID=v_Record_ID_Log; -- Action: Open if not permanently closed IF(p_PeriodAction='O') THEN SELECT COUNT(DISTINCT C_YEAR.YEAR) INTO v_Count2 FROM C_PERIOD, C_PERIODCONTROL, C_YEAR WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_YEAR_ID=C_YEAR.C_YEAR_ID AND C_PERIODCONTROL.PERIODSTATUS IN ('C') AND C_YEAR.YEAR>p_YearName AND C_PERIODCONTROL.AD_CLIENT_ID = v_AD_Client_ID AND C_YEAR.C_CALENDAR_ID = p_Calendar; IF (v_Count2>=1) THEN RAISE EXCEPTION '%', '@FeatureYearClosed@'; --OBTG:-20000-- END IF; IF (p_IsRecursive='N') THEN FOR Cur_Document IN (SELECT C_PERIODCONTROL_ID FROM C_PERIODCONTROL, C_PERIOD WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_Year_ID=p_Year AND C_PERIODCONTROL.AD_Org_ID=p_Organization AND C_PERIOD.EndDate<=(SELECT EndDate FROM C_PERIOD WHERE C_Period.C_Period_ID=p_PeriodNO) AND C_PERIODCONTROL.DocBaseType LIKE COALESCE(p_DocBaseType, '%') ) LOOP v_Record_ID:=Cur_Document.C_PERIODCONTROL_ID; UPDATE C_PeriodControl SET PeriodStatus='O' WHERE C_PeriodControl_ID=v_Record_ID AND PeriodStatus<>'P'; END LOOP; ELSIF (p_IsRecursive='Y') THEN FOR Cur_Document IN (SELECT C_PERIODCONTROL_ID FROM C_PERIODCONTROL, C_PERIOD WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_Year_ID=p_Year AND C_PERIODCONTROL.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Org WHERE AD_ISORGINCLUDED(ad_org.ad_org_id, p_Organization, ad_org.ad_client_id)<>-1) AND C_PERIOD.EndDate<=(SELECT EndDate FROM C_PERIOD WHERE C_Period.C_Period_ID=p_PeriodNO) AND C_PERIODCONTROL.DocBaseType LIKE COALESCE(p_DocBaseType, '%') ) LOOP v_Record_ID:=Cur_Document.C_PERIODCONTROL_ID; UPDATE C_PeriodControl SET PeriodStatus='O' WHERE C_PeriodControl_ID=v_Record_ID AND PeriodStatus<>'P'; END LOOP; END IF; -- Action: Close if not permanently closed ELSIF(p_PeriodAction='C') THEN SELECT COUNT(DISTINCT C_YEAR.YEAR) INTO v_Count FROM C_PERIOD, C_PERIODCONTROL, C_YEAR WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_YEAR_ID=C_YEAR.C_YEAR_ID AND C_PERIODCONTROL.PERIODSTATUS IN ('N','O') AND C_YEAR.YEAR=1) THEN RAISE EXCEPTION '%', '@YearNotClose@'; --OBTG:-20000-- END IF; IF (p_IsRecursive='Y') THEN FOR Cur_Document IN (SELECT C_PERIODCONTROL_ID FROM C_PERIODCONTROL, C_PERIOD WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_Year_ID=p_Year AND C_PERIODCONTROL.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Org WHERE AD_ISORGINCLUDED(ad_org.ad_org_id, p_Organization, ad_org.ad_client_id)<>-1) AND C_PERIOD.EndDate<=(SELECT EndDate FROM C_PERIOD WHERE C_Period.C_Period_ID=p_PeriodNO) AND C_PERIODCONTROL.DocBaseType LIKE COALESCE(p_DocBaseType, '%') ) LOOP v_Record_ID:=Cur_Document.C_PERIODCONTROL_ID; UPDATE C_PeriodControl SET PeriodStatus='C' WHERE C_PeriodControl_ID=v_Record_ID AND PeriodStatus<>'P'; END LOOP; ELSIF (p_IsRecursive='N') THEN FOR Cur_Document IN (SELECT C_PERIODCONTROL_ID FROM C_PERIODCONTROL, C_PERIOD WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_Year_ID=p_Year AND C_PERIODCONTROL.AD_Org_ID=p_Organization AND C_PERIOD.EndDate<=(SELECT EndDate FROM C_PERIOD WHERE C_Period.C_Period_ID=p_PeriodNO) AND C_PERIODCONTROL.DocBaseType LIKE COALESCE(p_DocBaseType, '%') ) LOOP v_Record_ID:=Cur_Document.C_PERIODCONTROL_ID; UPDATE C_PeriodControl SET PeriodStatus='C' WHERE C_PeriodControl_ID=v_Record_ID AND PeriodStatus<>'P'; END LOOP; END IF; -- Action: Permanently Close ELSIF(p_PeriodAction='P') THEN IF (p_IsRecursive='Y') THEN FOR Cur_Document IN (SELECT C_PERIODCONTROL_ID FROM C_PERIODCONTROL, C_PERIOD WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_Year_ID=p_Year AND C_PERIODCONTROL.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Org WHERE AD_ISORGINCLUDED(ad_org.ad_org_id, p_Organization, ad_org.ad_client_id)<>-1) AND C_PERIOD.EndDate<=(SELECT EndDate FROM C_PERIOD WHERE C_Period.C_Period_ID=p_PeriodNO) AND C_PERIODCONTROL.DocBaseType LIKE COALESCE(p_DocBaseType, '%') ) LOOP v_Record_ID:=Cur_Document.C_PERIODCONTROL_ID; UPDATE C_PeriodControl SET PeriodStatus='P' WHERE C_PeriodControl_ID=v_Record_ID; END LOOP; ELSIF (p_IsRecursive='N') THEN FOR Cur_Document IN (SELECT C_PERIODCONTROL_ID FROM C_PERIODCONTROL, C_PERIOD WHERE C_PERIODCONTROL.C_PERIOD_ID=C_PERIOD.C_PERIOD_ID AND C_PERIOD.C_Year_ID=p_Year AND C_PERIODCONTROL.AD_Org_ID=p_Organization AND C_PERIOD.EndDate<=(SELECT EndDate FROM C_PERIOD WHERE C_Period.C_Period_ID=p_PeriodNO) AND C_PERIODCONTROL.DocBaseType LIKE COALESCE(p_DocBaseType, '%') ) LOOP v_Record_ID:=Cur_Document.C_PERIODCONTROL_ID; UPDATE C_PeriodControl SET PeriodStatus='P' WHERE C_PeriodControl_ID=v_Record_ID; END LOOP; END IF; END IF; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; -- Update C_PeriodControl_Log UPDATE C_PeriodControl_Log SET Processing='N', Processed='Y' WHERE C_PeriodControl_Log_ID=v_Record_ID_Log; ELSE RAISE EXCEPTION '%', '@OtherProcessActive@'; --OBTG:-20000-- END IF; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; END ; $_$ LANGUAGE plpgsql; IDROP FUNCTION public.c_period_process(p_pinstance_id character varying); publictadfalse23416R125595496c_period_trg()FUNCTIONa CREATE FUNCTION c_period_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Fill Period Control */ v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; CUR_DocType RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; FOR CUR_DocType IN (SELECT Value , a.AD_Org_ID AS Organization FROM AD_Ref_List , (SELECT o.AD_Org_ID FROM AD_Org o WHERE o.ISREADY='Y' AND o.ISPERIODCONTROLALLOWED='Y' and exists (SELECT 1 FROM C_Year, c_calendar, ad_org WHERE C_Year.c_calendar_id = c_calendar.c_calendar_id and c_calendar.c_calendar_id = ad_org.c_calendar_id and C_Year.C_Year_ID=new.C_Year_ID and ad_org.ad_org_id = ad_org_getcalendarowner(o.AD_ORG_ID)) ) a WHERE AD_Reference_ID='183' ORDER BY 1) LOOP SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_PeriodControl', new.AD_Client_ID) ; INSERT INTO C_PeriodControl ( C_PeriodControl_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Period_ID, DocBaseType, PeriodStatus, PeriodAction, Processing ) VALUES ( v_NextNo, new.AD_Client_ID, CUR_DocType.Organization, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', new.C_Period_ID, CUR_DocType.Value, 'N', 'N', NULL ) ; -- NeverOpened, NoAction END LOOP; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; %DROP FUNCTION public.c_period_trg(); publictadfalse23416S125595498c_period_trg2()FUNCTIONCREATE FUNCTION c_period_trg2() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Calculate End Date */ v_DateNull TIMESTAMP := TO_DATE('01-01-1900','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF NOT((COALESCE(old.StartDate, v_DateNull) <> COALESCE(NEW.StartDate, v_DateNull))) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; -- UPDATE C_Period SET EndDate= ADD_MONTHS(TRUNC(StartDate, 'MM'), 1) -1; new.EndDate:= ADD_MONTHS(TRUNC(new.StartDate, 'MM'), 1) -1; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; &DROP FUNCTION public.c_period_trg2(); publictadfalse23416125536737*c_periodcontrol_process(character varying)FUNCTION5CREATE FUNCTION c_periodcontrol_process(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_PeriodControl_Process.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Opens/Close Period Control * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Variables v_PeriodAction C_PeriodControl.PeriodAction%TYPE; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; v_ResultStr:='ReadingAction'; SELECT PeriodAction INTO v_PeriodAction FROM C_PeriodControl WHERE C_PeriodControl_ID=v_Record_ID FOR UPDATE; --OBTG: OF PeriodStatus-- v_ResultStr:='UpdatingStatus'; -- Action: Open if not permanently closed IF(v_PeriodAction='O') THEN UPDATE C_PeriodControl SET PeriodStatus='O', PeriodAction='N' WHERE C_PeriodControl_ID=v_Record_ID AND PeriodStatus<>'P'; -- Action: Close if not permanently closed ELSIF(v_PeriodAction='C') THEN UPDATE C_PeriodControl SET PeriodStatus='C', PeriodAction='N' WHERE C_PeriodControl_ID=v_Record_ID AND PeriodStatus<>'P'; -- Action: Permanently Close ELSIF(v_PeriodAction='P') THEN UPDATE C_PeriodControl SET PeriodStatus='P', PeriodAction='N' WHERE C_PeriodControl_ID=v_Record_ID; END IF; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; PDROP FUNCTION public.c_periodcontrol_process(p_pinstance_id character varying); publictadfalse23416125536738%c_project_generate(character varying)FUNCTION*CREATE FUNCTION c_project_generate(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Project_Generate.sql,v 1.4 2003/05/26 22:31:16 jjanke Exp $ *** * Title: Generate Standard Order from Project * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_M_Warehouse_ID VARCHAR(32); --OBTG:VARCHAR2-- -- v_DocumentNo VARCHAR(40) ; --OBTG:VARCHAR2-- -- FINISH_PROCESS BOOLEAN:=FALSE; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; IF(Cur_Parameter.ParameterName='M_Warehouse_ID') THEN v_M_Warehouse_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' M_Warehouse_ID=' || v_M_Warehouse_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; DECLARE --TYPE RECORD IS REFCURSOR; CUR_Project RECORD; CUR_PLines RECORD; v_C_Order_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_C_DocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_NextNo VARCHAR(32) ; --OBTG:VARCHAR2-- v_M_PriceList_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_C_PaymentTerm_ID VARCHAR(32) ; --OBTG:VARCHAR2-- -- v_Line VARCHAR(32) ; --OBTG:VARCHAR2-- v_PriceList NUMERIC; v_PriceLimit NUMERIC; v_C_UOM_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_C_Tax_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Discount NUMERIC; v_PriceStd NUMERIC; BEGIN FOR CUR_Project IN (SELECT * FROM C_PROJECT WHERE C_Project_ID=v_Record_ID) LOOP v_ResultStr:='NullTest'; IF CUR_Project.C_BPARTNER_ID IS NULL THEN RAISE EXCEPTION '%', '@NoprojectBusinesspartner@'; --OBTG:-20000-- /* Eliminado a peticion de Huesker ELSIF Cur_SO.AD_USER_ID IS NULL THEN v_Message := 'ContactNotFound'; v_Result := 0; FINISH_PROCESS := true; EXIT; */ ELSIF CUR_Project.C_BPARTNER_LOCATION_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @ShiptoNotdefined@'; --OBTG:-20000-- ELSIF CUR_Project.C_PAYMENTTERM_ID IS NULL THEN RAISE EXCEPTION '%', '@ThebusinessPartner@'||' '||' @PaymenttermNotdefined@'; --OBTG:-20000-- ELSIF CUR_Project.C_CURRENCY_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectCurrencyNotFound@'; --OBTG:-20000-- ELSIF CUR_Project.AD_User_ID IS NULL THEN RAISE EXCEPTION '%', '@ProjectNotcontact@'; --OBTG:-20000-- ELSIF CUR_Project.DateContract IS NULL THEN RAISE EXCEPTION '%', '@Projectnotcontractdate@'; --OBTG:-20000-- END IF; v_ResultStr:='NoDocType'; v_C_DocType_ID:=Ad_Get_Doctype(CUR_Project.AD_Client_ID, CUR_Project.AD_Org_ID, 'SOO', 'SO') ; -- v_ResultStr:='NoPriceList'; SELECT M_PriceList_ID INTO v_M_PriceList_ID FROM M_PRICELIST_VERSION WHERE M_PriceList_Version_ID=CUR_Project.M_PriceList_Version_ID; -- SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_C_DocType_ID, CUR_Project.AD_Client_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Order', CUR_Project.AD_Client_ID, 'Y') ; END IF; SELECT * INTO v_C_Order_ID FROM Ad_Sequence_Next('C_Order', CUR_Project.AD_Client_ID) ; v_ResultStr:='InsertingHeader'; INSERT INTO C_ORDER ( C_Order_ID, DocumentNo, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, IsSOTrx, DocStatus, DocAction, Processed, C_DocType_ID, C_DocTypeTarget_ID, Description, SalesRep_ID, DateOrdered, DateAcct, POReference, C_BPartner_ID, BillTo_ID, C_BPartner_Location_ID, AD_User_ID, C_Currency_ID, C_PaymentTerm_ID, PaymentRule, InvoiceRule, DeliveryRule, DeliveryViaRule, FreightCostRule, PriorityRule, M_Warehouse_ID, M_PriceList_ID, C_Project_ID, C_Campaign_ID ) VALUES ( v_C_Order_ID, v_DocumentNo, CUR_Project.AD_Client_ID, CUR_Project.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', 'Y', 'DR', 'CO', 'N', v_C_DocType_ID, v_C_DocType_ID, CUR_Project.Description, CUR_Project.AD_User_ID, CUR_Project.DateContract, CUR_Project.DateContract, CUR_Project.POReference, CUR_Project.C_BPartner_ID, CUR_Project.C_BPartner_Location_ID, CUR_Project.C_BPartner_Location_ID, CUR_Project.AD_User_ID, CUR_Project.C_Currency_ID, CUR_Project.C_PaymentTerm_ID, 'P', 'D', 'A', 'P', 'I', '5', -- OnCredit, afterDelivery, Availability, Pickup, Included, v_M_Warehouse_ID, v_M_PriceList_ID, CUR_Project.C_Project_ID, CUR_Project.C_Campaign_ID ) ; -- v_Line:=0; FOR CUR_PLines IN (SELECT * FROM C_PROJECTLINE WHERE C_Project_ID=v_Record_ID AND IsActive='Y' ORDER BY Line ) LOOP v_ResultStr:='GettingPrice'; SELECT COALESCE(MAX(PriceList), 0), COALESCE(MAX(PriceLimit), 0), COALESCE(MAX(PriceStd), 0) INTO v_PriceList, v_PriceLimit, v_PriceStd FROM M_PRODUCTPRICE WHERE M_Product_ID=CUR_PLines.M_Product_ID AND M_PriceList_Version_ID=CUR_Project.M_PriceList_Version_ID; IF(v_PriceList=0) THEN v_Discount:=0; ELSE v_Discount:=ROUND((v_PriceList-CUR_PLines.PlannedPrice) / v_PriceList*100, 2) ; END IF; -- Get UOM - Tax -- VERY simplified, but should work in most cases v_ResultStr:='NoUOM+Tax'; SELECT COALESCE(MAX(C_UOM_ID), '100'), MAX(C_Tax_ID) -- UOM 100=EA INTO v_C_UOM_ID, v_C_Tax_ID FROM M_PRODUCT p, C_TAX t WHERE P.C_TaxCategory_ID=t.C_TaxCategory_ID AND P.M_Product_ID=CUR_PLines.M_Product_ID ORDER BY t.IsDefault DESC; IF(v_C_Tax_ID IS NULL) THEN v_ResultStr:='NoTax'; SELECT C_Tax_ID INTO v_C_Tax_ID FROM C_TAX WHERE IsDefault='Y' AND AD_Client_ID=CUR_PLines.AD_Client_ID; END IF; -- SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_OrderLine', CUR_Project.AD_Client_ID) ; v_ResultStr:='InsertingLine'; v_Line:=v_Line + 10; INSERT INTO C_ORDERLINE ( C_OrderLine_ID, C_Order_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Line, C_BPartner_ID, C_BPartner_Location_ID, DateOrdered, Description, M_Warehouse_ID, M_Product_ID, DirectShip, C_UOM_ID, C_Currency_ID, QtyOrdered, PriceList, PriceActual, PriceLimit, LineNetAmt, Discount, C_Tax_ID, --MODIFIED BY F.IRIAZABAL QuantityOrder, M_Product_UOM_ID, PriceStd ) VALUES ( v_NextNo, v_C_Order_ID, CUR_PLines.AD_Client_ID, CUR_PLines.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_Line, CUR_Project.C_BPartner_ID, CUR_Project.C_BPartner_Location_ID, CUR_Project.DateContract, CUR_PLines.Description, v_M_Warehouse_ID, CUR_PLines.M_Product_ID, 'N', v_C_UOM_ID, CUR_Project.C_Currency_ID, CUR_PLines.PlannedQty, v_PriceList, M_Get_Offers_Price(CUR_Project.DateContract, CUR_Project.C_BPartner_ID, CUR_PLines.M_Product_ID, v_PriceStd, CUR_PLines.PlannedQty,v_M_PriceList_ID), v_PriceLimit, ROUND(CUR_PLines.PlannedQty*M_Get_Offers_Price(CUR_Project.DateContract, CUR_Project.C_BPartner_ID, CUR_PLines.M_Product_ID, v_PriceStd, CUR_PLines.PlannedQty,v_M_PriceList_ID), 2), v_Discount, v_C_Tax_ID, --MODIFIED BY F.IRIAZABAL CUR_PLines.PlannedQty, v_C_UOM_ID, CUR_PLines.PlannedPrice) ; END LOOP; -- ProjectLine v_Message:='OrderCreated '; END LOOP; -- Project -- END; IF(NOT FINISH_PROCESS) THEN v_Message:='@InvoiceDocumentno@ = ' || v_DocumentNo; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; KDROP FUNCTION public.c_project_generate(p_pinstance_id character varying); publictadfalse23416X125595508c_project_trg()FUNCTIONCREATE FUNCTION c_project_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Project_Trg.sql,v 1.3 2002/10/23 03:16:57 jjanke Exp $ *** * Title: Project new record * Description: * - create default accounts * - create treenode ************************************************************************/ v_Tree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Parent_ID VARCHAR(32); --OBTG:VARCHAR2-- -- --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (TG_OP = 'INSERT') THEN FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) ) LOOP -- Account INSERT INTO C_Project_Acct ( C_Project_Acct_Id, C_Project_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, PJ_Asset_Acct, PJ_WIP_Acct ) VALUES ( get_uuid(), new.C_Project_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.PJ_Asset_Acct, Cur_Defaults.PJ_WIP_Acct ) ; END LOOP; -- Create TreeNode -- -- get AD_Tree_ID + ParentID SELECT c.AD_Tree_Project_ID, n.Node_ID INTO v_Tree_ID, v_Parent_ID FROM AD_ClientInfo c, AD_TreeNode n WHERE c.AD_Tree_Project_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=new.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||xTree_ID||' Node='||:new.C_Project_ID||' Parent='||xParent_ID); -- Insert into TreeNode INSERT INTO AD_TreeNode ( AD_TreeNode_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, v_Tree_ID, new.C_Project_ID, v_Parent_ID,( CASE new.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; ELSIF (TG_OP = 'UPDATE') THEN UPDATE C_PROJECT_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE C_PROJECT_ID = new.C_PROJECT_ID; END IF; -- Summary Nodes first IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'C_Project InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20001-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; &DROP FUNCTION public.c_project_trg(); publictadfalse23416Y125595511c_project_trg2()FUNCTION CREATE FUNCTION c_project_trg2() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Project_Trg2.sql,v 1.2 2003/05/26 22:31:15 jjanke Exp $ *** * Title: Recalculate Totals * Description: ************************************************************************/ v_Count NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COUNT(*) INTO v_Count FROM C_PROJECTLINE WHERE C_Project_ID=NEW.C_Project_ID; IF(v_Count > 0) THEN -- Update Summary Info SELECT SUM(PlannedAmt), SUM(PlannedQty), SUM(PlannedMarginAmt), SUM(CommittedAmt), SUM(CommittedQty), SUM(InvoicedAmt), SUM(InvoicedQty), (SUM(COALESCE(PlannedPrice, 0) *PlannedQty)) INTO NEW.PlannedAmt, NEW.PlannedQty, NEW.PlannedMarginAmt, NEW.CommittedAmt, NEW.CommittedQty, NEW.InvoicedAmt, NEW.InvoicedQty, NEW.PlannedPOAmt FROM C_PROJECTLINE WHERE C_Project_ID=NEW.C_Project_ID; END IF; /* SELECT MAX(UPDATED) INTO NEW.LASTPLANNEDPROPOSALDATE FROM C_PROJECTPROPOSALTASK T WHERE EXISTS (SELECT 1 FROM C_PROJECTPROPOSAL P WHERE P.C_PROJECTPROPOSAL_ID=T.C_PROJECTPROPOSAL_ID AND P.C_PROJECT_ID=NEW.C_PROJECT_ID);*/ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_project_trg2(); publictadfalse23416Z125595513c_project_trg3()FUNCTIONCREATE FUNCTION c_project_trg3() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Count NUMERIC; v_Tree_ID VARCHAR(32); --OBTG:varchar2-- v_Parent_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT c.AD_Tree_Project_ID, n.Node_ID INTO v_Tree_ID, v_Parent_ID FROM AD_ClientInfo c, AD_TreeNode n WHERE c.AD_Tree_Project_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=old.AD_Client_ID; IF(v_Count=0) THEN DELETE FROM AD_TREENODE WHERE AD_TREE_ID=v_Tree_ID AND NODE_ID=OLD.C_Project_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.c_project_trg3(); publictadfalse23416125536744 c_project_won(character varying)FUNCTIONCREATE FUNCTION c_project_won(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_ProjectProposalLine RECORD; -- Parameter Variables v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_cProjectId VARCHAR(32); --OBTG:varchar2-- v_cBPartnerId VARCHAR(32); --OBTG:varchar2-- v_cBPartnerLocationId VARCHAR(32); --OBTG:varchar2-- v_adUserId VARCHAR(32); --OBTG:varchar2-- v_billToId VARCHAR(32); --OBTG:varchar2-- v_paymentRule VARCHAR(60) ; v_cPaymenttermId VARCHAR(32); --OBTG:varchar2-- v_projectStatus VARCHAR(60) ; v_value VARCHAR(40) ; --OBTG:NVARCHAR2-- v_Accountno VARCHAR(20) ; --OBTG:NVARCHAR2-- -- Copy BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; --Update project header SELECT C_PROJECT.C_Project_ID, ProjectStatus, VALUE INTO v_cProjectId, v_projectStatus, v_value FROM C_PROJECT, C_PROJECTPROPOSAL WHERE C_PROJECT.C_Project_ID=C_PROJECTPROPOSAL.C_Project_ID AND C_PROJECTPROPOSAL.C_ProjectProposal_ID=v_Record_ID; IF(v_projectStatus='OP') THEN SELECT C_PROJECTPROPOSAL.C_BPartner_ID, C_PROJECTPROPOSAL.C_BPartner_Location_ID, C_PROJECTPROPOSAL.AD_User_ID, MAX(C_BPARTNER_LOCATION.C_BPartner_Location_ID), C_PROJECTPROPOSAL.PaymentRule, C_PROJECTPROPOSAL.C_Paymentterm_ID INTO v_cBPartnerId, v_cBPartnerLocationId, v_adUserId, v_billToId, v_paymentRule, v_cPaymenttermId FROM C_PROJECTPROPOSAL, C_BPARTNER LEFT JOIN C_BPARTNER_LOCATION ON C_BPARTNER.C_BPartner_ID=C_BPARTNER_LOCATION.C_BPartner_ID WHERE C_PROJECTPROPOSAL.C_BPartner_ID=C_BPARTNER.C_Bpartner_ID AND COALESCE(C_BPARTNER_LOCATION.IsBillTo, 'Y')='Y' AND C_PROJECTPROPOSAL.C_ProjectProposal_ID=v_Record_ID GROUP BY C_PROJECTPROPOSAL.C_BPartner_ID, C_PROJECTPROPOSAL.C_BPartner_Location_ID, C_PROJECTPROPOSAL.AD_User_ID, C_PROJECTPROPOSAL.PaymentRule, C_PROJECTPROPOSAL.C_Paymentterm_ID; IF(v_cProjectId IS NOT NULL) THEN v_ResultStr:='Update header'; DECLARE Cur_CBPBancAcct RECORD; BEGIN FOR Cur_CBPBancAcct IN (SELECT MAX(ACCOUNTNO) AS Accountno FROM C_BP_BANKACCOUNT WHERE C_BPARTNER_ID=v_cBPartnerId AND ISACTIVE='Y' ) LOOP v_Accountno:=Cur_CBPBancAcct.Accountno; EXIT; END LOOP; END; UPDATE C_PROJECT SET Updated=TO_DATE(NOW()), UpdatedBy='0', C_BPartner_ID=v_cBPartnerId, C_BPartner_Location_ID=v_cBPartnerLocationId, --Salesrep_ID = v_adUserId, BillTo_ID=v_billToId, PaymentRule=v_paymentRule, C_Paymentterm_ID=v_cPaymenttermId, accountno=v_Accountno WHERE C_Project_ID=v_cProjectId; --Update, insert or delete project lines v_ResultStr:='Update Lines'; DELETE FROM C_PROJECTLINE WHERE C_PROJECTLINE.C_Project_ID=v_cProjectId; FOR Cur_ProjectProposalLine IN (SELECT C_PROJECTPROPOSALLINE.AD_Client_ID, C_PROJECTPROPOSALLINE.AD_Org_ID, C_PROJECTPROPOSALLINE.M_Product_ID, C_PROJECTPROPOSALLINE.Qty, C_PROJECTPROPOSALLINE.Price, C_PROJECTPROPOSALLINE.Product_Value, C_PROJECTPROPOSALLINE.Product_Name, C_PROJECTPROPOSALLINE.Product_Description, M_PRODUCT.M_Product_Category_ID, C_PROJECTPROPOSALLINE.LineNo FROM C_PROJECTPROPOSALLINE, M_PRODUCT WHERE C_PROJECTPROPOSALLINE.M_Product_ID=M_PRODUCT.M_Product_ID AND C_PROJECTPROPOSALLINE.C_ProjectProposal_ID=v_Record_ID ) LOOP SELECT * INTO v_NextNo FROM Ad_Sequence_Next('C_ProjectLine', Cur_ProjectProposalLine.AD_Client_ID) ; INSERT INTO C_PROJECTLINE ( C_PROJECTLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_PROJECT_ID, LINE, DESCRIPTION, PLANNEDQTY, PLANNEDPRICE, PLANNEDAMT, PLANNEDMARGINAMT, COMMITTEDAMT, M_PRODUCT_ID, M_PRODUCT_CATEGORY_ID, INVOICEDAMT, INVOICEDQTY, COMMITTEDQTY, C_PROJECTISSUE_ID, C_ORDER_ID, C_ORDERPO_ID, ISPRINTED, PROCESSED, DOPRICING, PLANNEDPOPRICE, PRODUCT_VALUE, C_TAX_ID, PRODUCT_NAME, PRODUCT_DESCRIPTION ) VALUES ( v_NextNo, Cur_ProjectProposalLine.AD_Client_ID, Cur_ProjectProposalLine.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_cProjectId, Cur_ProjectProposalLine.LineNo, '', Cur_ProjectProposalLine.Qty, Cur_ProjectProposalLine.Price, Cur_ProjectProposalLine.Qty*Cur_ProjectProposalLine.Price, 0, 0, Cur_ProjectProposalLine.M_Product_ID, Cur_ProjectProposalLine.M_Product_Category_ID, 0, 0, 0, NULL, NULL, NULL, 'N', 'N', 'N', NULL, Cur_ProjectProposalLine.Product_Value, NULL, Cur_ProjectProposalLine.Product_Name, Cur_ProjectProposalLine.Product_Description ) ; END LOOP; v_Message:='@Project@ ' || v_value || ' @awarded@'; END IF; ELSE RAISE EXCEPTION '%', '@Projectclose@'; --OBTG:-20000-- END IF; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; FDROP FUNCTION public.c_project_won(p_pinstance_id character varying); publictadfalse23416T125595500c_projectline_trg()FUNCTION CREATE FUNCTION c_projectline_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_ProjectLine_Trg.sql,v 1.3 2003/09/05 04:58:07 jjanke Exp $ *** * Title: Update Planned Line Totals * Description: * Set Line PlannedAmt, PlannedMarginAmt ************************************************************************/ v_PriceLimit NUMERIC:=NULL; v_PriceStd NUMERIC:=NULL; v_PlannedMargin NUMERIC:=NULL; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Calculate PlannedAmt IF(new.PlannedQty <> 0 AND new.PlannedPrice <> 0) THEN new.PlannedAmt:=new.PlannedQty * new.PlannedPrice; END IF; -- Get Margin from Product IF(new.M_Product_ID IS NOT NULL AND new.PlannedPrice <> 0) THEN SELECT COALESCE(MAX(PriceLimit), 0), COALESCE(MAX(PriceStd), 0) INTO v_PriceLimit, v_PriceStd FROM M_ProductPrice WHERE M_Product_ID=new.M_Product_ID AND M_PriceList_Version_ID= ( SELECT M_PriceList_Version_ID FROM C_Project WHERE C_Project_ID=new.C_Project_ID ) ; IF(v_PriceLimit <> 0) THEN new.PlannedMarginAmt:=new.PlannedQty *(new.PlannedPrice - v_PriceLimit) ; END IF; -- Get Margin from Product Category ELSIF(new.M_Product_Category_ID IS NOT NULL AND new.PlannedPrice <> 0) THEN SELECT COALESCE(MAX(PlannedMargin), 0) INTO v_PlannedMargin FROM M_Product_Category WHERE M_Product_Category_ID=new.M_Product_Category_ID; IF(v_PlannedMargin <> 0) THEN new.PlannedMarginAmt:=new.PlannedAmt * v_PlannedMargin; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; *DROP FUNCTION public.c_projectline_trg(); publictadfalse23416U125595502c_projectline_trg2()FUNCTIONCREATE FUNCTION c_projectline_trg2() RETURNS trigger AS $_$ DECLARE BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_ProjectLine_Trg2.sql,v 1.2 2003/05/26 22:31:15 jjanke Exp $ *** * Title: Trigger recalculation of all projects * Description: * Where lines were updated in the last minute ************************************************************************/ UPDATE C_Project SET Updated=TO_DATE(NOW()) WHERE EXISTS ( SELECT * FROM C_ProjectLine l WHERE C_Project.C_Project_ID=l.C_Project_ID AND Updated > TO_DATE(NOW()) -1/1440 ) ; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; +DROP FUNCTION public.c_projectline_trg2(); publictadfalse23416V125595504c_projectphase_trg()FUNCTIONCREATE FUNCTION c_projectphase_trg() RETURNS trigger AS $$ DECLARE /* ************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************ */ v_projecttaskid VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (NEW.ISCOMPLETE = 'Y') THEN SELECT MAX(PT.C_PROJECTTASK_ID) INTO v_projecttaskid FROM C_PROJECTTASK PT WHERE PT.C_PROJECTPHASE_ID=NEW.C_PROJECTPHASE_ID AND PT.ISCOMPLETE='N'; IF (v_projecttaskid IS NOT NULL) THEN UPDATE C_PROJECTTASK SET ISCOMPLETE='Y' WHERE C_PROJECTPHASE_ID=NEW.C_PROJECTPHASE_ID AND ISCOMPLETE='N'; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.c_projectphase_trg(); publictadfalse23416W125595506c_projectproposaltask_trg()FUNCTIONSCREATE FUNCTION c_projectproposaltask_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Project VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT C_Project_ID INTO v_Project FROM C_PROJECTPROPOSAL WHERE C_ProjectProposal_ID=NEW.C_ProjectProposal_ID; UPDATE C_PROJECT SET LASTPLANNEDPROPOSALDATE=NEW.UPDATED WHERE C_PROJECT_ID=v_Project; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 2DROP FUNCTION public.c_projectproposaltask_trg(); publictadfalse234161255367507c_remittance_post(character varying, character varying)FUNCTION]CREATE FUNCTION c_remittance_post(p_pinstance_id character varying, p_remittance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Processed VARCHAR(60) ; v_Posted VARCHAR(60) ; v_Processing CHAR(1); v_Currency VARCHAR(32); --OBTG:VARCHAR2-- v_Date TIMESTAMP; v_CashBook_ISO_Code VARCHAR(10) ; v_Record_Description VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_SettlementDocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_DPManagementDocType_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Debt_Payment_ID VARCHAR(32) ; --OBTG:VARCHAR2-- --Addesd by PSarobe 12062007 v_Remittanceline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_documentno_Settlement VARCHAR(40); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_Cancel_Processed VARCHAR(60); v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_Bankstatementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_CashLine_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ispaid CHAR(1); v_Settlement_Cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- v_is_included NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_RemittanceLines RECORD; -- Parameter -- Parameter Variables v_Aux NUMERIC; v_CanceledNotChargeAmt NUMERIC:=0; v_DateTrx TIMESTAMP; v_DueDate TIMESTAMP; v_Status_to VARCHAR(60) ; v_Consolidate VARCHAR(60) ; v_SettlementID VARCHAR(32) ; --OBTG:varchar2-- v_DocumentNo VARCHAR(40); v_DPMId VARCHAR(32); --OBTG:varchar2-- v_DPId VARCHAR(32); --OBTG:varchar2-- v_DPMLineId VARCHAR(32); --OBTG:varchar2-- v_GeneratedAmt NUMERIC; v_PaymetRule VARCHAR(2) ; --OBTG:VARCHAR2-- v_IsReceipt CHAR(1) ; v_BankPartner VARCHAR(32); --OBTG:varchar2-- v_vSettlementId VARCHAR(32); --OBTG:varchar2-- v_vDPManagementID VARCHAR(32); --OBTG:varchar2-- v_BankAccountID VARCHAR(32); --OBTG:varchar2-- v_line NUMERIC; v_remittanceLineCount NUMERIC; FINISH_PROCESS BOOLEAN:=FALSE; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; ELSE RAISE NOTICE '%','--<>' ; v_Record_ID:=p_Remittance_ID; END IF; BEGIN --BODY SELECT Processing, r.UpdatedBy, r.AD_Client_ID, r.AD_Org_Id, Processed, DateTrx, DueDate, rt.Status_To, rt.CONSOLIDATE, rt.PAYMENTRULECONSOLIDATED, r.C_SETTLEMENT_ID, r.C_DP_MANAGEMENT_ID, r.C_BANKACCOUNT_ID INTO v_Processing, v_AD_User_ID, v_AD_Client_ID, v_AD_Org_ID, v_processed, v_DateTrx, v_DueDate, v_Status_to, v_Consolidate, v_PaymetRule, v_vSettlementId, v_vDPManagementID, v_BankAccountID FROM C_REMITTANCE r, C_REMITTANCE_TYPE rt WHERE c_Remittance_ID=v_Record_ID AND r.c_Remittance_Type_id=rt.C_Remittance_Type_id; SELECT C_Currency_ID INTO v_Currency FROM C_REMITTANCE r, C_BANKACCOUNT a WHERE c_Remittance_ID=v_Record_Id AND r.C_BANKACCOUNT_ID=a.c_bankAccount_ID; -- check if there are any active remittance lines at all SELECT COUNT(*) INTO v_remittanceLineCount FROM C_REMITTANCELINE rl WHERE rl.c_remittance_id=v_Record_Id AND rl.isactive='Y'; IF(v_remittanceLineCount = 0) THEN RAISE EXCEPTION '%', '@C_REMITTANCE_POST_NO_LINES@'; --OBTG:-20000-- END IF; IF(v_Processing='Y') THEN RAISE EXCEPTION '%', '@OtherProcessActive@' ; --OBTG:-20000-- ELSE UPDATE C_REMITTANCE SET Processing = 'Y' WHERE C_Remittance_ID = v_Record_ID; END IF; IF ((NOT FINISH_PROCESS) AND v_Processed='Y') THEN /* * Checking Restrictions for unprocessing */ --Modified by PSarobe 12062007 SELECT COUNT(*), MAX(rl.line) INTO v_Aux, v_line FROM C_REMITTANCELINE rl, C_DEBT_PAYMENT dp, C_REMITTANCE r WHERE r.C_Remittance_ID=v_Record_ID AND rl.C_Remittance_ID=r.C_Remittance_ID AND rl.c_debt_payment_id=dp.c_debt_payment_id AND EXISTS (SELECT 1 FROM C_DP_MANAGEMENTLINE WHERE C_DP_Management_ID = r.C_DP_Management_ID AND C_Debt_Payment_ID = dp.C_Debt_Payment_ID AND Status_To != dp.Status); IF v_Aux!=0 THEN RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'WrongCurrentFinalStatusDP' ; --OBTG:-20000-- END IF; IF NOT FINISH_PROCESS THEN -- Unprocessing... UPDATE C_REMITTANCE SET Processed='N' WHERE C_Remittance_ID=v_Record_ID; PERFORM C_DP_MANAGEMENT_POST(NULL, v_vDPManagementID) ; SELECT COUNT(*) INTO v_Aux FROM C_REMITTANCE r WHERE r.C_Remittance_ID=v_Record_ID AND C_SETTLEMENT_ID IS NOT NULL; IF v_Aux=1 THEN PERFORM C_SETTLEMENT_POST(NULL, v_vSettlementId) ; UPDATE C_REMITTANCELINE SET C_DEBT_PAYMENT_CANCELLED=NULL WHERE C_Remittance_ID=v_Record_ID; DELETE FROM C_DP_MANAGEMENTLINE WHERE C_DP_Management_ID=v_vDPManagementID AND C_Debt_Payment_ID IN (SELECT C_Debt_Payment_ID FROM C_DEBT_PAYMENT WHERE C_SETTLEMENT_GENERATE_ID=v_vSettlementId ) ; UPDATE C_REMITTANCE SET C_Settlement_ID=NULL WHERE C_Remittance_ID=v_Record_ID; DELETE FROM C_DEBT_PAYMENT WHERE C_SETTLEMENT_GENERATE_ID=v_vSettlementId; DELETE FROM C_SETTLEMENT WHERE C_Settlement_ID=v_vSettlementId; END IF; UPDATE C_REMITTANCE SET C_DP_Management_ID=NULL WHERE C_Remittance_ID=v_Record_ID; DELETE FROM C_DP_MANAGEMENTLINE WHERE C_DP_Management_ID=v_vDPManagementID; DELETE FROM C_DP_MANAGEMENT WHERE C_DP_Management_ID=v_vDPManagementID; END IF; v_Message:='@UnProcessedRemittance@'; FINISH_PROCESS:=TRUE; END IF; /* * Checking Restrictions */ IF(NOT FINISH_PROCESS) THEN -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_REMITTANCE, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_REMITTANCE.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_REMITTANCE.C_REMITTANCE_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_REMITTANCE', 'C_REMITTANCELINE', v_Record_ID, 'C_REMITTANCE_ID', 'C_REMITTANCE_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOC_PAYMENTS('C_REMITTANCE', 'C_REMITTANCELINE', v_Record_ID, 'C_REMITTANCE_ID', 'C_REMITTANCE_ID', 'C_DEBT_PAYMENT_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@PaymentsAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; IF v_Consolidate='Y' AND (v_PaymetRule IS NULL) THEN RAISE EXCEPTION '%', '@PaymentRuleNotDefined@'; --OBTG:-20000-- END IF; SELECT COUNT(*), MAX(rl.C_Remittanceline_Id) INTO v_Aux, v_Remittanceline_ID FROM C_REMITTANCELINE rl, C_DEBT_PAYMENT dp WHERE c_Remittance_ID=v_Record_ID AND rl.c_debt_payment_id=dp.c_debt_payment_id AND C_Debt_Payment_Status(dp.C_SETTLEMENT_CANCEL_ID, dp.CANCEL_PROCESSED, dp.GENERATE_PROCESSED, dp.IsPaid, dp.Isvalid, dp.C_CASHLINE_ID, dp.C_BANKSTATEMENTLINE_ID)!='P'; IF v_Aux!=0 THEN SELECT rl.line, dp.c_Bankstatementline_Id, dp.c_cashline_id, dp.c_settlement_cancel_id, dp.ispaid, dp.cancel_processed INTO v_line, v_Bankstatementline_ID, v_CashLine_ID, v_Settlement_Cancel_ID, v_ispaid, v_Cancel_Processed FROM C_REMITTANCELINE rl, C_DEBT_PAYMENT dp WHERE rl.c_debt_payment_id=dp.c_debt_payment_id AND rl.C_REMITTANCELINE_ID = v_Remittanceline_ID; IF v_Bankstatementline_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_BANKSTATEMENTLINE_ID = v_Bankstatementline_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||' '||'@ConciliatedDebtPaymentBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_CashLine_ID IS NOT NULL THEN SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_CASHLINE_ID = v_CashLine_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||' '||'@ConciliatedDebtPaymentCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; IF v_Cancel_Processed='Y' AND v_ispaid='N' THEN SELECT documentno, datetrx INTO v_documentno_Settlement, v_dateSettlement FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID = v_Settlement_Cancel_ID; RAISE EXCEPTION '%', '@Inline@'||v_line||' '||'@debtpayment@'||' '||'@ConciliatedDebtPaymentCancel@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF; END IF;--FINISH_PROCESS --Processing... IF(NOT FINISH_PROCESS) THEN IF v_Consolidate='Y' THEN --Create Settlement to insert debt payments v_SettlementDocType_ID:=Ad_Get_Doctype(v_AD_Client_ID, v_AD_Org_ID, TO_CHAR('STT')) ; SELECT * INTO v_SettlementID FROM Ad_Sequence_Next('C_Settlement', v_AD_Org_Id) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_SettlementDocType_ID, v_Record_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_Settlement', v_AD_Client_ID, 'Y') ; END IF; INSERT INTO C_SETTLEMENT ( C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE, C_DOCTYPE_ID, C_Currency_ID, ISGENERATED ) VALUES ( v_SettlementID, v_AD_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, '*RT*'||v_DocumentNo, v_dateTrx, v_dateTrx, 'C', v_SettlementDocType_ID, v_Currency, 'Y' ) ; --Create DPManagement v_DPManagementDocType_ID:=Ad_Get_Doctype(v_AD_Client_ID, v_AD_Org_ID, TO_CHAR('DPM')) ; SELECT * INTO v_DPMId FROM Ad_Sequence_Next('C_DP_Management', v_AD_Org_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DPManagementDocType_ID, v_Record_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_DP_Management', v_AD_Client_ID, 'Y') ; END IF; INSERT INTO C_DP_MANAGEMENT ( C_DP_MANAGEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, C_DOCTYPE_ID, DATEACCT, C_Currency_ID ) VALUES ( v_DPMId, v_ad_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_DocumentNo, v_DateTrx, v_DPManagementDocType_ID, v_DateTrx, v_Currency ) ; v_GeneratedAmt:=0; v_line:=0; SELECT b.C_BPartner_id INTO v_BankPartner FROM C_REMITTANCE r, C_BANKACCOUNT ba, C_BANK b WHERE r.C_Remittance_ID=v_Record_Id AND r.C_BankAccount_ID=ba.c_BankAccount_ID AND ba.C_Bank_ID=b.C_Bank_ID; FOR Cur_RemittanceLines IN (SELECT dp.C_DEBT_PAYMENT_ID, dp.AD_CLIENT_ID, dp.AD_ORG_ID, dp.ISACTIVE, dp.CREATED, dp.CREATEDBY, dp.UPDATED, dp.UPDATEDBY, dp.ISRECEIPT, dp.C_CURRENCY_ID, dp.PAYMENTRULE, dp.ISPAID, dp.AMOUNT, dp.DATEPLANNED, dp.ISMANUAL, dp.STATUS, dp.C_BPartner_id, dp.description, rl.C_REMITTANCELINE_ID FROM C_REMITTANCELINE rl, C_DEBT_PAYMENT dp WHERE C_Remittance_ID=v_Record_ID AND dp.C_Debt_Payment_id=rl.c_Debt_Payment_ID ) LOOP SELECT * INTO v_DPId FROM Ad_Sequence_Next('C_Debt_Payment', Cur_RemittanceLines.AD_Org_ID) ; INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_CURRENCY_ID, PAYMENTRULE, ISPAID, AMOUNT, DATEPLANNED, ISMANUAL, STATUS, C_SETTLEMENT_GENERATE_ID, isValid, c_BPartner_ID, Generate_Processed, Description, C_BANKACCOUNT_ID, status_initial ) VALUES ( v_DPID, Cur_RemittanceLines.ad_Client_Id, Cur_RemittanceLines.AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, Cur_RemittanceLines.ISRECEIPT, Cur_RemittanceLines.C_CURRENCY_ID, Cur_RemittanceLines.PAYMENTRULE, Cur_RemittanceLines.ISPAID, -Cur_RemittanceLines.AMOUNT, Cur_RemittanceLines.DATEPLANNED, 'N', Cur_RemittanceLines.STATUS, v_SettlementID, 'Y', v_BankPartner, 'Y', '*RT* '||Cur_RemittanceLines.description, v_BankAccountID, Cur_RemittanceLines.STATUS ) ; UPDATE C_REMITTANCELINE SET C_DEBT_PAYMENT_CANCELLED=v_DPID WHERE C_RemittanceLine_ID=Cur_RemittanceLines.c_RemittanceLine_id; /*v_line:=v_line + 10; SELECT * INTO v_DPMLineId FROM Ad_Sequence_Next('C_DP_ManagementLine', v_AD_Org_ID) ; INSERT INTO C_DP_MANAGEMENTLINE ( C_DP_MANAGEMENTLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_DP_MANAGEMENT_ID, STATUS_FROM, STATUS_TO, C_DEBT_PAYMENT_ID, LINE ) VALUES ( v_DPMLineId, v_ad_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_DPMId, Cur_RemittanceLines.Status, v_Status_To, v_DPId, v_line ) ;*/ v_line:=v_line + 10; SELECT * INTO v_DPMLineId FROM Ad_Sequence_Next('C_DP_ManagementLine', v_AD_Org_ID) ; INSERT INTO C_DP_MANAGEMENTLINE ( C_DP_MANAGEMENTLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_DP_MANAGEMENT_ID, STATUS_FROM, STATUS_TO, C_DEBT_PAYMENT_ID, LINE ) VALUES ( v_DPMLineId, v_aD_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_DPMId, Cur_RemittanceLines.Status, v_Status_To, Cur_RemittanceLines.c_Debt_Payment_ID, v_line ) ; --Calculate the total amount --v_GeneratedAmt := v_GeneratedAmt + i.Amount; END LOOP; SELECT COALESCE(SUM(C_Currency_Round( C_Currency_Convert(Amount, C_Currency_ID, v_Currency, v_dateTrx, NULL, v_aD_Client_Id, v_AD_Org_Id), v_Currency, NULL)), 0) INTO v_GeneratedAmt FROM C_Debt_Payment_V WHERE C_Settlement_Generate_ID=v_SettlementID AND isActive='Y' AND isManual='N'; --Post DPManagement PERFORM C_DP_MANAGEMENT_POST(NULL, v_DPMId) ; IF v_GeneratedAmt>0 THEN v_IsReceipt:='N'; ELSE v_IsReceipt:='Y'; END IF; --Generate total debpayemet for the bank SELECT * INTO v_DPId FROM Ad_Sequence_Next('C_Debt_Payment', v_AD_Org_ID) ; INSERT INTO C_DEBT_PAYMENT ( C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, ISRECEIPT, C_CURRENCY_ID, PAYMENTRULE, ISPAID, AMOUNT, DATEPLANNED, ISMANUAL, STATUS, C_SETTLEMENT_GENERATE_ID, IsValid, C_BPartner_id, Generate_Processed, C_BANKACCOUNT_ID, status_initial ) VALUES ( v_DPID, v_AD_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_ISRECEIPT, v_Currency, v_PaymetRule, 'N', ABS(v_GeneratedAmt), v_DueDate, 'N', 'DE', v_SettlementID, 'Y', v_BankPartner, 'Y', v_BankAccountID, 'DE' ) ; --Post Settlement PERFORM C_SETTLEMENT_POST(NULL, v_SettlementID) ; UPDATE C_REMITTANCE SET C_Settlement_ID=v_SettlementID, C_DP_Management_ID=v_DPMId, Processed='Y' WHERE C_Remittance_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET C_BankAccount_ID=v_BankAccountID WHERE C_Debt_Payment_ID IN (SELECT C_Debt_Payment_Id FROM C_REMITTANCELINE WHERE C_Remittance_ID=v_Record_ID ) ; ELSE --Consolidate='N' --Create DPManagement v_DPManagementDocType_ID:=Ad_Get_Doctype(v_AD_Client_ID, v_AD_Org_ID, TO_CHAR('DPM')) ; SELECT * INTO v_DPMId FROM Ad_Sequence_Next('C_DP_Management', v_AD_Org_ID) ; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DPManagementDocType_ID, v_Record_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_C_DP_Management', v_AD_Client_ID, 'Y') ; END IF; INSERT INTO C_DP_MANAGEMENT ( C_DP_MANAGEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, DOCUMENTNO, DATETRX, C_DOCTYPE_ID, DATEACCT, C_Currency_ID ) VALUES ( v_DPMId, v_ad_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_DocumentNo, v_DateTrx, v_DPManagementDocType_ID, v_DueDate, v_Currency ) ; v_line:=0; FOR Cur_RemittanceLines IN (SELECT dp.C_DEBT_PAYMENT_ID, dp.AD_CLIENT_ID, dp.AD_ORG_ID, dp.ISACTIVE, dp.CREATED, dp.CREATEDBY, dp.UPDATED, dp.UPDATEDBY, dp.ISRECEIPT, dp.C_CURRENCY_ID, dp.PAYMENTRULE, dp.ISPAID, dp.AMOUNT, dp.DATEPLANNED, dp.ISMANUAL, dp.STATUS, dp.C_BPartner_id, dp.description, rl.C_REMITTANCELINE_ID FROM C_REMITTANCELINE rl, C_DEBT_PAYMENT dp WHERE C_Remittance_ID=v_Record_ID AND dp.C_Debt_Payment_id=rl.c_Debt_Payment_ID ) LOOP SELECT * INTO v_DPMLineId FROM Ad_Sequence_Next('C_DP_ManagementLine', v_AD_Org_ID) ; v_line:=v_line + 10; INSERT INTO C_DP_MANAGEMENTLINE ( C_DP_MANAGEMENTLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_DP_MANAGEMENT_ID, STATUS_FROM, STATUS_TO, C_DEBT_PAYMENT_ID, LINE ) VALUES ( v_DPMLineId, v_aD_Client_Id, v_AD_Org_Id, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, v_DPMId, Cur_RemittanceLines.Status, v_Status_To, Cur_RemittanceLines.c_Debt_Payment_ID, v_line ) ; END LOOP; --Post DPManagement PERFORM C_DP_MANAGEMENT_POST(NULL, v_DPMId) ; UPDATE C_REMITTANCE SET C_DP_Management_ID=v_DPMId, Processed='Y' WHERE C_Remittance_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET C_BankAccount_ID=v_BankAccountID WHERE C_Debt_Payment_ID IN (SELECT C_Debt_Payment_Id FROM C_REMITTANCELINE WHERE C_Remittance_ID=v_Record_ID ) ; END IF; END IF;--FINISH_PROCESS ---- <> -- Update AD_PInstance UPDATE C_REMITTANCE SET Processing = 'N' WHERE C_Remittance_ID = v_Record_ID; IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; ELSE RAISE NOTICE '%','--<> ' || v_Message ; IF(v_Result=0) THEN RAISE EXCEPTION '%', v_Message ; --OBTG:-20100-- END IF; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; UPDATE C_REMITTANCE SET Processing = 'N' WHERE C_Remittance_ID = v_Record_ID; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $$ LANGUAGE plpgsql; mDROP FUNCTION public.c_remittance_post(p_pinstance_id character varying, p_remittance_id character varying); publictadfalse23416125536752$c_remittance_post(character varying)FUNCTIONCREATE FUNCTION c_remittance_post(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM C_REMITTANCE_POST($1, NULL); END ; $_$ LANGUAGE plpgsql; JDROP FUNCTION public.c_remittance_post(p_pinstance_id character varying); publictadfalse23416\125595517c_remittance_trg()FUNCTION CREATE FUNCTION c_remittance_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /************************************************************************* * Title: Check in tg_op = 'DELETE', invoice not processed ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('31-12-9999','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- If remittance is processed, is not allowed to change IF (TG_OP = 'UPDATE') THEN IF (OLD.processed = 'Y' AND ((COALESCE (OLD.documentno, '')!= COALESCE (NEW.documentno, '')) OR (COALESCE (OLD.NAME, '') != COALESCE (NEW.NAME, '')) OR (COALESCE (OLD.datetrx, v_DateNull)!=COALESCE (NEW.datetrx, v_DateNull)) OR (COALESCE (OLD.c_bankaccount_id, '0')!= COALESCE (NEW.c_bankaccount_id, '0')) OR (COALESCE (OLD.duedate, v_DateNull)!= COALESCE (NEW.duedate, v_DateNull)) OR (COALESCE (OLD.C_REMITTANCE_TYPE_ID,'0') != COALESCE (NEW.C_REMITTANCE_TYPE_ID,'0')) OR ((COALESCE (OLD.c_settlement_id, '0')!= COALESCE (NEW.c_settlement_id, '0')) AND NEW.processed!='N') OR ((COALESCE (OLD.c_dp_management_id, '0') != COALESCE (NEW.c_dp_management_id, '0')) AND NEW.processed!='N') OR (COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR (COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) ) ) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF (TG_OP = 'INSERT') THEN IF (NEW.processed = 'Y') THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF (TG_OP = 'DELETE') THEN IF (OLD.processed = 'Y') THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_remittance_trg(); publictadfalse23416[125595515c_remittanceline_trg()FUNCTION CREATE FUNCTION c_remittanceline_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_C_Remittance_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Prec NUMERIC:=2; v_Currency VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_C_Remittance_ID:=NEW.C_Remittance_ID; ELSE v_C_Remittance_ID:=OLD.C_Remittance_ID; END IF; SELECT PROCESSED INTO v_Processed FROM C_Remittance WHERE C_Remittance_ID=v_C_Remittance_ID; IF TG_OP = 'UPDATE' THEN IF(v_Processed='Y' AND ( (COALESCE(old.ISACTIVE, '')!=COALESCE(NEW.ISACTIVE, '')) OR(COALESCE(old.LINE, 0)!=COALESCE(NEW.LINE, 0)) OR(COALESCE(old.C_DEBT_PAYMENT_ID, '0')!=COALESCE(NEW.C_DEBT_PAYMENT_ID, '0')) OR(COALESCE(old.C_DEBT_PAYMENT_CANCELLED, '0')!=COALESCE(NEW.C_DEBT_PAYMENT_CANCELLED, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) )) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF((TG_OP = 'DELETE' OR TG_OP = 'INSERT') AND v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; -DROP FUNCTION public.c_remittanceline_trg(); publictadfalse23416]125595519c_revenuerecognition_plan_trg()FUNCTION CREATE FUNCTION c_revenuerecognition_plan_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Create Service Plan for new RevenueRegognition Plans */ v_IsTimeBased CHAR ( 1 ) ; v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_Qty NUMERIC; v_M_Product_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Is RevenueRecognition Time Based SELECT IsTimeBased INTO v_IsTimeBased FROM C_RevenueRecognition WHERE C_RevenueRecognition_ID=new.C_RevenueRecognition_ID; -- Add Service Plan IF(v_IsTimeBased='Y') THEN -- Get InvoiveQty SELECT QtyInvoiced, M_Product_ID INTO v_Qty, v_M_Product_ID FROM C_InvoiceLine WHERE C_InvoiceLine_ID=new.C_InvoiceLine_ID; -- Insert SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_ServiceLevel', new.AD_Client_ID) ; INSERT INTO C_ServiceLevel ( C_ServiceLevel_ID, C_RevenueRecognition_Plan_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, M_Product_ID, Description, ServiceLevelInvoiced, ServiceLevelProvided, Processing, Processed ) VALUES ( v_NextNo, new.C_RevenueRecognition_Plan_ID, new.AD_Client_ID, new.AD_Org_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, v_M_Product_ID, NULL, v_Qty, 0, 'N', 'N' ) ; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 6DROP FUNCTION public.c_revenuerecognition_plan_trg(); publictadfalse23416^125595521c_salesregion_trg()FUNCTIONx CREATE FUNCTION c_salesregion_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_SalesRegion_Trg.sql,v 1.2 2002/10/23 03:16:57 jjanke Exp $ *** * Title: SalesRegion new record * Description: * - create treenode ************************************************************************/ v_Tree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Parent_ID VARCHAR(32); --OBTG:VARCHAR2-- -- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT') THEN -- Create TreeNode -- -- get AD_Tree_ID + ParentID SELECT c.AD_Tree_SalesRegion_ID, n.Node_ID INTO v_Tree_ID, v_Parent_ID FROM AD_ClientInfo c, AD_TreeNode n WHERE c.AD_Tree_SalesRegion_ID=n.AD_Tree_ID AND n.Parent_ID IS NULL AND c.AD_Client_ID=new.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||xTree_ID||' Node='||:new.C_Project_ID||' Parent='||xParent_ID); -- Insert into TreeNode INSERT INTO AD_TreeNode ( AD_TreeNode_Id, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, v_Tree_ID, new.C_SalesRegion_ID, v_Parent_ID,( CASE new.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; -- Summary Nodes first ELSIF(TG_OP = 'DELETE') THEN -- Delete TreeNode -- -- get AD_Tree_ID SELECT c.AD_Tree_SalesRegion_ID INTO v_Tree_ID FROM AD_ClientInfo c WHERE c.AD_Client_ID=old.AD_Client_ID; DELETE FROM AD_TREENODE WHERE AD_CLIENT_ID=old.AD_Client_ID AND AD_Tree_ID=v_Tree_ID AND Node_ID=old.C_SalesRegion_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'C_SalesRegion InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20010-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; *DROP FUNCTION public.c_salesregion_trg(); publictadfalse234161255367577c_settlement_post(character varying, character varying)FUNCTIONcCREATE FUNCTION c_settlement_post(p_pinstance_id character varying, p_settlement_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_Processed VARCHAR(60) ; v_Currency VARCHAR(32); --OBTG:VARCHAR2-- v_Date TIMESTAMP; v_DateAcct TIMESTAMP; v_CashBook_ISO_Code VARCHAR(10) ; v_Record_Description VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Debt_Payment_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_isGenerated char(1) ; --Added by Psarobe v_documentno_Dp_Management VARCHAR(40); --OBTG:VARCHAR2-- v_Datetrx TIMESTAMP; v_Dp_Managementline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_nameBankstatement VARCHAR (60); --OBTG:VARCHAR2-- v_dateBankstatement TIMESTAMP; v_nameCash VARCHAR (60); --OBTG:VARCHAR2-- v_dateCash TIMESTAMP; v_documentno_Settlement VARCHAR(20); --OBTG:VARCHAR2-- v_dateSettlement TIMESTAMP; v_column_identifier VARCHAR(4000); --OBTG:VARCHAR2-- v_Cashline_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Bankstatement_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- v_is_included NUMERIC:=0; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_Aux NUMERIC; v_CanceledNotChargeAmt NUMERIC:=0; v_GeneratedAmt NUMERIC:=0; v_ChargedAmt NUMERIC:=0; -- For WithHolding v_CanceledNotChargeAmt_WH NUMERIC:=0; v_GeneratedAmt_WH NUMERIC:=0; v_ChargedAmt_WH NUMERIC:=0; -- v_ForcedOrg NUMERIC; v_ManualAmt NUMERIC:=0; FINISH_PROCESS BOOLEAN:=false; BEGIN IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; ELSE RAISE NOTICE '%','--<>' ; v_Record_ID:=p_Settlement_ID; END IF; BEGIN --BODY SELECT UpdatedBy, AD_Client_ID, AD_Org_ID, Processed, C_Currency_ID, DATETRX, DateAcct, IsGenerated, C_DocType_ID INTO v_AD_User_ID, v_AD_Client_ID, v_AD_Org_ID, v_Processed, v_Currency, v_Date, v_DateAcct, v_IsGenerated, v_DocType_ID FROM C_SETTLEMENT WHERE C_Settlement_ID=v_Record_ID; IF(v_Processed='Y') THEN --Checking restrictions for unprocessing SELECT COUNT(*), MAX(C_DEBT_PAYMENT_ID) INTO v_Aux, v_Debt_Payment_ID FROM C_DEBT_PAYMENT WHERE(C_BANKSTATEMENTLINE_ID IS NOT NULL OR C_CASHLINE_ID IS NOT NULL) AND(C_SETTLEMENT_GENERATE_ID=v_Record_ID OR C_SETTLEMENT_CANCEL_ID=v_Record_ID) ; IF v_Aux<>0 THEN SELECT AD_COLUMN_IDENTIFIER_STD('C_Debt_Payment',TO_CHAR(C_DEBT_PAYMENT.C_Debt_Payment_Id)), C_BANKSTATEMENTLINE_ID, C_CASHLINE_ID INTO v_column_identifier, v_Bankstatement_ID,v_Cashline_ID FROM C_DEBT_PAYMENT WHERE C_DEBT_PAYMENT_ID = v_Debt_Payment_ID; IF v_Bankstatement_ID IS NOT NULL THEN SELECT C_BANKSTATEMENT.NAME, C_BANKSTATEMENT.STATEMENTDATE INTO v_nameBankstatement, v_dateBankstatement FROM C_BANKSTATEMENT, C_BANKSTATEMENTLINE WHERE C_BANKSTATEMENT.C_BANKSTATEMENT_ID = C_BANKSTATEMENTLINE.C_BANKSTATEMENT_ID AND C_BANKSTATEMENTLINE.C_DEBT_PAYMENT_ID = v_Debt_Payment_ID; RAISE EXCEPTION '%', '@Debtpayment@'||v_column_identifier||' '||'@ConciliatedDebtPaymentBank@'||v_nameBankstatement||' '||'@Bydate@'||v_dateBankstatement ; --OBTG:-20000-- END IF; IF v_Cashline_ID IS NOT NULL THEN SELECT C_CASH.NAME, C_CASH.STATEMENTDATE INTO v_nameCash, v_dateCash FROM C_CASH, C_CASHLINE WHERE C_CASH.C_CASH_ID = C_CASHLINE.C_CASH_ID AND C_CASHLINE.C_DEBT_PAYMENT_ID = v_Debt_Payment_ID; RAISE EXCEPTION '%', '@Debtpayment@'||v_column_identifier||' '||'@ConciliatedDebtPaymentCash@'||v_nameCash||' '||'@Bydate@'||v_dateCash ; --OBTG:-20000-- END IF; END IF; IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(C_Debt_Payment_Id) INTO v_Aux, v_Debt_Payment_ID FROM C_DEBT_PAYMENT WHERE C_SETTLEMENT_CANCEL_ID IS NOT NULL AND C_SETTLEMENT_GENERATE_ID=v_Record_ID; IF v_Aux<>0 THEN SELECT documentno, datetrx, AD_COLUMN_IDENTIFIER_STD('C_Debt_Payment', TO_CHAR(C_DEBT_PAYMENT.C_Debt_Payment_Id)) INTO v_documentno_Settlement, v_dateSettlement, v_column_identifier FROM C_SETTLEMENT, C_DEBT_PAYMENT WHERE C_SETTLEMENT.C_Settlement_Id = C_DEBT_PAYMENT.C_settlement_cancel_Id and C_DEBT_PAYMENT.C_Debt_Payment_Id = v_Debt_Payment_ID; RAISE EXCEPTION '%', '@Debtpayment@'||v_column_identifier||' '||'@GenerateDebtPaymentManaged@'||v_documentno_Settlement||' '||'@Bydate@'||v_dateSettlement ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*), MAX(ml.C_DP_ManagementLine_Id) INTO v_Aux, v_Dp_Managementline_Id FROM C_DP_ManagementLine ml, C_DP_Management m, C_Debt_Payment dp WHERE ml.C_DP_Management_ID=m.C_DP_Management_ID AND ml.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND dp.C_Settlement_Generate_ID=v_Record_ID AND m.processed='Y'; IF v_Aux!=0 THEN SELECT m.DOCUMENTNO, m.DATETRX, AD_COLUMN_IDENTIFIER_STD('C_Debt_Payment',TO_CHAR(ml.C_DEBT_PAYMENT_ID)) INTO v_documentno_Dp_Management, v_Datetrx, v_column_identifier FROM C_DP_ManagementLine ml, C_DP_Management m WHERE ml.C_DP_Management_ID=m.C_DP_Management_ID AND ml.C_DP_ManagementLine_Id = v_Dp_Managementline_Id; RAISE EXCEPTION '%', '@Debtpayment@'||v_column_identifier||' '||'@DPDebtPaymentManaged@'||v_documentno_Dp_Management||' '||'@Bydate@'||v_Datetrx ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*) INTO v_Aux FROM C_SETTLEMENT WHERE POSTED='Y' AND C_SETTLEMENT_ID=v_Record_ID; --Direct accounting settlement verification is not necessary because it's controlled in the previous restriction IF v_Aux<>0 THEN RAISE EXCEPTION '%', '@SettlementDocumentPosted@' ; --OBTG:-20000-- ELSE UPDATE C_SETTLEMENT SET Processed='N', UPDATED=TO_DATE(NOW()), UPDATEDBY=v_AD_User_ID WHERE C_Settlement_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET Cancel_Processed='N', UPDATED=TO_DATE(NOW()), UPDATEDBY=v_AD_User_ID WHERE C_Settlement_Cancel_ID=v_Record_ID; UPDATE C_DEBT_PAYMENT SET Generate_Processed='N', isValid='N', UPDATED=TO_DATE(NOW()), UPDATEDBY=v_AD_User_ID WHERE C_Settlement_Generate_ID=v_Record_ID; IF v_IsGenerated='N' THEN --Delete cashline generated from manual settlement with payed dps DELETE FROM C_CASHLINE WHERE C_CASHLINE.C_DEBT_PAYMENT_ID IN (SELECT C_DEBT_PAYMENT_ID FROM C_DEBT_PAYMENT WHERE C_SETTLEMENT_CANCEL_ID=v_Record_ID OR C_SETTLEMENT_GENERATE_ID=v_Record_ID AND IsPaid='Y' AND PaymentRule IN('C', 'B') ) ; END IF; v_Message:='@UnProcessedSettlement@'; END IF; END IF;--FINISH_PROCESS FINISH_PROCESS:=true; END IF; IF(NOT FINISH_PROCESS) THEN /* * Checking Restrictions */ -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM C_SETTLEMENT, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=C_SETTLEMENT.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND C_SETTLEMENT.C_SETTLEMENT_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_SETTLEMENT', 'C_DEBT_PAYMENT', v_Record_ID, 'C_SETTLEMENT_ID', 'C_SETTLEMENT_GENERATE_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@PaymentsAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('C_SETTLEMENT', 'C_DEBT_PAYMENT', v_Record_ID, 'C_SETTLEMENT_ID', 'C_SETTLEMENT_CANCEL_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@PaymentsAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('C_SETTLEMENT', v_Record_ID, 'C_SETTLEMENT_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_DateAcct, NULL, v_DocType_ID) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; v_ResultStr:='CheckingRestrictions - C_DEBT_PAYMENT ORG IS IN C_BPARTNER ORG TREE'; SELECT COUNT(*), AD_COLUMN_IDENTIFIER_STD ('C_Debt_Payment', TO_CHAR(MAX(c.C_Debt_Payment_Id))) INTO v_Aux, v_column_identifier FROM C_DEBT_PAYMENT c, C_BPARTNER bp WHERE(c.C_SETTLEMENT_CANCEL_ID=v_Record_ID OR c.C_SETTLEMENT_GENERATE_ID=v_Record_ID) AND c.C_BPARTNER_ID=bp.C_BPARTNER_ID AND Ad_Isorgincluded(c.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1; IF v_Aux>0 THEN RAISE EXCEPTION '%', '@OrgDebtpayment@'||v_column_identifier||' '||'@OrgdifferentBpartner@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /* * Checking Restrictions */ v_ResultStr:='CheckingRestrictions - C_DEBT_PAYMENT ORG IS IN C_BPARTNER ORG TREE'; SELECT COUNT(*) INTO v_Aux FROM C_SETTLEMENT S, C_DocType WHERE C_DocType.DocBaseType IN ('STT','STM') AND AD_ISORGINCLUDED(S.AD_Org_ID,C_DocType.AD_Org_ID, S.AD_Client_ID) <> -1 AND S.C_SETTLEMENT_ID = v_Record_ID AND S.C_DOCTYPE_ID = C_DocType.C_DOCTYPE_ID; IF v_Aux=0 THEN RAISE EXCEPTION '%', '@NotCorrectOrgDoctypeSettlement@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN /* * Checking Restrictions */ v_ResultStr:='CheckingRestrictions - C_DEBT_PAYMENT MANUAL IS NOT SPLIT'; SELECT COUNT(*), AD_COLUMN_IDENTIFIER_STD ('C_Debt_Payment', TO_CHAR(MAX(c.C_Debt_Payment_Id))) INTO v_Aux, v_column_identifier FROM C_DEBT_PAYMENT c WHERE c.C_SETTLEMENT_CANCEL_ID=v_Record_ID AND c.ISMANUAL = 'Y' AND c.ISPAID = 'N' AND NOT EXISTS (SELECT 1 FROM C_DEBT_PAYMENT D WHERE C.C_SETTLEMENT_CANCEL_ID = D.C_SETTLEMENT_CANCEL_ID AND C.ISRECEIPT = D.ISRECEIPT AND C.AMOUNT = AMOUNT*-1 AND d.ISPAID = 'N'); IF v_Aux>0 THEN RAISE EXCEPTION '%', '@ManualDebtpayment@'||' "'||v_column_identifier||'" '||'@CanNotBeSplit@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='CheckingRestrictions - C_DEBT_PAYMENT ORG IS IN C_SETTLEMENT ORG TREE'; SELECT COUNT(*), AD_COLUMN_IDENTIFIER_STD ('C_Debt_Payment', TO_CHAR(MAX(c.C_Debt_Payment_Id))) INTO v_Aux, v_column_identifier FROM C_DEBT_PAYMENT c, C_SETTLEMENT s WHERE(c.C_SETTLEMENT_CANCEL_ID=v_Record_ID OR c.C_SETTLEMENT_GENERATE_ID=v_Record_ID) AND s.C_SETTLEMENT_ID=v_Record_ID AND Ad_Isorgincluded(c.AD_ORG_ID, s.AD_ORG_ID, s.AD_CLIENT_ID)=-1; IF v_Aux>0 THEN RAISE EXCEPTION '%', '@OrgDebtpayment@'||v_column_identifier||' '||'@OrgdifferentSettlement@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS --To be fixed o deprecated. It should be imposible to do is IF(NOT FINISH_PROCESS) THEN SELECT COUNT(*) INTO v_Aux FROM C_DEBT_PAYMENT p WHERE p.C_Settlement_Cancel_ID=v_Record_ID AND C_Debt_Payment_Status(p.C_SETTLEMENT_CANCEL_ID, p.Cancel_Processed, p.Generate_Processed, p.IsPaid, p.IsValid, p.C_CashLine_ID, p.C_BankStatementLine_ID)<>'P'; -- If p_PInstance_ID is null there is not need to check Debt/Payment Status IF((v_Aux>0) AND(p_PInstance_ID IS NOT NULL)) THEN RAISE EXCEPTION '%', '@DebtPaymentNotPending@' ; --OBTG:-20000-- END IF; --Until here to be deprecated END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN SELECT count(*), MAX(ml.C_DP_ManagementLine_Id) INTO v_Aux, v_Dp_Managementline_Id FROM C_DP_ManagementLine ml, C_DP_Management m, C_Debt_Payment dp WHERE ml.C_DP_Management_ID=m.C_DP_Management_ID AND ml.C_Debt_Payment_ID=dp.C_Debt_Payment_ID AND dp.C_Settlement_Cancel_ID=v_Record_ID AND m.processed='Y' AND m.DateAcct>v_DateAcct; if v_Aux!=0 then SELECT m.DOCUMENTNO, AD_COLUMN_IDENTIFIER_STD ('C_Debt_Payment', TO_CHAR(ml.C_Debt_Payment_Id)) INTO v_documentno_Dp_Management, v_column_identifier FROM C_DP_ManagementLine ml, C_DP_Management m WHERE ml.C_DP_Management_ID=m.C_DP_Management_ID AND ml.C_DP_Managementline_ID=v_Dp_Managementline_Id; RAISE EXCEPTION '%', '@Debtpayment@'||v_column_identifier||' '||'@DPDebtPaymentManaged@'||v_documentno_Dp_Management||' '||'@DPAccountdatelaterSettlementdate@' ; --OBTG:-20000-- end if; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='CheckingAmounts'; --Calculating the non-paid amount to cancel SELECT COALESCE(SUM(C_Currency_Round( C_Currency_Convert((Amount-WriteOffAmt), C_Currency_ID, v_Currency, v_Date, NULL, v_AD_Client_ID, v_AD_Org_ID), v_Currency, NULL)), 0), COALESCE(SUM(C_Currency_Round( C_Currency_Convert((coalesce(WithHoldingAmount,0)), C_Currency_ID, v_Currency, v_Date, NULL, v_AD_Client_ID, v_AD_Org_ID), v_Currency, NULL)), 0) INTO v_CanceledNotChargeAmt,v_CanceledNotChargeAmt_WH FROM C_Debt_Payment_V WHERE C_Settlement_Cancel_ID=v_Record_ID AND isActive='Y' AND isPaid='N'; --Calculating the generated amount SELECT COALESCE(SUM(C_Currency_Round( C_Currency_Convert(Amount, C_Currency_ID, v_Currency, v_Date, NULL, v_AD_Client_ID, v_AD_Org_ID), v_Currency, NULL)), 0), COALESCE(SUM(C_Currency_Round( C_Currency_Convert(coalesce(WithHoldingAmount,0), C_Currency_ID, v_Currency, v_Date, NULL, v_AD_Client_ID, v_AD_Org_ID), v_Currency, NULL)), 0) INTO v_GeneratedAmt,v_GeneratedAmt_WH FROM C_Debt_Payment_V WHERE C_Settlement_Generate_ID=v_Record_ID AND isActive='Y' AND isManual='N'; --Calculating the applied amount SELECT COALESCE(SUM(C_Currency_Round( C_Currency_Convert((Amount - WriteOffAmt), C_Currency_ID, v_Currency, v_Date, NULL, v_AD_Client_ID, v_AD_Org_ID), v_Currency, NULL)), 0), COALESCE(SUM(C_Currency_Round( C_Currency_Convert((coalesce(WithHoldingAmount,0) ), C_Currency_ID, v_Currency, v_Date, NULL, v_AD_Client_ID, v_AD_Org_ID), v_Currency, NULL)), 0) INTO v_ChargedAmt,v_ChargedAmt_WH FROM C_Debt_Payment_V WHERE(C_Settlement_Cancel_ID=v_Record_ID OR C_Settlement_Generate_ID=v_Record_ID) AND isActive='Y' AND isPaid='Y'; v_ResultStr:='UpdatingSettlementAmounts'; UPDATE C_SETTLEMENT SET Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID, CanceledNotChargeAmt=v_CanceledNotChargeAmt, GeneratedAmt=v_GeneratedAmt, ChargedAmt=v_ChargedAmt WHERE C_Settlement_ID=v_Record_ID; IF(v_CanceledNotChargeAmt<>v_GeneratedAmt) THEN RAISE EXCEPTION '%', '@SettlementNotMatch@' ; --OBTG:-20000-- END IF; IF(v_CanceledNotChargeAmt_WH<>v_GeneratedAmt_WH) THEN RAISE EXCEPTION '%', '@SettlementWH_NotMatch@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='UpdatingAmounts'; UPDATE C_DEBT_PAYMENT SET GLItemAmt= ( SELECT COALESCE(SUM(cb.AmountCredit - cb.AmountDebit), 0) FROM C_DEBT_PAYMENT_BALANCING cb WHERE cb.C_Debt_Payment_ID=C_DEBT_PAYMENT.C_Debt_Payment_ID ) WHERE C_Settlement_Generate_ID=v_Record_ID AND isManual='Y'; v_ResultStr:='CheckingAmounts'; --Calculating the the amount of manual debt-payment items SELECT COUNT(*), MIN(c.C_DEBT_PAYMENT_ID) INTO v_Aux, v_Debt_Payment_ID FROM C_Debt_Payment_V c WHERE c.C_Settlement_Generate_ID=v_Record_ID AND c.isManual='Y' AND c.Amount<>c.GLItemAmt; IF(v_Aux>0) THEN SELECT Ad_Column_Identifier_Std('C_Debt_Payment', to_char(v_Debt_Payment_ID)) INTO v_column_identifier FROM DUAL; RAISE EXCEPTION '%', '@AmountDebtpayment@'||v_column_identifier||' '||'@SettlementmanualNotMatch@' ; --OBTG:-20000-- END IF; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='UpdatingCancelLines'; UPDATE C_DEBT_PAYMENT SET Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID, Cancel_Processed='Y' WHERE isActive='Y' AND C_Settlement_Cancel_ID=v_Record_ID; v_ResultStr:='UpdatingGenerateLines'; UPDATE C_DEBT_PAYMENT SET Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID, Generate_Processed='Y', isValid='Y' WHERE isActive='Y' AND C_Settlement_Generate_ID=v_Record_ID; v_ResultStr:='UpdatingSOCreditUsed'; DECLARE --TYPE RECORD IS REFCURSOR; Cur_Debts RECORD; BEGIN FOR Cur_Debts IN (SELECT DISTINCT C_BPartner_ID FROM C_DEBT_PAYMENT WHERE C_Settlement_Cancel_ID=v_Record_ID OR C_Settlement_Generate_ID=v_Record_ID AND ISRECEIPT = 'Y' ) LOOP PERFORM C_BP_SOCREDITUSED_REFRESH(Cur_Debts.C_BPartner_ID) ; END LOOP; END; v_ResultStr:='CreatingCashLines'; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN DECLARE --TYPE RECORD IS REFCURSOR; Cur_Lines RECORD; p_CashBook VARCHAR(32) ; --OBTG:VARCHAR2-- p_Cash VARCHAR(32) ; --OBTG:VARCHAR2-- p_CashLine VARCHAR(32) ; --OBTG:VARCHAR2-- p_Line NUMERIC; p_Amount NUMERIC; BEGIN FOR Cur_Lines IN (SELECT dp.*, c.ISO_CODE, s.DateAcct FROM C_DEBT_PAYMENT dp, C_CURRENCY c, C_SETTLEMENT s WHERE dp.C_Settlement_Generate_ID=v_Record_ID AND s.C_SETTLEMENT_ID=dp.C_Settlement_Generate_ID AND dp.C_CURRENCY_ID=c.C_CURRENCY_ID AND dp.isActive='Y' AND dp.IsPaid='Y' AND dp.PaymentRule IN('C', 'B') ) LOOP p_CashBook:=Cur_Lines.C_CashBook_ID; IF p_CashBook IS NULL THEN SELECT MAX(C_CashBook_ID) INTO p_CashBook FROM C_CASHBOOK WHERE AD_CLIENT_ID=v_AD_Client_ID AND ISACTIVE='Y' AND ISDEFAULT='Y'; IF p_CashBook IS NULL THEN RAISE EXCEPTION '%', 'No default cash book' ; --OBTG:-20600-- END IF; END IF; IF(NOT FINISH_PROCESS) THEN SELECT MAX(C.C_CASH_ID) INTO p_Cash FROM C_CASH C WHERE C.C_CASHBOOK_ID=p_CashBook AND C.DATEACCT=Cur_Lines.DateAcct AND C.PROCESSED='N'; SELECT C_CURRENCY.ISO_CODE INTO v_CashBook_ISO_Code FROM C_CASHBOOK, C_CURRENCY WHERE C_CASHBOOK.C_CURRENCY_ID=C_CURRENCY.C_CURRENCY_ID AND C_CASHBOOK_ID=p_CashBook; IF(p_Cash IS NULL) THEN v_ResultStr:='Creating C_Cash'; SELECT * INTO p_Cash FROM Ad_Sequence_Next('C_Cash', v_AD_Org_ID) ; INSERT INTO C_CASH ( C_Cash_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_CashBook_ID, NAME, StatementDate, DateAcct, BeginningBalance, EndingBalance, StatementDifference, Processing, Processed, Posted ) VALUES ( p_Cash, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, p_CashBook, (TO_CHAR(Cur_Lines.DateAcct, 'YYYY-MM-DD') || ' ' || v_CashBook_ISO_Code), v_Date, v_Date, 0, 0, 0, 'N', 'N', 'N' ) ; END IF; --p_Cash IS NULL v_ResultStr:='Creating C_CashLine'; SELECT * INTO p_CashLine FROM Ad_Sequence_Next('C_CashLine', v_AD_Org_ID) ; SELECT COALESCE(MAX(LINE), 0) + 10 INTO p_Line FROM C_CASHLINE WHERE C_CASH_ID=p_Cash; p_Amount:=Cur_Lines.Amount - Cur_Lines.WriteOffAmt; IF Cur_Lines.isReceipt='N' THEN p_Amount:=p_Amount * -1; END IF; INSERT INTO C_CASHLINE ( C_CashLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Cash_ID, C_Debt_Payment_ID, Line, Description, Amount, CashType, C_Currency_ID, DiscountAmt, WriteOffAmt, IsGenerated ) VALUES ( p_CashLine, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_AD_User_ID, TO_DATE(NOW()), v_AD_User_ID, p_Cash, Cur_Lines.C_Debt_Payment_ID, p_Line, Cur_Lines.Description, p_Amount, 'P', Cur_Lines.C_Currency_ID, 0, 0, 'Y' ) ; END IF;--FINISH_PROCESS END LOOP; END; END IF;--FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN v_ResultStr:='UpdatingSettlement'; UPDATE C_SETTLEMENT SET Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID, Processed='Y' WHERE C_Settlement_ID=v_Record_ID; END IF;--FINISH_PROCESS ---- <> -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RAISE NOTICE '%','--<> ' || v_Message ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $$ LANGUAGE plpgsql; mDROP FUNCTION public.c_settlement_post(p_pinstance_id character varying, p_settlement_id character varying); publictadfalse23416125536759%c_settlement_post0(character varying)FUNCTIONCREATE FUNCTION c_settlement_post0(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN PERFORM C_SETTLEMENT_POST(p_PInstance_ID, NULL) ; END ; $$ LANGUAGE plpgsql; KDROP FUNCTION public.c_settlement_post0(p_pinstance_id character varying); publictadfalse23416_125595523c_settlement_trg()FUNCTION CREATE FUNCTION c_settlement_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('01-01-1900', 'DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- If invoice is processed, is not allowed to change C_BPartner IF TG_OP = 'UPDATE' THEN IF (OLD.Processed = 'Y' AND ( (COALESCE(OLD.DOCUMENTNO,'.')<>COALESCE(NEW.DOCUMENTNO,'.')) OR (COALESCE(OLD.C_DOCTYPE_ID,'0')<>COALESCE(NEW.C_DOCTYPE_ID,'0')) OR (COALESCE(OLD.USER1_ID,'0')<>COALESCE(NEW.USER1_ID,'0')) OR (COALESCE(OLD.USER2_ID,'0')<>COALESCE(NEW.USER2_ID,'0')) OR (COALESCE(OLD.GENERATEDAMT,0)<>COALESCE(NEW.GENERATEDAMT,0)) OR (COALESCE(OLD.CHARGEDAMT,0)<>COALESCE(NEW.CHARGEDAMT,0)) OR (COALESCE(OLD.C_CURRENCY_ID,'0')<>COALESCE(NEW.C_CURRENCY_ID,'0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')) )) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; IF (OLD.Posted = 'Y' AND ((COALESCE(OLD.DATEACCT,v_DateNull)<>COALESCE(NEW.DATEACCT,v_DateNull)) OR (COALESCE(OLD.C_CAMPAIGN_ID,'0')<>COALESCE(NEW.C_CAMPAIGN_ID,'0')) OR (COALESCE(OLD.C_PROJECT_ID,'0')<>COALESCE(NEW.C_PROJECT_ID,'0')) OR (COALESCE(OLD.C_CURRENCY_ID,'0')<>COALESCE(NEW.C_CURRENCY_ID,'0')) OR (COALESCE(OLD.C_ACTIVITY_ID,'0')<>COALESCE(NEW.C_ACTIVITY_ID,'0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF (TG_OP = 'INSERT') THEN IF (NEW.PROCESSED = 'Y') THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF (TG_OP = 'DELETE') THEN IF (OLD.PROCESSED = 'Y') THEN RAISE EXCEPTION '%', 'Document processed/posted'; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_settlement_trg(); publictadfalse23416125556485>c_tax_get_level(character varying, character varying, numeric)FUNCTIONCREATE FUNCTION c_tax_get_level(p_parenttax character varying, p_targettax character varying, p_level numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* * For the given target tax, it returns level. Level indicates the sequence NUMERIC for the calculation of the given tax in its tree */ v_ParentTax C_TAX.C_TAX_ID%TYPE; --TYPE RECORD IS REFCURSOR; Cur_taxes RECORD; v_Level NUMERIC; v_Count NUMERIC; BEGIN v_Level:=p_Level; FOR Cur_taxes IN ( SELECT C_Tax_ID, IsSummary FROM C_TAX WHERE Parent_Tax_ID=p_ParentTax ORDER BY Line ) LOOP IF (Cur_taxes.IsSummary='Y') THEN v_Level:=C_TAX_GET_LEVEL(Cur_taxes.C_Tax_ID, p_TargetTax, v_Level); SELECT COUNT(C_TAX_ID) INTO v_Count FROM C_TAX WHERE C_TAX_ISMEMBER(Cur_taxes.C_Tax_ID, p_TargetTax)=1 AND C_TAX_ID=p_TargetTax; IF(v_Count=1) THEN RETURN v_Level; END IF; --v_Level:=v_Level + 1; END IF; IF (Cur_taxes.IsSummary='N') THEN v_Level:=v_Level + 1; END IF; IF (Cur_taxes.C_Tax_ID=p_TargetTax) THEN RETURN v_Level; END IF; END LOOP; RETURN v_Level; END ; $$ LANGUAGE plpgsql; uDROP FUNCTION public.c_tax_get_level(p_parenttax character varying, p_targettax character varying, p_level numeric); publictadfalse23416125556486!c_tax_get_root(character varying)FUNCTIONCREATE FUNCTION c_tax_get_root(p_tax character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* * For the given tax, it returns its top ancestor, which parent is null */ v_ParentTax C_TAX.C_TAX_ID%TYPE; BEGIN SELECT Parent_Tax_ID INTO v_ParentTax FROM C_TAX WHERE C_TAX_ID=p_Tax; IF (v_ParentTax IS NULL) THEN RETURN p_Tax; ELSE RETURN C_TAX_GET_ROOT(v_ParentTax); END IF; END ; $$ LANGUAGE plpgsql; >DROP FUNCTION public.c_tax_get_root(p_tax character varying); publictadfalse234161255564874c_tax_ismember(character varying, character varying)FUNCTIONCREATE FUNCTION c_tax_ismember(p_parenttax character varying, p_targettax character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. *********************************************************************** * For the given target tax, it returns 1 if target tax es included in its tree */ v_Result NUMERIC; --TYPE RECORD IS REFCURSOR; Cur_taxes RECORD; BEGIN IF (p_ParentTax = p_TargetTax) THEN RETURN 1; END IF; FOR Cur_taxes IN ( SELECT C_Tax_ID, IsSummary FROM C_TAX WHERE Parent_Tax_ID=p_ParentTax ORDER BY Line ) LOOP IF (Cur_taxes.C_Tax_ID = p_TargetTax) THEN RETURN 1; END IF; v_Result:=C_TAX_ISMEMBER(Cur_taxes.C_Tax_ID, p_TargetTax); IF(v_Result=1) THEN RETURN v_Result; END IF; END LOOP; RETURN v_Result; END ; $$ LANGUAGE plpgsql; cDROP FUNCTION public.c_tax_ismember(p_parenttax character varying, p_targettax character varying); publictadfalse23416d125595533c_tax_report_trg()FUNCTIONCREATE FUNCTION c_tax_report_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_xTree_ID VARCHAR(32); --OBTG:VARCHAR2-- v_xParent_ID VARCHAR(32); --OBTG:VARCHAR2-- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Insert AD_Menu Trigger -- for Translation -- and TreeNode IF TG_OP = 'INSERT' THEN -- Create TreeNode -- -- get AD_Tree_ID + ParentID --SELECT c.AD_Tree_Menu_ID, n.Node_ID -- INTO v_xTree_ID, v_xParent_ID -- FROM AD_CLIENTINFO c, AD_TREENODE n -- AD_TreeNodeMM n -- WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID -- AND n.Parent_ID IS NULL --AND c.AD_Client_ID=:NEW.AD_Client_ID; SELECT AD_TREE_ID, 0 INTO v_xTree_ID, v_xParent_ID FROM AD_TREE WHERE treetype='TR' AND AD_Client_ID=NEW.AD_Client_ID; -- DBMS_OUTPUT.PUT_LINE('Tree='||v_xTree_ID||' Node='||:new.AD_Menu_ID||' Parent='||v_xParent_ID); -- Insert into TreeNode INSERT INTO AD_TREENODE -- AD_TreeNodeMM ( AD_TreeNode_Id, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, AD_Tree_ID, Node_ID, Parent_ID, SeqNo ) VALUES ( get_uuid(), NEW.AD_Client_ID, NEW.AD_Org_ID, NEW.IsActive, NEW.Created, NEW.CreatedBy, NEW.Updated, NEW.UpdatedBy, v_xTree_ID, NEW.C_TAX_REPORT_ID, v_xParent_ID,( CASE NEW.IsSummary WHEN 'Y' THEN 100 ELSE 999 END ) ) ; -- Summary Nodes first END IF; -- Inserting -- AD_Ref_List update trigger -- synchronize name,... IF TG_OP = 'UPDATE' THEN IF((COALESCE(OLD.NAME, '.') <> COALESCE(NEW.NAME, '.') OR COALESCE(OLD.Description, '.') <> COALESCE(NEW.Description, '.') OR COALESCE(OLD.IsActive, '.') <> COALESCE(NEW.IsActive, '.'))) THEN IF(OLD.IsActive!=NEW.IsActive) THEN -- get AD_Tree_ID + ParentID --SELECT c.AD_Tree_Menu_ID, n.Node_ID --INTO v_xTree_ID, v_xParent_ID --FROM AD_CLIENTINFO c, AD_TREENODE n -- AD_TreeNodeMM n --WHERE c.AD_Tree_Menu_ID=n.AD_Tree_ID -- AND n.Parent_ID IS NULL --AND c.AD_Client_ID=:NEW.AD_Client_ID; -- Update UPDATE AD_TREENODE -- AD_TreeNodeMM SET IsActive=NEW.IsActive WHERE AD_Tree_ID=v_xTree_ID AND Node_ID=NEW.C_TAX_REPORT_ID; END IF; END IF; END IF; -- Updating /*EXCEPTION WHEN DATA_EXCEPTION THEN RAISE EXCEPTION '%', 'AD_AccountingRpt_Element InsertTrigger Error: No ClientInfo or parent TreeNode' ; --OBTG:-20002-- */ IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_tax_report_trg(); publictadfalse23416e125595535 c_tax_trg()FUNCTION\CREATE FUNCTION c_tax_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_Tax_Trg.sql,v 1.2 2003/02/18 03:33:22 jjanke Exp $ *** * Title: Tax Changes * Description: * - New Accounting Defaults * - Translation ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; v_count NUMERIC; v_AD_Client_ID VARCHAR(32) := new.AD_Client_ID; --OBTG:VARCHAR2-- v_AD_ORG_ID VARCHAR(32) := new.AD_ORG_ID; --OBTG:VARCHAR2-- v_C_Tax_ID VARCHAR(32) := new.C_Tax_ID; --OBTG:VARCHAR2-- v_CreatedBy VARCHAR(32) := new.CreatedBy; --OBTG:VARCHAR2-- v_UpdatedBy VARCHAR(32) := new.UpdatedBy; --OBTG:VARCHAR2-- BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT') THEN -- Tax Account Defaults FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE d.Ad_Client_Id = new.AD_Client_ID AND EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE (AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 OR AD_IsOrgIncluded(new.AD_ORG_ID, AD_Org_ID, new.AD_Client_ID)<>-1) AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) ) LOOP SELECT count(*) INTO v_count FROM DUAL where exists (select 1 from ad_ep_procedures where ad_extension_points_id = '1D8D6974E6D64FDC8A6F2A7FE4C3F7FF'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); v_extension_point_id VARCHAR(32) := '1D8D6974E6D64FDC8A6F2A7FE4C3F7FF'; BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'AD_Client_ID', v_AD_Client_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'AD_ORG_ID', v_AD_ORG_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'C_Tax_ID', v_C_Tax_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'CreatedBy', v_CreatedBy, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'UpdatedBy', v_UpdatedBy, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; ELSE INSERT INTO C_Tax_Acct ( C_Tax_Acct_ID, C_Tax_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, T_Due_Acct, T_Liability_Acct, T_Credit_Acct, T_Receivables_Acct, T_Expense_Acct ) VALUES ( get_uuid(), new.C_Tax_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.T_Due_Acct, Cur_Defaults.T_Liability_Acct, Cur_Defaults.T_Credit_Acct, Cur_Defaults.T_Receivables_Acct, Cur_Defaults.T_Expense_Acct ) ; END IF; END LOOP; -- Create Translation Rows INSERT INTO C_Tax_Trl ( C_Tax_Trl_ID, C_Tax_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, TaxIndicator, IsTranslated ) SELECT get_uuid(), new.C_Tax_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, new.TaxIndicator, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting IF(TG_OP = 'UPDATE') THEN UPDATE C_TAX_ACCT SET AD_ORG_ID = new.AD_ORG_ID WHERE C_TAX_ID = new.C_TAX_ID; IF((COALESCE(old.TaxIndicator, '.') <> COALESCE(NEW.TaxIndicator, '.') OR COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.'))) THEN UPDATE C_Tax_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_Tax_ID=new.C_Tax_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; "DROP FUNCTION public.c_tax_trg(); publictadfalse23416`125595525c_taxcategory_trg()FUNCTION CREATE FUNCTION c_taxcategory_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert Translation */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_TaxCategory_Trl ( C_TaxCategory_Trl_ID, C_TaxCategory_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Name, Description, IsTranslated ) SELECT get_uuid(), new.C_TaxCategory_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.Name, new.Description, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.') OR COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.'))) THEN -- Translation UPDATE C_TaxCategory_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_TaxCategory_ID=new.C_TaxCategory_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_taxcategory_trg(); publictadfalse23416125536765$c_taxpayment_post(character varying)FUNCTIONECREATE FUNCTION c_taxpayment_post(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_resultstr VARCHAR(2000) := ''; --OBTG:VARCHAR2-- v_message VARCHAR(200) := ''; --OBTG:VARCHAR2-- v_record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_result NUMERIC:= 1; -- Success v_total NUMERIC; v_c_settlement_cancel_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE record IS REFCURSOR; cur_parameter record; cur_registertype record; cur_line record; -- Record Info v_client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_updatedby c_taxpayment.updatedby%TYPE; v_createdby c_taxpayment.createdby%TYPE; v_processed c_taxpayment.processed%TYPE; v_taxtotalamt NUMERIC; v_prevvatcredit NUMERIC; v_paymentamt NUMERIC; v_paymentcreditamt NUMERIC; v_paymentdebitamt NUMERIC; v_isreceipt VARCHAR(1); --OBTG:VARCHAR2-- v_ispayment VARCHAR(1); --OBTG:VARCHAR2-- v_posted VARCHAR(60); v_taxamtfromreglines NUMERIC; v_taxregistertotal NUMERIC; v_date TIMESTAMP; v_settlementid VARCHAR(32); --OBTG:varchar2-- v_settlementdoctype_ID VARCHAR(32); --OBTG:VARCHAR2-- v_sdocumentno VARCHAR(40); v_debtpaymentid VARCHAR(32); --OBTG:varchar2-- v_debtpaymentbalancingid VARCHAR(32); --OBTG:varchar2-- v_paymentrule VARCHAR(30); --OBTG:VARCHAR2-- v_bpartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_gl_journalbatchid VARCHAR(32); --OBTG:varchar2-- v_gljbdocumentno VARCHAR(40); v_gl_journaldoctype_ID VARCHAR(32); --OBTG:VARCHAR2-- v_gl_journalid VARCHAR(32); --OBTG:varchar2-- v_gljdocumentno VARCHAR(40); v_gl_journallineid VARCHAR(32); --OBTG:varchar2-- v_line NUMERIC; v_validcombination_ID VARCHAR(32); --OBTG:VARCHAR2-- v_glitem_acct VARCHAR(32); --OBTG:VARCHAR2-- v_glitem_ID VARCHAR(32); --OBTG:VARCHAR2-- v_debit NUMERIC; v_credit NUMERIC; v_totaldebit NUMERIC; v_totalcredit NUMERIC; v_acctschema_ID VARCHAR(32); --OBTG:VARCHAR2-- v_calendar_ID VARCHAR(32); --OBTG:VARCHAR2-- v_currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_currencyratetype VARCHAR(30); --OBTG:VARCHAR2-- v_gl_category_ID VARCHAR(32); --OBTG:VARCHAR2-- v_period_ID VARCHAR(32); --OBTG:VARCHAR2-- v_name VARCHAR(255); --OBTG:NVARCHAR2-- v_TRTcountY NUMERIC; v_TRTcountN NUMERIC; v_DBA_ErrorLog_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_pinstance_id; v_resultstr := 'PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_pinstance_id, NULL, 'Y', NULL, NULL); -- Get Parameters v_resultstr := 'ReadingParameters'; FOR cur_parameter IN (SELECT i.record_id, i.ad_user_id, p.parametername, p.p_string, p.p_number, p.p_date FROM ad_pinstance i LEFT JOIN ad_pinstance_para p ON i.ad_pinstance_id = p.ad_pinstance_id WHERE i.ad_pinstance_id = p_pinstance_id ORDER BY p.seqno) LOOP v_record_id := cur_parameter.record_id; END LOOP; -- Get Parameter RAISE NOTICE '%',' v_Record_ID=' || v_record_id; BEGIN -- BODY select dateto, ad_client_id, ad_org_id, createdby, updatedby, generatepayment, c_acctschema_id, c_currency_id, name, C_BPARTNER_ID, processed into v_date, v_client_id, v_org_id, v_createdby, v_updatedby, v_ispayment, v_acctschema_id, v_currency_id, v_name, v_bpartner_id, v_processed from c_taxpayment where c_taxpayment_id=v_record_id; select max(gl_category_id) into v_gl_category_id from gl_category where name='Standard'; v_paymentrule := 'T'; v_currencyratetype := 'S'; select c_calendar_id into v_calendar_ID from ad_org where ad_org_id = ad_org_getcalendarowner(v_org_id); select c_period_id into v_period_id from c_period where enddate = (select max(enddate) from c_period where enddate <=v_date and exists (select 1 from c_year where c_calendar_id = v_calendar_ID and c_period.c_year_id = c_year.c_year_id)) and exists (select 1 from c_year where c_calendar_id = v_calendar_ID and c_period.c_year_id = c_year.c_year_id); --start processing update c_taxpayment set processing='Y' where c_taxpayment_id=v_record_id; --unprocess if v_processed='Y' then begin select tp.gl_journal_id , gljb.gl_journalbatch_id, tp.c_settlement_id into v_gl_journalid, v_gl_journalbatchid, v_settlementid from c_taxpayment tp inner join gl_journal glj on tp.gl_journal_id=glj.gl_journal_id inner join gl_journalbatch gljb on gljb.gl_journalbatch_id=glj.gl_journalbatch_id where tp.C_TAXPAYMENT_ID = v_record_id; update gl_journal set docaction='RE' where gl_journal_id=v_gl_journalid; select posted into v_posted from gl_journal where gl_journal_id=v_gl_journalid; if v_posted = 'Y' then RAISE EXCEPTION '%', '@GLJournalDocumentPosted@' ; --OBTG:-20000-- end if; PERFORM GL_JOURNAL_POST(null, v_gl_journalid); update c_taxpayment set gl_journal_id=null where c_taxpayment.C_TAXPAYMENT_ID = v_record_id; delete from gl_journalline where gl_journal_id=v_gl_journalid; delete from gl_journal where gl_journal_id=v_gl_journalid; delete from gl_journalbatch where gl_journalbatch_id=v_gl_journalbatchid; if v_ispayment = 'Y' then PERFORM C_SETTLEMENT_POST(null, v_settlementid); update c_taxpayment set c_settlement_id=null where c_taxpayment.C_TAXPAYMENT_ID = v_record_id; delete from c_debt_payment_balancing where c_debt_payment_id in (select c_debt_payment_id from c_debt_payment where c_settlement_generate_id = v_settlementid); delete from c_debt_payment where c_settlement_generate_id = v_settlementid; delete from c_settlement where c_settlement_id=v_settlementid; end if; end; update c_taxpayment set processed='N' where c_taxpayment.C_TAXPAYMENT_ID = v_record_id; end if; if v_processed='N' then begin --gl journal SELECT * INTO v_gl_journalbatchid FROM ad_sequence_next('GL_JournalBatch', v_record_id); SELECT * INTO v_gljbdocumentno FROM ad_sequence_doc('DocumentNo_GL_JournalBatch', v_client_id, 'Y'); insert into gl_journalbatch (gl_journalbatch_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, documentno, description, postingtype, datedoc, dateacct, c_period_id, c_currency_id) values (v_gl_journalbatchid, v_client_id, v_org_id,'Y', TO_DATE(NOW()), v_createdby, TO_DATE(NOW()), v_updatedby, v_gljbdocumentno, v_name, 'A', v_date, v_date, v_period_id, v_currency_id); v_gl_journaldoctype_id := ad_get_doctype(v_client_id, v_org_id, to_char('GLJ')); SELECT * INTO v_gl_journalid FROM ad_sequence_next('GL_Journal', v_record_id); SELECT * INTO v_gljdocumentno FROM ad_sequence_doctype(v_gl_journaldoctype_id, v_record_id, 'Y'); insert into gl_journal (gl_journal_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, c_acctschema_id, c_doctype_id, documentno, docstatus, docaction, isapproved,description, postingtype, gl_category_id, datedoc, dateacct, c_period_id, c_currency_id, currencyratetype, gl_journalbatch_id) values (v_gl_journalid, v_client_id, v_org_id,'Y', TO_DATE(NOW()), v_createdby, TO_DATE(NOW()), v_updatedby, v_acctschema_id, v_gl_journaldoctype_id, v_gljdocumentno, 'DR', 'CO', 'Y', v_name, 'A', v_gl_category_id, v_date, v_date, v_period_id, v_currency_id, v_currencyratetype, v_gl_journalbatchid); v_line:=0; v_totaldebit:=0; v_totalcredit:=0; for cur_line in (select ttl.c_tax_id, tt.issotrx, case when tt.issotrx='Y' then max(ta.t_due_acct) else max(ta.t_credit_acct) end as acct_id from c_taxregister_type_lines ttl inner join c_taxregister_type tt on ttl.c_taxregister_type_id=tt.c_taxregister_type_id inner join c_tax_acct ta on ta.c_tax_id=ttl.c_tax_id where tt.isactive='Y' and ttl.isactive='Y' and ta.isactive='Y' group by ttl.c_tax_id, tt.issotrx ) loop --move the sum over select sum(trl.taxamt) into v_taxamtfromreglines from c_taxregisterline trl inner join c_taxregister tr on tr.c_taxregister_id=trl.c_taxregister_id inner join c_taxregister_type trt on trt.c_taxregister_type_id=tr.c_taxregister_type_id where trl.c_tax_id=cur_line.c_tax_id and trt.issotrx=cur_line.issotrx and tr.c_taxpayment_id=v_record_id; SELECT * INTO v_gl_journallineid FROM ad_sequence_next('GL_JournalLine', v_record_id); if v_taxamtfromreglines is null then v_taxamtfromreglines := 0; end if; if cur_line.issotrx='N' then v_credit := v_taxamtfromreglines; v_debit := 0; else v_credit := 0; v_debit := v_taxamtfromreglines; end if; if v_taxamtfromreglines <> 0 then begin v_line := v_line + 10; insert into gl_journalline(gl_journalline_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, gl_journal_id, line, c_currency_id, currencyratetype, dateacct, c_validcombination_id, AMTSOURCEDR, AMTSOURCECR, AMTACCTDR, AMTACCTCR) values (v_gl_journallineid, v_client_id, v_org_id,'Y', TO_DATE(NOW()), v_createdby, TO_DATE(NOW()), v_updatedby, v_gl_journalid, v_line, v_currency_id, v_currencyratetype, v_date, cur_line.acct_id, v_debit, v_credit, v_debit, v_credit); end; end if; v_totaldebit := v_totaldebit+v_credit; v_totalcredit := v_totalcredit+v_debit; end loop; select count(*) into v_TRTcountY from c_taxregister_type tt where tt.issotrx='Y'; select count(*) into v_TRTcountN from c_taxregister_type tt where tt.issotrx='N'; if v_TRTcountY=0 or v_TRTcountN=0 then RAISE EXCEPTION '%', '@TwoRegisterTypesNeeded@'; --OBTG:-20100-- end if; select case when tt.issotrx='Y' then max(glitem_debit_acct) else max(glitem_credit_acct) end, max(tt.c_glitem_id) into v_glitem_acct, v_glitem_id from c_taxregister_type tt inner join c_glitem_acct gia on gia.c_glitem_id=tt.c_glitem_id where tt.isactive='Y' and gia.isactive='Y' and tt.issotrx= case when v_totalcredit - v_totaldebit > 0 then 'N' else 'Y' end group by tt.issotrx; if v_totalcredit - v_totaldebit > 0 then v_totalcredit := v_totalcredit - v_totaldebit; v_totaldebit := 0; else v_totaldebit := v_totaldebit - v_totalcredit; v_totalcredit := 0; end if; v_line := v_line + 10; SELECT * INTO v_gl_journallineid FROM ad_sequence_next('GL_JournalLine', v_record_id); insert into gl_journalline(gl_journalline_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, gl_journal_id, line, c_currency_id, currencyratetype, dateacct, c_validcombination_id, AMTSOURCEDR, AMTSOURCECR, AMTACCTDR, AMTACCTCR) values (v_gl_journallineid, v_client_id, v_org_id, 'Y', TO_DATE(NOW()), v_createdby, TO_DATE(NOW()), v_updatedby, v_gl_journalid, v_line, v_currency_id, v_currencyratetype, v_date, v_glitem_acct, v_totaldebit, v_totalcredit, v_totaldebit, v_totalcredit); PERFORM GL_JOURNAL_POST(null, v_gl_journalid); UPDATE c_taxpayment SET gl_journal_id = v_gl_journalid where c_taxpayment.C_TAXPAYMENT_ID = v_record_id; --settlement if v_ispayment='Y' then v_settlementdoctype_id := ad_get_doctype(v_client_id, v_org_id, to_char('STM')); SELECT * INTO v_settlementid FROM ad_sequence_next('C_Settlement', v_record_id); SELECT * INTO v_sdocumentno FROM ad_sequence_doctype(v_settlementdoctype_id, v_record_id, 'Y'); IF(v_sdocumentno IS NULL) THEN --to do send by mail SELECT * INTO v_sdocumentno FROM ad_sequence_doc('DocumentNo_C_Settlement', v_client_id, 'Y'); END IF; INSERT INTO c_settlement(c_settlement_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, documentno, datetrx, dateacct, settlementtype, c_doctype_id, processing, processed, posted, createfrom, isgenerated, c_currency_id) SELECT v_settlementid, ad_client_id, ad_org_id, 'Y', TO_DATE(NOW()), createdby, TO_DATE(NOW()), updatedby, v_sdocumentno, v_date, TRUNC(TO_DATE(NOW())), 'I', v_settlementdoctype_id, 'N', 'N', 'N', 'N', 'N', v_currency_id FROM c_taxpayment WHERE c_taxpayment_id = v_record_id; select sum(case when c_taxregister.C_TAXREGISTER_TYPE_ID in (select C_TAXREGISTER_TYPE_ID from c_taxregister_type where c_taxregister_type.ISSOTRX='Y') then taxtotalamt else -taxtotalamt end ), sum(case when c_taxregister.C_TAXREGISTER_TYPE_ID in (select C_TAXREGISTER_TYPE_ID from c_taxregister_type where c_taxregister_type.ISSOTRX='Y') then -lastregaccumamt else lastregaccumamt end ) into v_taxtotalamt, v_prevvatcredit from c_taxregister where c_taxregister.C_TAXPAYMENT_ID=v_record_id; if v_prevvatcredit < 0 then v_prevvatcredit := 0; end if; v_paymentamt := v_taxtotalamt - v_prevvatcredit; if v_paymentamt <=0 then begin v_isreceipt:='Y'; v_paymentamt:=(-1)*v_paymentamt; v_paymentcreditamt := v_paymentamt; v_paymentdebitamt := 0; end; else begin v_isreceipt:='N'; v_paymentcreditamt := 0; v_paymentdebitamt := v_paymentamt; end; end if; SELECT * INTO v_debtpaymentid FROM ad_sequence_next('C_Debt_Payment', v_record_id); INSERT INTO c_debt_payment(c_debt_payment_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, isreceipt, c_settlement_cancel_id, c_settlement_generate_id, description, c_invoice_id, c_bpartner_id, c_currency_id, c_cashline_id, c_bankaccount_id, c_cashbook_id, paymentrule, ispaid, amount, writeoffamt, dateplanned, ismanual, isvalid, c_bankstatementline_id, changesettlementcancel, cancel_processed, generate_processed, c_project_id, status, status_initial) VALUES(v_debtpaymentid, v_client_id, v_org_id, 'Y', TO_DATE(NOW()), v_createdby, TO_DATE(NOW()), v_updatedby, v_isreceipt, NULL, v_settlementid, v_name, NULL, v_bpartner_id, v_currency_id, NULL, NULL, NULL, v_paymentrule, 'N', v_paymentamt , 0, v_date, 'Y', 'Y', NULL, 'N', 'N', 'Y', null, 'DE', 'DE'); SELECT * INTO v_debtpaymentbalancingid FROM ad_sequence_next('C_Debt_Payment_Balancing', v_record_id); insert into c_debt_payment_balancing(c_debt_payment_balancing_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, c_debt_payment_id, AMOUNTDEBIT, AMOUNTCREDIT, C_GLITEM_ID) values(v_debtpaymentbalancingid, v_client_id, v_org_id, 'Y', TO_DATE(NOW()), v_createdby, TO_DATE(NOW()), v_updatedby, v_debtpaymentid, v_paymentdebitamt, v_paymentcreditamt, v_glitem_id); PERFORM C_SETTLEMENT_POST(null, v_settlementid); UPDATE c_taxpayment SET c_settlement_id = v_settlementid where c_taxpayment.C_TAXPAYMENT_ID = v_record_id; end if; UPDATE c_taxpayment SET processed = 'Y' where c_taxpayment.C_TAXPAYMENT_ID = v_record_id; END; end if; -- stop processing update c_taxpayment set processing='N' where c_taxpayment_id=v_record_id; end; IF(p_pinstance_id IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished'; PERFORM AD_UPDATE_PINSTANCE(p_pinstance_id, v_updatedby, 'N', v_result, v_message); ELSE RAISE NOTICE '%','--<> ' || v_message; END IF; EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE -- ROLLBACK; RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $$ LANGUAGE plpgsql; JDROP FUNCTION public.c_taxpayment_post(p_pinstance_id character varying); publictadfalse23416a125595527c_taxpayment_trg()FUNCTION8CREATE FUNCTION c_taxpayment_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Insert Translation */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF (OLD.PROCESSED)='Y' AND (OLD.processing) = 'N' and (OLD.processing)=(new.processing) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.PROCESSED='Y') AND (new.processing= 'N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(OLD.PROCESSED='Y') AND (OLD.processing= 'N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; )DROP FUNCTION public.c_taxpayment_trg(); publictadfalse23416c125595531c_taxregister_trg()FUNCTIONCREATE FUNCTION c_taxregister_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ________________________________. ************************************************************************/ V_PROCESSED VARCHAR(60); V_PROCESSING VARCHAR(60); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN SELECT PROCESSED, PROCESSING INTO V_PROCESSED, V_PROCESSING FROM C_TAXPAYMENT WHERE C_TAXPAYMENT_ID=(OLD.C_TAXPAYMENT_ID); IF(V_PROCESSED='Y' AND V_PROCESSING='N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN SELECT PROCESSED, PROCESSING INTO V_PROCESSED, V_PROCESSING FROM C_TAXPAYMENT WHERE C_TAXPAYMENT_ID=(new.C_TAXPAYMENT_ID); IF(V_PROCESSED='Y' AND V_PROCESSING='N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN SELECT PROCESSED, PROCESSING INTO V_PROCESSED, V_PROCESSING FROM C_TAXPAYMENT WHERE C_TAXPAYMENT_ID=(OLD.C_TAXPAYMENT_ID); IF(V_PROCESSED='Y' AND V_PROCESSING='N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_taxregister_trg(); publictadfalse23416b125595529c_taxregisterline_trg()FUNCTION CREATE FUNCTION c_taxregisterline_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ________________________________. ************************************************************************/ V_PROCESSED VARCHAR(60); V_PROCESSING VARCHAR(60); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN SELECT TP.PROCESSED, TP.PROCESSING INTO V_PROCESSED, V_PROCESSING FROM C_TAXPAYMENT TP INNER JOIN C_TAXREGISTER TR ON TP.C_TAXPAYMENT_ID=TR.C_TAXPAYMENT_ID WHERE TR.C_TAXREGISTER_ID=(OLD.C_TAXREGISTER_ID); IF(V_PROCESSED='Y' AND V_PROCESSING='N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN SELECT TP.PROCESSED, TP.PROCESSING INTO V_PROCESSED, V_PROCESSING FROM C_TAXPAYMENT TP INNER JOIN C_TAXREGISTER TR ON TP.C_TAXPAYMENT_ID=TR.C_TAXPAYMENT_ID WHERE TR.C_TAXREGISTER_ID=(NEW.C_TAXREGISTER_ID); IF(V_PROCESSED='Y' AND V_PROCESSING='N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN SELECT TP.PROCESSED, TP.PROCESSING INTO V_PROCESSED, V_PROCESSING FROM C_TAXPAYMENT TP INNER JOIN C_TAXREGISTER TR ON TP.C_TAXPAYMENT_ID=TR.C_TAXPAYMENT_ID WHERE TR.C_TAXREGISTER_ID=(OLD.C_TAXREGISTER_ID); IF(V_PROCESSED='Y' AND V_PROCESSING='N') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; .DROP FUNCTION public.c_taxregisterline_trg(); publictadfalse23416125536770c_trim(character varying)FUNCTION(CREATE FUNCTION c_trim(p_str character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_str VARCHAR(4000) ; --OBTG:VARCHAR2-- BEGIN v_str:=p_str; WHILE(INSTR(v_str, ' ', 1, 1) <> 0) LOOP v_str:=REPLACE(v_str, ' ', ' ') ; END LOOP; v_str:=LTRIM(RTRIM(v_str)) ; RETURN(v_str) ; END ; $$ LANGUAGE plpgsql; 6DROP FUNCTION public.c_trim(p_str character varying); publictadfalse23416125536771Oc_uom_convert(numeric, character varying, character varying, character varying)FUNCTION CREATE FUNCTION c_uom_convert(p_qty numeric, p_uomfrom_id character varying, p_uomto_id character varying, p_stdprecision character varying) RETURNS numeric AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_UOM_Convert.sql,v 1.3 2002/10/21 04:49:45 jjanke Exp $ *** * Title: Convert Quantity * Description: * from UOMFrom_ID to UOMTo_ID * standard or costing precision based on target UOM * Test: * SELECT C_UOM_Convert (11,101,102, 'Y') FROM DUAL => 1.38 ************************************************************************/ v_Result NUMERIC:= NULL; v_Rate NUMERIC:= NULL; v_StdPrecision NUMERIC; v_CostingPrecision NUMERIC; BEGIN -- Nothing to do IF(p_UOMFrom_ID = p_UOMTo_ID OR p_UOMFrom_ID IS NULL OR p_UOMTo_ID IS NULL OR p_Qty IS NULL OR p_Qty = 0) THEN RETURN p_Qty; END IF; -- Get Multiply Rate BEGIN SELECT MultiplyRate INTO v_Rate FROM C_UOM_Conversion WHERE C_UOM_ID = p_UOMFrom_ID AND C_UOM_TO_ID = p_UOMTo_ID; -- We have it v_Result := p_Qty * v_Rate; EXCEPTION WHEN OTHERS THEN NULL; END; -- Get Divide Rate IF(v_Result IS NULL) THEN BEGIN SELECT DivideRate INTO v_Rate FROM C_UOM_Conversion WHERE C_UOM_ID = p_UOMTo_ID AND C_UOM_TO_ID = p_UOMFrom_ID; -- We have it v_Result := p_Qty * v_Rate; EXCEPTION WHEN OTHERS THEN NULL; END; END IF; -- Round IF(v_Result IS NOT NULL) THEN BEGIN SELECT StdPrecision, CostingPrecision INTO v_StdPrecision, v_CostingPrecision FROM C_UOM WHERE C_UOM_ID = p_UOMTo_ID; -- We have a precision IF(p_StdPrecision = 'Y') THEN v_Result := ROUND(v_Result, v_StdPrecision) ; ELSE v_Result := ROUND(v_Result, v_CostingPrecision) ; END IF; EXCEPTION WHEN OTHERS THEN NULL; END; END IF; RETURN v_Result; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_uom_convert(p_qty numeric, p_uomfrom_id character varying, p_uomto_id character varying, p_stdprecision character varying); publictadfalse23416f125595538 c_uom_trg()FUNCTIONv CREATE FUNCTION c_uom_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_UOM_Trg.sql,v 1.2 2002/09/13 06:03:44 jjanke Exp $ *** * Title: UOM Translation * Description: ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN -- Create Translation Row INSERT INTO C_UOM_Trl ( C_UOM_Trl_ID, C_UOM_ID, AD_Language, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, UOMSymbol, Name, Description, IsTranslated ) SELECT get_uuid(), new.C_UOM_ID, AD_Language, new.AD_Client_ID, new.AD_Org_ID, new.IsActive, new.Created, new.CreatedBy, new.Updated, new.UpdatedBy, new.UOMSymbol, new.Name, new.Description, 'N' FROM AD_Language WHERE IsActive='Y' AND IsSystemLanguage='Y'; END IF; -- Inserting IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.UOMSymbol, '...') <> COALESCE(NEW.UOMSymbol, '...')) OR(COALESCE(old.Name, '.') <> COALESCE(NEW.Name, '.')) OR(COALESCE(old.Description, '.') <> COALESCE(NEW.Description, '.'))) THEN -- Translation UPDATE C_UOM_Trl SET IsTranslated='N', Updated=TO_DATE(NOW()) WHERE C_UOM_ID=new.C_UOM_ID; END IF; END IF; -- Updating IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; "DROP FUNCTION public.c_uom_trg(); publictadfalse23416125536773cc_validcombination_clone(character varying, character varying, character varying, numeric, numeric)FUNCTION:CREATE FUNCTION c_validcombination_clone(p_orginal_validcombination character varying, p_sequenceno character varying, p_accountname character varying, p_acct_length numeric, p_subacct_length numeric, OUT p_result character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Node_ID VARCHAR(32) :=null; --OBTG:varchar2-- v_AD_TREE_ID VARCHAR(32) :=null; --OBTG:varchar2-- v_PARENT_ID VARCHAR(32) :=null; --OBTG:varchar2-- v_SeqNo NUMERIC(38); v_Next_Sequence_No VARCHAR(32) :=null; --OBTG:varchar2-- v_Account_No VARCHAR(32) :=null; --OBTG:varchar2-- v_Acct_No_For_SubAccount VARCHAR(32) :=null; --OBTG:varchar2-- v_Subacct_No VARCHAR(32) :=null; --OBTG:varchar2-- v_New_SubAccount_No VARCHAR(32) :=null; --OBTG:varchar2-- v_Default_Account_No VARCHAR(32) :=null; --OBTG:varchar2-- v_Seq_No_For_Subaccount_No VARCHAR(32) :=null; --OBTG:varchar2-- v_Default_Account_Name VARCHAR(60) :=null; --OBTG:varchar2-- v_Default_Account_Desc CHARACTER VARYING(255); --OBTG:varchar2-- v_Default_Account_Client_ID VARCHAR(32); --OBTG:varchar2-- v_Org_ID VARCHAR(32); --OBTG:varchar2-- v_Account_ID VARCHAR(32); --OBTG:varchar2-- v_seq_name CHARACTER VARYING(255); --OBTG:varchar2-- v_C_AcctSchema_ID VARCHAR(32) :=null; --OBTG:varchar2-- v_UpdateSequence CHAR; tmp_Subaccout_no VARCHAR(32) :=null; --OBTG:varchar2-- v_C_ElementValue_ID VARCHAR(32) :=null; --OBTG:varchar2-- BEGIN IF (p_orginal_validcombination IS NULL) THEN p_Result:=null; END IF; v_C_ElementValue_ID := GET_UUID(); /* Querying the default Account NUMERIC, Client ID, Account Schema ID for cloning. */ SELECT C_ElementValue.Value, C_ElementValue.Name, C_ElementValue.Description, C_ElementValue.AD_Client_ID, C_ElementValue.C_ElementValue_ID, C_ValidCombination.C_AcctSchema_ID, C_ElementValue.AD_Org_ID INTO v_Default_Account_No, v_Default_Account_Name, v_Default_Account_Desc, v_Default_Account_Client_ID, v_Node_ID, v_C_AcctSchema_ID, v_Org_ID FROM C_ValidCombination, C_ElementValue WHERE C_ValidCombination.Account_ID = C_ElementValue.C_ElementValue_ID AND C_ValidCombination_ID =p_Orginal_Validcombination; -- Logic for generating the New Sub account number from Original Accounts. v_Acct_No_For_SubAccount:=SUBSTR(v_Default_Account_No,1,p_Acct_Length); tmp_Subaccout_no := p_Subacct_Length - p_Acct_Length; v_Seq_No_For_Subaccount_No:= lpad(p_SequenceNo,cast(tmp_Subaccout_no as integer),'0'); v_New_Subaccount_No:= v_Acct_No_For_SubAccount || v_Seq_No_For_Subaccount_No; /* Inserting the new element value for new account for Business Partner Or Product. */ INSERT INTO C_ElementValue ( C_ElementValue_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Value, Name, Description, AccountType, AccountSign, IsDocControlled, C_Element_ID, IsSummary, ValidFrom, ValidTo, PostActual, PostBudget, PostEncumbrance, PostStatistical, IsBankAccount, C_BankAccount_ID, IsForeignCurrency, C_Currency_ID , ShowElement , ShowValueCond , ElementLevel) SELECT v_C_ElementValue_ID, EV.AD_Client_ID, EV.AD_Org_ID, EV.IsActive, TO_DATE(NOW()), EV.CreatedBy, TO_DATE(NOW()), EV.UpdatedBy, v_New_Subaccount_No, case when (p_accountName is not null) then (EV.Name || ' - ' || p_accountName) else EV.Name end, EV.Description, EV.AccountType, EV.AccountSign, EV.IsDocControlled, EV.C_Element_ID, EV.IsSummary, EV.ValidFrom, EV.ValidTo, EV.PostActual, EV.PostBudget, EV.PostEncumbrance, EV.PostStatistical, EV.IsBankAccount, EV.C_BankAccount_ID, EV.IsForeignCurrency, EV.C_Currency_ID, EV.ShowElement, EV.ShowValueCond, EV.ElementLevel FROM C_ValidCombination VC, C_ElementValue EV WHERE VC.Account_ID = EV.C_ElementValue_ID AND VC.C_ValidCombination_ID = p_orginal_validcombination; SELECT AD_TREE_ID INTO v_AD_TREE_ID FROM C_ACCTSCHEMA_ELEMENT, C_ELEMENT WHERE C_ACCTSCHEMA_ELEMENT.C_ELEMENT_ID = C_ELEMENT.C_ELEMENT_ID AND C_ACCTSCHEMA_ELEMENT.ELEMENTTYPE = 'AC' AND C_ACCTSCHEMA_ELEMENT.C_ACCTSCHEMA_ID = v_C_AcctSchema_ID; SELECT PARENT_ID INTO v_PARENT_ID FROM ad_treenode WHERE AD_TREE_ID = v_AD_TREE_ID AND NODE_ID = v_Node_ID; SELECT MAX(COALESCE(SEQNO,0)) + 10 INTO v_SEQNO FROM ad_treenode WHERE AD_TREE_ID = v_AD_TREE_ID AND PARENT_ID = v_PARENT_ID; UPDATE AD_TREENODE SET PARENT_ID = (SELECT PARENT_ID FROM ad_treenode WHERE AD_TREE_ID = v_AD_TREE_ID AND NODE_ID = v_Node_ID ), SEQNO = v_SEQNO WHERE NODE_ID = V_C_ElementValue_ID; /* Function call to Retrieve the new account NUMERIC for Business Partner or Product. */ SELECT * INTO p_Result FROM C_ValidCombination_Insert( v_Default_Account_Client_ID, v_Org_ID, v_C_AcctSchema_ID, v_C_ElementValue_ID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_clone(p_orginal_validcombination character varying, p_sequenceno character varying, p_accountname character varying, p_acct_length numeric, p_subacct_length numeric, OUT p_result character varying); publictadfalse23416125536775wc_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTION(CREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying, p_user2_id character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_ValidCombination_Get.sql,v 1.4 2003/07/22 18:49:41 jjanke Exp $ *** * Title: Create Valid Account Code Combination * Description: * Get a Valid Account Combination * 1) Create template for combination * - if base combination (b_) != NULL, retrieve existing VC * - replace with NOT NULL transaction values (p_) elements * 2) Check, if combination exists * - yes, return target combination (t_) * - otherwise create it * Returns NULL if not all mandatory fields have values * or if p_MustBeFullyQualified=Y and found combination is not fully qualified *** * Problem is that it does not create accounts with null values! ************************************************************************/ -- Base Combination --TYPE RECORD IS REFCURSOR; Cur_Base_VC RECORD; Cur_Existing_VC RECORD; -- Target Combination v_AD_Client_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_AcctSchema_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Account_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_M_Product_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_BPartner_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_AD_OrgTrx_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_LocFrom_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_LocTo_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_SalesRegion_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Project_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Campaign_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Activity_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_User1_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_User2_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_CreatedBy VARCHAR(32):=NULL; --OBTG:VARCHAR2-- -- Existance Loop - Get first fully qualified matching combination -- FoundValue CHAR(1):='N'; RetValue VARCHAR(32):=NULL; --OBTG:VARCHAR2-- fullyQualified CHAR(1) ; BEGIN -- 1a -- Fill with base info IF(p_b_C_ValidCombination_ID!=NULL) THEN -- Actually only one value possible, for convineance FOR Cur_Base_VC in (SELECT * FROM C_ValidCombination WHERE C_ValidCombination_ID=p_b_C_ValidCombination_ID ) LOOP RAISE NOTICE '%','Base VC found' ; -- mandatory fields v_AD_Client_ID:=Cur_Base_VC.AD_Client_ID; v_AD_Org_ID:=Cur_Base_VC.AD_Org_ID; v_C_AcctSchema_ID:=Cur_Base_VC.C_AcctSchema_ID; v_Account_ID:=Cur_Base_VC.Account_ID; -- optional fields v_M_Product_ID:=Cur_Base_VC.M_Product_ID; v_C_BPartner_ID:=Cur_Base_VC.C_BPartner_ID; v_AD_OrgTrx_ID:=Cur_Base_VC.AD_OrgTrx_ID; v_C_LocFrom_ID:=Cur_Base_VC.C_LocFrom_ID; v_C_LocTo_ID:=Cur_Base_VC.C_LocTo_ID; v_C_SalesRegion_ID:=Cur_Base_VC.C_SalesRegion_ID; v_C_Project_ID:=Cur_Base_VC.C_Project_ID; v_C_Campaign_ID:=Cur_Base_VC.C_Campaign_ID; v_C_Activity_ID:=Cur_Base_VC.C_Activity_ID; v_User1_ID:=Cur_Base_VC.User1_ID; v_User2_ID:=Cur_Base_VC.User2_ID; END LOOP; END IF; -- 1b -- Update target values IF(p_AD_Client_ID IS NOT NULL) THEN v_AD_Client_ID:=p_AD_Client_ID; END IF; IF(p_AD_Org_ID IS NOT NULL) THEN v_AD_Org_ID:=p_AD_Org_ID; END IF; IF(p_C_AcctSchema_ID IS NOT NULL) THEN v_C_AcctSchema_ID:=p_C_AcctSchema_ID; END IF; IF(p_Account_ID IS NOT NULL) THEN v_Account_ID:=p_Account_ID; END IF; -- optional fields IF(p_M_Product_ID IS NOT NULL) THEN v_M_Product_ID:=p_M_Product_ID; END IF; IF(p_C_BPartner_ID IS NOT NULL) THEN v_C_BPartner_ID:=p_C_BPartner_ID; END IF; IF(p_AD_OrgTrx_ID IS NOT NULL) THEN v_AD_OrgTrx_ID:=p_AD_OrgTrx_ID; END IF; IF(p_C_LocFrom_ID IS NOT NULL) THEN v_C_LocFrom_ID:=p_C_LocFrom_ID; END IF; IF(p_C_LocTo_ID IS NOT NULL) THEN v_C_LocTo_ID:=p_C_LocTo_ID; END IF; IF(p_C_SalesRegion_ID IS NOT NULL) THEN v_C_SalesRegion_ID:=p_C_SalesRegion_ID; END IF; IF(p_C_Project_ID IS NOT NULL) THEN v_C_Project_ID:=p_C_Project_ID; END IF; IF(p_C_Campaign_ID IS NOT NULL) THEN v_C_Campaign_ID:=p_C_Campaign_ID; END IF; IF(p_C_Activity_ID IS NOT NULL) THEN v_C_Activity_ID:=p_C_Activity_ID; END IF; IF(p_User1_ID IS NOT NULL) THEN v_User1_ID:=p_User1_ID; END IF; IF(p_User2_ID IS NOT NULL) THEN v_User2_ID:=p_User2_ID; END IF; -- Are nandatory elements null:1 IF(v_AD_Client_ID IS NULL OR v_AD_Org_ID IS NULL OR v_C_AcctSchema_ID IS NULL OR v_Account_ID IS NULL) THEN RAISE NOTICE '%','Mandatory Fields Null' ; p_C_ValidCombination_ID:=NULL; RETURN; END IF; -- DBMS_OUTPUT.PUT_LINE('v_M_Product_ID=' || v_M_Product_ID); -- Existance check FOR Cur_Existing_VC IN (SELECT * FROM C_ValidCombination -- Mandatory fields WHERE AD_Client_ID=v_AD_Client_ID AND AD_Org_ID=v_AD_Org_ID AND C_AcctSchema_ID=v_C_AcctSchema_ID AND Account_ID=v_Account_ID -- Optional fields AND(v_M_Product_ID IS NULL OR M_Product_ID=v_M_Product_ID) AND(v_C_BPartner_ID IS NULL OR C_BPartner_ID=v_C_BPartner_ID) AND(v_AD_OrgTrx_ID IS NULL OR AD_OrgTrx_ID=v_AD_OrgTrx_ID) AND(v_C_LocFrom_ID IS NULL OR C_LocFrom_ID=v_C_LocFrom_ID) AND(v_C_LocTo_ID IS NULL OR C_LocTo_ID=v_C_LocTo_ID) AND(v_C_SalesRegion_ID IS NULL OR C_SalesRegion_ID=v_C_SalesRegion_ID) AND(v_C_Project_ID IS NULL OR C_Project_ID=v_C_Project_ID) AND(v_C_Campaign_ID IS NULL OR C_Campaign_ID=v_C_Campaign_ID) AND(v_C_Activity_ID IS NULL OR C_Activity_ID=v_C_Activity_ID) AND(v_User1_ID IS NULL OR User1_ID=v_User1_ID) AND(v_User2_ID IS NULL OR User2_ID=v_User2_ID) AND IsActive='Y' -- Y comes after N ORDER BY IsFullyQualified DESC ) LOOP -- DBMS_OUTPUT.PUT_LINE('C_ValidCombination_ID=' || e.C_ValidCombination_ID || ', M_Product_ID=' || e.M_Product_ID); IF(FoundValue='N') THEN FoundValue:='Y'; IF(p_MustBeFullyQualified='Y' AND Cur_Existing_VC.IsFullyQualified='N') THEN RAISE NOTICE '%','Combination found but not fully qualified - ' || Cur_Existing_VC.C_ValidCombination_ID ; RetValue:=NULL; END IF; RetValue:=Cur_Existing_VC.C_ValidCombination_ID; END IF; END LOOP; -- We found a value IF(FoundValue='Y') THEN p_C_ValidCombination_ID:=RetValue; RAISE NOTICE '%','Found Combination' || p_C_ValidCombination_ID ; RETURN; END IF; -- No Combination found - so create one RAISE NOTICE '%','Create new' ; SELECT * INTO p_C_ValidCombination_ID FROM AD_Sequence_Next('C_ValidCombination', v_AD_Client_ID) ; v_CreatedBy:=p_CreatedBy; IF(v_CreatedBy IS NULL) THEN v_CreatedBy:=0; END IF; -- Don't catch trigger or integrity errors - let it fail INSERT INTO C_ValidCombination ( C_ValidCombination_ID, IsFullyQualified, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Alias, C_AcctSchema_ID, Account_ID, M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID, C_LocFrom_ID, C_LocTo_ID, C_SalesRegion_ID, C_Project_ID, C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID ) VALUES ( p_C_ValidCombination_ID, p_MustBeFullyQualified, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_CreatedBy, TO_DATE(NOW()), v_CreatedBy, p_Alias, v_C_AcctSchema_ID, v_Account_ID, v_M_Product_ID, v_C_BPartner_ID, v_AD_OrgTrx_ID, v_C_LocFrom_ID, v_C_LocTo_ID, v_C_SalesRegion_ID, v_C_Project_ID, v_C_Campaign_ID, v_C_Activity_ID, v_User1_ID, v_User2_ID ) ; -- Commented by cromero 19102006 -- COMMIT; -- Read Trigger result (fully qualified) IF(p_MustBeFullyQualified='Y') THEN SELECT IsFullyQualified INTO fullyQualified FROM C_ValidCombination WHERE C_ValidCombination_ID=p_C_ValidCombination_ID; -- IF(fullyQualified='N') THEN RAISE NOTICE '%','New Combination not fully qualified - ' || p_C_ValidCombination_ID ; p_C_ValidCombination_ID:=NULL; END IF; END IF; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying, p_user2_id character varying); publictadfalse23416125536777dc_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying); publictadfalse23416125536778Qc_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONsCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying); publictadfalse23416125536779>c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONKCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying); publictadfalse23416125536780+c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTION#CREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, NULL); END ; $_$ LANGUAGE plpgsql; \DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying); publictadfalse23416125536781c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, NULL); END ; $_$ LANGUAGE plpgsql; :DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying); publictadfalse23416125536782c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying); publictadfalse23416125536783c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying); publictadfalse23416125536784c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying); publictadfalse23416125536785c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying)FUNCTION^CREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying); publictadfalse23416125536786c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying)FUNCTION6CREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, $10, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying); publictadfalse23416125536787c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, $9, NULL); END ; $_$ LANGUAGE plpgsql; kDROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying); publictadfalse23416125536788c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, $8, NULL); END ; $_$ LANGUAGE plpgsql; LDROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying); publictadfalse23416125536789c_validcombination_get(character varying, character varying, character varying, character varying, character varying, character)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, $7, NULL); END ; $_$ LANGUAGE plpgsql; 1DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character); publictadfalse23416125536790uc_validcombination_get(character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_GET( $2, $3, $4, $5, $6, 'N'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_get(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying); publictadfalse23416125536791zc_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONH&CREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying, p_user2_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Base Combination --TYPE RECORD IS REFCURSOR; Cur_Base_VC RECORD; Cur_Existing_VC RECORD; -- Target Combination v_AD_Client_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_AcctSchema_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Account_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_M_Product_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_BPartner_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_AD_OrgTrx_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_LocFrom_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_LocTo_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_SalesRegion_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Project_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Campaign_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_C_Activity_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_User1_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_User2_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_CreatedBy VARCHAR(32):=NULL; --OBTG:VARCHAR2-- -- Existance Loop - Get first fully qualified matching combination -- FoundValue CHAR(1):='N'; RetValue NUMERIC:=NULL; fullyQualified CHAR(1) ; BEGIN -- 1a -- Fill with base info IF(p_b_C_ValidCombination_ID!=NULL) THEN -- Actually only one value possible, for convineance FOR Cur_Base_VC in (SELECT * FROM C_ValidCombination WHERE C_ValidCombination_ID=p_b_C_ValidCombination_ID ) LOOP RAISE NOTICE '%','Base VC found' ; -- mandatory fields v_AD_Client_ID:=Cur_Base_VC.AD_Client_ID; v_AD_Org_ID:=Cur_Base_VC.AD_Org_ID; v_C_AcctSchema_ID:=Cur_Base_VC.C_AcctSchema_ID; v_Account_ID:=Cur_Base_VC.Account_ID; -- optional fields v_M_Product_ID:=Cur_Base_VC.M_Product_ID; v_C_BPartner_ID:=Cur_Base_VC.C_BPartner_ID; v_AD_OrgTrx_ID:=Cur_Base_VC.AD_OrgTrx_ID; v_C_LocFrom_ID:=Cur_Base_VC.C_LocFrom_ID; v_C_LocTo_ID:=Cur_Base_VC.C_LocTo_ID; v_C_SalesRegion_ID:=Cur_Base_VC.C_SalesRegion_ID; v_C_Project_ID:=Cur_Base_VC.C_Project_ID; v_C_Campaign_ID:=Cur_Base_VC.C_Campaign_ID; v_C_Activity_ID:=Cur_Base_VC.C_Activity_ID; v_User1_ID:=Cur_Base_VC.User1_ID; v_User2_ID:=Cur_Base_VC.User2_ID; END LOOP; END IF; -- 1b -- Update target values IF(p_AD_Client_ID IS NOT NULL) THEN v_AD_Client_ID:=p_AD_Client_ID; END IF; IF(p_AD_Org_ID IS NOT NULL) THEN v_AD_Org_ID:=p_AD_Org_ID; END IF; IF(p_C_AcctSchema_ID IS NOT NULL) THEN v_C_AcctSchema_ID:=p_C_AcctSchema_ID; END IF; IF(p_Account_ID IS NOT NULL) THEN v_Account_ID:=p_Account_ID; END IF; -- optional fields IF(p_M_Product_ID IS NOT NULL) THEN v_M_Product_ID:=p_M_Product_ID; END IF; IF(p_C_BPartner_ID IS NOT NULL) THEN v_C_BPartner_ID:=p_C_BPartner_ID; END IF; IF(p_AD_OrgTrx_ID IS NOT NULL) THEN v_AD_OrgTrx_ID:=p_AD_OrgTrx_ID; END IF; IF(p_C_LocFrom_ID IS NOT NULL) THEN v_C_LocFrom_ID:=p_C_LocFrom_ID; END IF; IF(p_C_LocTo_ID IS NOT NULL) THEN v_C_LocTo_ID:=p_C_LocTo_ID; END IF; IF(p_C_SalesRegion_ID IS NOT NULL) THEN v_C_SalesRegion_ID:=p_C_SalesRegion_ID; END IF; IF(p_C_Project_ID IS NOT NULL) THEN v_C_Project_ID:=p_C_Project_ID; END IF; IF(p_C_Campaign_ID IS NOT NULL) THEN v_C_Campaign_ID:=p_C_Campaign_ID; END IF; IF(p_C_Activity_ID IS NOT NULL) THEN v_C_Activity_ID:=p_C_Activity_ID; END IF; IF(p_User1_ID IS NOT NULL) THEN v_User1_ID:=p_User1_ID; END IF; IF(p_User2_ID IS NOT NULL) THEN v_User2_ID:=p_User2_ID; END IF; -- Are nandatory elements null:1 IF(v_AD_Client_ID IS NULL OR v_AD_Org_ID IS NULL OR v_C_AcctSchema_ID IS NULL OR v_Account_ID IS NULL) THEN RAISE NOTICE '%','Mandatory Fields Null' ; p_C_ValidCombination_ID:=NULL; RETURN; END IF; -- DBMS_OUTPUT.PUT_LINE('v_M_Product_ID=' || v_M_Product_ID); -- Existance check FOR Cur_Existing_VC IN (SELECT * FROM C_ValidCombination -- Mandatory fields WHERE AD_Client_ID=v_AD_Client_ID AND AD_Org_ID=v_AD_Org_ID AND C_AcctSchema_ID=v_C_AcctSchema_ID AND Account_ID=v_Account_ID -- Optional fields AND ((v_M_Product_ID IS NULL AND M_Product_ID IS NULL) OR M_Product_ID=v_M_Product_ID) AND ((v_C_BPartner_ID IS NULL AND C_BPartner_ID IS NULL) OR C_BPartner_ID=v_C_BPartner_ID) AND ((v_AD_OrgTrx_ID IS NULL AND AD_OrgTrx_ID IS NULL) OR AD_OrgTrx_ID=v_AD_OrgTrx_ID) AND ((v_C_LocFrom_ID IS NULL AND C_LocFrom_ID IS NULL) OR C_LocFrom_ID=v_C_LocFrom_ID) AND ((v_C_LocTo_ID IS NULL AND C_LocTo_ID IS NULL) OR C_LocTo_ID=v_C_LocTo_ID) AND ((v_C_SalesRegion_ID IS NULL AND C_SalesRegion_ID IS NULL) OR C_SalesRegion_ID=v_C_SalesRegion_ID) AND ((v_C_Project_ID IS NULL AND C_Project_ID IS NULL) OR C_Project_ID=v_C_Project_ID) AND ((v_C_Campaign_ID IS NULL AND C_Campaign_ID IS NULL) OR C_Campaign_ID=v_C_Campaign_ID) AND ((v_C_Activity_ID IS NULL AND C_Activity_ID IS NULL) OR C_Activity_ID=v_C_Activity_ID) AND ((v_User1_ID IS NULL AND User1_ID IS NULL) OR User1_ID=v_User1_ID) AND ((v_User2_ID IS NULL AND User2_ID IS NULL) OR User2_ID=v_User2_ID) AND ISACTIVE='Y' ORDER BY IsFullyQualified DESC ) LOOP -- DBMS_OUTPUT.PUT_LINE('C_ValidCombination_ID=' || e.C_ValidCombination_ID || ', M_Product_ID=' || e.M_Product_ID); IF(FoundValue='N') THEN FoundValue:='Y'; IF(p_MustBeFullyQualified='Y' AND Cur_Existing_VC.IsFullyQualified='N') THEN RAISE NOTICE '%','Combination found but not fully qualified - ' || Cur_Existing_VC.C_ValidCombination_ID ; RetValue:=NULL; END IF; RetValue:=Cur_Existing_VC.C_ValidCombination_ID; END IF; END LOOP; -- We found a value IF(FoundValue='Y') THEN p_C_ValidCombination_ID:=RetValue; RAISE NOTICE '%','Found Combination' || p_C_ValidCombination_ID ; RETURN; END IF; -- No Combination found - so create one RAISE NOTICE '%','Create new' ; SELECT * INTO p_C_ValidCombination_ID FROM AD_Sequence_Next('C_ValidCombination', v_AD_Client_ID) ; v_CreatedBy:=p_CreatedBy; IF(v_CreatedBy IS NULL) THEN v_CreatedBy:=0; END IF; -- Don't catch trigger or integrity errors - let it fail INSERT INTO C_ValidCombination ( C_ValidCombination_ID, IsFullyQualified, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Alias, C_AcctSchema_ID, Account_ID, M_Product_ID, C_BPartner_ID, AD_OrgTrx_ID, C_LocFrom_ID, C_LocTo_ID, C_SalesRegion_ID, C_Project_ID, C_Campaign_ID, C_Activity_ID, User1_ID, User2_ID ) VALUES ( p_C_ValidCombination_ID, p_MustBeFullyQualified, v_AD_Client_ID, v_AD_Org_ID, 'Y', TO_DATE(NOW()), v_CreatedBy, TO_DATE(NOW()), v_CreatedBy, p_Alias, v_C_AcctSchema_ID, v_Account_ID, v_M_Product_ID, v_C_BPartner_ID, v_AD_OrgTrx_ID, v_C_LocFrom_ID, v_C_LocTo_ID, v_C_SalesRegion_ID, v_C_Project_ID, v_C_Campaign_ID, v_C_Activity_ID, v_User1_ID, v_User2_ID ) ; -- Commented by cromero 19102006 -- COMMIT; -- Read Trigger result (fully qualified) IF(p_MustBeFullyQualified='Y') THEN SELECT IsFullyQualified INTO fullyQualified FROM C_ValidCombination WHERE C_ValidCombination_ID=p_C_ValidCombination_ID; -- IF(fullyQualified='N') THEN RAISE NOTICE '%','New Combination not fully qualified - ' || p_C_ValidCombination_ID ; p_C_ValidCombination_ID:=NULL; END IF; END IF; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying, p_user2_id character varying); publictadfalse23416125536793gc_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying, p_user1_id character varying); publictadfalse23416125536794Tc_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONyCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying, p_c_activity_id character varying); publictadfalse23416125536795Ac_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONQCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying, p_c_campaign_id character varying); publictadfalse23416125536796.c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTION)CREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, NULL); END ; $_$ LANGUAGE plpgsql; _DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying, p_c_project_id character varying); publictadfalse23416125536797c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, NULL); END ; $_$ LANGUAGE plpgsql; =DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying, p_c_salesregion_id character varying); publictadfalse23416125536798c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying, p_c_locto_id character varying); publictadfalse23416125536799c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying, p_c_locfrom_id character varying); publictadfalse23416125536800c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying, p_ad_orgtrx_id character varying); publictadfalse23416125536801c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying, character varying)FUNCTIONdCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying, p_c_bpartner_id character varying); publictadfalse23416125536802c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying, character varying)FUNCTION<CREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, $10, NULL); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying, p_m_product_id character varying); publictadfalse23416125536803c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, $9, NULL); END ; $_$ LANGUAGE plpgsql; nDROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying, p_createdby character varying); publictadfalse23416125536804c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, $8, NULL); END ; $_$ LANGUAGE plpgsql; ODROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character, p_alias character varying); publictadfalse23416125536805c_validcombination_insert(character varying, character varying, character varying, character varying, character varying, character)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, $7, NULL); END ; $_$ LANGUAGE plpgsql; 4DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying, p_mustbefullyqualified character); publictadfalse23416125536806xc_validcombination_insert(character varying, character varying, character varying, character varying, character varying)FUNCTIONCREATE FUNCTION c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying) RETURNS character varying AS $_$ DECLARE BEGIN SELECT * INTO $1 FROM C_VALIDCOMBINATION_INSERT( $2, $3, $4, $5, $6, 'N'); END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.c_validcombination_insert(OUT p_c_validcombination_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, p_c_acctschema_id character varying, p_account_id character varying, p_b_c_validcombination_id character varying); publictadfalse23416g125595540c_validcombination_trg()FUNCTION"CREATE FUNCTION c_validcombination_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. *************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Elements RECORD; v_Combination VARCHAR(120) := ''; v_Description VARCHAR(255) := ''; v_IsFullyQualified CHAR(1) := 'Y'; v_Separator CHAR(1); v_TempValue VARCHAR(255) := '_'; v_TempName VARCHAR(255) := '_'; -- INTERNAL_ERROR Exception; -- Individual Statements DECLARE Cur_OO CURSOR FOR SELECT Value, Name FROM AD_Org WHERE AD_Org_ID=new.AD_Org_ID AND IsActive='Y'; DECLARE Cur_AC CURSOR FOR SELECT Value, Name FROM C_ElementValue WHERE C_ElementValue_ID=new.Account_ID AND IsActive = 'Y'; DECLARE Cur_PR CURSOR FOR SELECT Value, Name FROM M_Product WHERE M_Product_ID=new.M_Product_ID AND IsActive='Y'; DECLARE Cur_BP CURSOR FOR SELECT Value, Name FROM C_BPartner WHERE C_BPartner_ID=new.C_BPartner_ID AND IsActive = 'Y'; DECLARE Cur_TO CURSOR FOR SELECT Value, Name FROM AD_Org WHERE AD_Org_ID=new.AD_OrgTrx_ID AND IsActive='Y'; DECLARE Cur_LF CURSOR FOR SELECT Postal, City FROM C_Location WHERE C_Location_ID=new.C_LocFrom_ID AND IsActive='Y'; DECLARE Cur_LT CURSOR FOR SELECT Postal, City FROM C_Location WHERE C_Location_ID=new.C_LocTo_ID AND IsActive='Y'; DECLARE Cur_SR CURSOR FOR SELECT Value, Name FROM C_SalesRegion WHERE C_SalesRegion_ID=new.C_SalesRegion_ID AND IsActive='Y'; DECLARE Cur_PJ CURSOR FOR SELECT Value, Name FROM C_Project WHERE C_Project_ID=new.C_Project_ID AND IsActive='Y'; DECLARE Cur_MC CURSOR FOR SELECT Value, Name FROM C_Campaign WHERE C_Campaign_ID=new.C_Campaign_ID AND IsActive='Y'; DECLARE Cur_AY CURSOR FOR SELECT Value, Name FROM C_Activity WHERE C_Activity_ID=new.C_Activity_ID AND IsActive='Y'; DECLARE Cur_U1 CURSOR FOR SELECT Value, Name FROM C_ElementValue WHERE C_ElementValue_ID=new.User1_ID AND IsActive = 'Y'; DECLARE Cur_U2 CURSOR FOR SELECT Value, Name FROM C_ElementValue WHERE C_ElementValue_ID=new.User2_ID AND IsActive = 'Y'; -- v_change BOOLEAN; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF (new.Combination <> old.Combination) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF (new.Description <> old.Description) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; -- Load C_AcctSchema Info (if not valid: 01403 no data found) SELECT Separator INTO v_Separator FROM C_AcctSchema WHERE C_AcctSchema_ID=new.C_AcctSchema_ID; -- Loop for C_AcctSchema_Elements FOR Cur_Elements IN (SELECT * FROM C_AcctSchema_Element WHERE C_AcctSchema_ID=new.C_AcctSchema_ID AND IsActive='Y' ORDER BY SeqNo) LOOP IF (Cur_Elements.ElementType = 'OO') THEN OPEN Cur_OO; FETCH Cur_OO INTO v_TempValue, v_TempName; IF ( NOT FOUND ) THEN -- mandatory --OBTG:Cur_OO-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_OO; ELSIF (Cur_Elements.ElementType = 'AC') THEN OPEN Cur_AC; FETCH Cur_AC INTO v_TempValue, v_TempName; IF ( NOT FOUND ) THEN -- mandatory --OBTG:Cur_AC-- v_IsFullyQualified := 'N'; ELSE IF TG_OP = 'INSERT' THEN IF (new.Alias IS NULL OR new.Alias = '%') THEN new.Alias := v_TempValue; --Alias is the account no END IF; END IF; END IF; CLOSE Cur_AC; ELSIF (Cur_Elements.ElementType = 'PR') THEN IF (NEW.M_PRODUCT_ID IS NOT NULL) THEN OPEN Cur_PR; FETCH Cur_PR INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_PR-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_PR; ELSE v_TempValue:= ''; v_TempName:=''; END IF; ELSIF (Cur_Elements.ElementType = 'BP') THEN IF (NEW.C_BPARTNER_ID IS NOT NULL) THEN OPEN Cur_BP; FETCH Cur_BP INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_BP-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_BP; ELSE v_TempValue:= ''; v_TempName:=''; END IF; ELSIF (Cur_Elements.ElementType = 'TO') THEN OPEN Cur_TO; FETCH Cur_TO INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_TO-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_TO; ELSIF (Cur_Elements.ElementType = 'LF') THEN OPEN Cur_LF; FETCH Cur_LF INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_LF-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_LF; ELSIF (Cur_Elements.ElementType = 'LT') THEN OPEN Cur_LT; FETCH Cur_LT INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_LT-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_LT; ELSIF (Cur_Elements.ElementType = 'SR') THEN OPEN Cur_SR; FETCH Cur_SR INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_SR-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_SR; ELSIF (Cur_Elements.ElementType = 'PJ') THEN OPEN Cur_PJ; FETCH Cur_PJ INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_PJ-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_PJ; ELSIF (Cur_Elements.ElementType = 'MC') THEN OPEN Cur_MC; FETCH Cur_MC INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_MC-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_MC; ELSIF (Cur_Elements.ElementType = 'AY') THEN OPEN Cur_AY; FETCH Cur_AY INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_AY-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_AY; ELSIF (Cur_Elements.ElementType = 'U1') THEN OPEN Cur_U1; FETCH Cur_U1 INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_U1-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_U1; ELSIF (Cur_Elements.ElementType = 'U2') THEN OPEN Cur_U2; FETCH Cur_U2 INTO v_TempValue, v_TempName; IF ( NOT FOUND AND Cur_Elements.IsMandatory='Y') THEN --OBTG:Cur_U2-- v_IsFullyQualified := 'N'; END IF; CLOSE Cur_U2; END IF; -- Construct Info Fields v_Combination := SUBSTR(COALESCE(v_Combination,'') || COALESCE(v_TempValue,'') || COALESCE(v_Separator,''),1,120); v_Description := SUBSTR(COALESCE(v_Description,'') || COALESCE(v_TempName,'') || COALESCE(v_Separator,''),1,255); v_TempValue := '_'; v_TempName := '_'; END LOOP; -- Fully Qualified IF NOT TG_OP = 'DELETE' THEN IF (new.IsFullyQualified='Y' AND v_IsFullyQualified='N') THEN RAISE EXCEPTION '%',INTERNAL_ERROR; END IF; END IF; -- Finish new.Combination := SUBSTR(v_Combination,1,(CASE LENGTH(v_Combination) WHEN 0 THEN 1 ELSE LENGTH(v_Combination)-1 END)); new.Description := SUBSTR(v_Description,1,(CASE LENGTH(v_Description) WHEN 0 THEN 1 ELSE LENGTH(v_Description)-1 END)); new.IsFullyQualified := v_IsFullyQualified; IF NOT TG_OP = 'INSERT' THEN IF NOT (new.Combination=old.Combination AND new.Description=old.Description) THEN RAISE NOTICE '%',new.Combination || ' - ' || new.Description; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; EXCEPTION WHEN INTERNAL_ERROR THEN RAISE EXCEPTION '%', 'Not fully Qualified: ' || v_Combination || '(' || new.C_ValidCombination_ID || ')'; --OBTG:-20101-- IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; /DROP FUNCTION public.c_validcombination_trg(); publictadfalse23416h125595543c_withholding_trg()FUNCTIONi CREATE FUNCTION c_withholding_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * New Accounting Defaults */ --TYPE RECORD IS REFCURSOR; Cur_Defaults RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'INSERT')THEN FOR Cur_Defaults IN ( SELECT * FROM C_AcctSchema_Default d WHERE EXISTS ( SELECT 1 FROM AD_Org_AcctSchema WHERE AD_IsOrgIncluded(AD_Org_ID, new.AD_ORG_ID, new.AD_Client_ID)<>-1 AND IsActive = 'Y' AND AD_Org_AcctSchema.C_AcctSchema_ID = d.C_AcctSchema_ID ) ) LOOP INSERT INTO C_Withholding_Acct ( C_Withholding_Acct_ID, C_Withholding_ID, C_AcctSchema_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, Withholding_Acct ) VALUES ( get_uuid(), new.C_Withholding_ID, Cur_Defaults.C_AcctSchema_ID, new.AD_Client_ID, new.AD_ORG_ID, 'Y', TO_DATE(NOW()), new.CreatedBy, TO_DATE(NOW()), new.UpdatedBy, Cur_Defaults.Withholding_Acct ) ; END LOOP; END IF; IF(TG_OP = 'UPDATE') THEN UPDATE C_Withholding_Acct set AD_Org_ID = new.AD_Org_ID WHERE c_withholding_id = new.C_WithHolding_ID; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; *DROP FUNCTION public.c_withholding_trg(); publictadfalse23416125536810 c_yearperiods(character varying)FUNCTIONgCREATE FUNCTION c_yearperiods(pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: C_YearPeriods.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: Create missing standard periods for Year_ID * Description: ************************************************************************/ -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; v_Year_ID VARCHAR(32); --OBTG:VARCHAR2-- -- v_NextNo VARCHAR(32); --OBTG:VARCHAR2-- v_MonthNo NUMERIC; v_StartDate TIMESTAMP; Test NUMERIC; v_ResultStr VARCHAR(300) ; -- C_Year Variables v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Calendar_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Year_Str VARCHAR(20) ; v_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_year_num NUMERIC; BEGIN -- Update AD_PInstance -- DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing'); v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=PInstance_ID ORDER BY p.SeqNo ) LOOP v_Year_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Year_ID ; -- Get C_Year Record RAISE NOTICE '%','Get Year info' ; v_ResultStr:='YearNotFound'; SELECT AD_Client_ID, AD_Org_ID, C_Calendar_ID, Year, UpdatedBy INTO v_Client_ID, v_Org_ID, v_Calendar_ID, v_Year_Str, v_User_ID FROM C_Year WHERE C_Year_ID=v_Year_ID; -- Check the format RAISE NOTICE '%','Checking format' ; v_ResultStr:='Year not numeric: '||v_Year_Str; BEGIN SELECT TO_NUMBER(v_Year_Str) INTO v_year_num FROM DUAL; -- Postgres hack IF (v_year_num IS NULL OR v_year_num<=0) THEN RAISE EXCEPTION '%', '@NotValidNumber@'; --OBTG:-20000-- END IF; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '%', '@NotValidNumber@'; --OBTG:-20000-- END; -- Start Date RAISE NOTICE '%','Calculating start date' ; v_ResultStr:='Year not numeric: '||v_Year_Str; SELECT TO_DATE('1/1/'||v_Year_Str, 'MM/DD/YYYY') INTO v_StartDate FROM DUAL; RAISE NOTICE '%','Start: '||v_StartDate ; -- Loop to all months and add missing periods FOR v_MonthNo IN 1..12 LOOP -- Do we have the month already:1 -- DBMS_OUTPUT.PUT_LINE('Checking Month No: '||v_MonthNo); v_ResultStr:='Checking Month '||v_MonthNo; SELECT MAX(PeriodNo) INTO Test FROM C_Period WHERE C_Year_ID=v_Year_ID AND PeriodNo=v_MonthNo; IF Test IS NULL THEN -- get new v_NextNo SELECT * INTO v_NextNo FROM AD_Sequence_Next('C_Period', v_Year_ID) ; -- DBMS_OUTPUT.PUT_LINE('Adding Period ID: '||v_NextNo); INSERT INTO C_Period ( C_Period_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, C_Year_ID, PeriodNo, StartDate, PeriodType, Name ) VALUES ( v_NextNo, v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), v_User_ID, TO_DATE(NOW()), v_User_ID, v_Year_ID, v_MonthNo, TO_DATE(ADD_MONTHS(v_StartDate, v_MonthNo-1)), 'S', (SELECT SUBSTR(name, 1,3) || '-' || SUBSTR(year,3,2) FROM AD_MONTH, C_YEAR WHERE TO_NUMBER(value)=v_MonthNo AND c_year_id=v_Year_ID) ); RAISE NOTICE '%','Month Added' ; END IF; END LOOP; -- Update AD_PInstance ---- <> -- DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished'); PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 1, NULL) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN -- DBMS_OUTPUT.PUT_LINE('No Data Found Exception'); v_ResultStr:= '@ERROR=' || SQLERRM; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; DDROP FUNCTION public.c_yearperiods(pinstance_id character varying); publictadfalse23416 125536816 dateformat()FUNCTIONCREATE FUNCTION dateformat() RETURNS character varying AS $$ BEGIN RETURN 'DD-MM-YYYY'; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; $$ LANGUAGE plpgsql IMMUTABLE; #DROP FUNCTION public.dateformat(); publictadfalse23416X125536817$dba_getattnumpos(integer[], integer)FUNCTIONCREATE FUNCTION dba_getattnumpos(conkey integer[], attnum integer) RETURNS integer AS $$ /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ DECLARE i integer; begin for i in 1..array_upper(conkey,1) loop IF (conkey[i] = attnum) THEN RETURN i; END IF; end loop; return 0; end; $$ LANGUAGE plpgsql; IDROP FUNCTION public.dba_getattnumpos(conkey integer[], attnum integer); publictadfalse23416g125536818!dba_getstandard_search_text(text)FUNCTION} CREATE FUNCTION dba_getstandard_search_text(text) RETURNS text AS $_$ /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ DECLARE v_text TEXT; DECLARE v_p1 NUMERIC; DECLARE v_p2 NUMERIC; DECLARE v_p3 NUMERIC; DECLARE v_i NUMERIC; begin v_text := replace($1, ' = ANY',' in'); v_text := replace(v_text, 'ARRAY[', ''); v_text := replace(v_text, ']' , ''); v_text := replace(v_text, '::bpchar', ''); v_text := replace(v_text, '::text', ''); v_text := substring(v_text,2,length(v_text)-2); WHILE (v_text LIKE '%::%') LOOP v_p1 := INSTR(v_text, '::'); v_p2 := 0; v_p3 := 0; IF (SUBSTR(v_text,v_p1-1,1) = ')') THEN v_i := 1; WHILE (v_p2=0) LOOP v_i := v_i + 1; IF (SUBSTR(v_text, v_p1 - v_i, 1) = '(') THEN v_p2 := v_p1 - v_i; END IF; END LOOP; END IF; v_i := 1; WHILE (v_p3=0) LOOP v_i := v_i + 1; IF ((SUBSTR(v_text, v_p1 + v_i, 1) IN (' ',')',CHR(10),CHR(13)) OR (v_p1 + v_i>= length(v_text)))) THEN v_p3 := v_p1 + v_i; END IF; END LOOP; --RAISE_APPLICATION_ERROR(-20001,'v_p3 = '||v_p3); IF (v_p2 = 0) THEN v_text := SUBSTR(v_text, 1, v_p1-1) || SUBSTR(v_text, v_p3, 4000); ELSE v_text := SUBSTR(v_text, 1, v_p2-1) || SUBSTR(v_text, v_p2 + 1, v_p1 - (v_p2 + 2)) || SUBSTR(v_text, v_p3, 4000); END IF; END LOOP; RETURN upper(v_text); END; $_$ LANGUAGE plpgsql; 8DROP FUNCTION public.dba_getstandard_search_text(text); publictadfalse23416 125536819dump(character varying)FUNCTIONCREATE FUNCTION dump(character varying) RETURNS character varying AS $_$DECLARE BEGIN RETURN $1; END; $_$ LANGUAGE plpgsql; .DROP FUNCTION public.dump(character varying); publictadfalse23416 125536820 dump(numeric)FUNCTIONtCREATE FUNCTION dump(numeric) RETURNS numeric AS $_$DECLARE BEGIN RETURN $1; END; $_$ LANGUAGE plpgsql; $DROP FUNCTION public.dump(numeric); publictadfalse23416 125536821!equal(numeric, character varying)FUNCTIONCREATE FUNCTION equal(numeric, character varying) RETURNS boolean AS $_$ BEGIN RETURN $1 = TO_NUMBER($2); END; $_$ LANGUAGE plpgsql IMMUTABLE; 8DROP FUNCTION public.equal(numeric, character varying); publictadfalse23416 125536822"fact_acct_reset(character varying)FUNCTION9CREATE FUNCTION fact_acct_reset(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: Fact_Acct_Reset.sql,v 1.4 2003/01/27 06:22:11 jjanke Exp $ *** * Title: Reset Posting Records * Description: * Delete Records in Fact_Acct or * Reset Posted * for AD_Client_ID and AD_Table_ID ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DateColumn VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_TableName VARCHAR(48):=''; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables v_AD_Client_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_AD_Table_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_DeletePosting VARCHAR(1):='N'; -- v_Updated NUMERIC(10):=0; v_Deleted NUMERIC(10):=0; v_Cmd VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_rowcount NUMERIC; v_factAcctCounter NUMERIC:= 0; c_commitInterval NUMERIC:= 1000; v_count NUMERIC; v_DocAction VARCHAR(60); --OBTG:VARCHAR2-- v_UpdatedBy AD_PINSTANCE.UpdatedBy%TYPE; v_DeleteFact VARCHAR(1):='Y'; --OBTG:varchar2-- BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; IF(Cur_Parameter.ParameterName='AD_Client_ID') THEN v_AD_Client_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Client_ID=' || v_AD_Client_ID ; ELSIF(Cur_Parameter.ParameterName='AD_Table_ID') THEN v_AD_Table_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Table_ID=' || v_AD_Table_ID ; ELSIF(Cur_Parameter.ParameterName='DeletePosting') THEN v_DeletePosting:=Cur_Parameter.P_String; RAISE NOTICE '%',' DeletePosting=' || v_DeletePosting ; ELSIF(Cur_Parameter.ParameterName='AD_Org_ID') THEN v_AD_Org_ID:=Cur_Parameter.P_String; IF (v_AD_Org_ID IS NULL) THEN v_AD_Org_ID:='0'; END IF; RAISE NOTICE '%',' AD_ORG_ID=' || v_AD_Org_ID ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; END LOOP; -- Get Parameter -- Get AD_Org_ID from the document header (useful when the process is executed from a document) IF (v_AD_Table_ID IS NOT NULL AND v_Record_ID IS NOT NULL) THEN SELECT TableName INTO v_TableName FROM AD_Table WHERE AD_Table_ID=v_AD_Table_ID; IF (v_Record_ID!='0') THEN EXECUTE 'SELECT AD_Org_ID FROM ' || v_TableName || ' WHERE ' || v_TableName || '_ID =''' || v_Record_ID || ''' AND AD_CLIENT_ID =''' || v_AD_Client_ID || ''' ' INTO v_AD_Org_ID; END IF; END IF; RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Fact_Acct_Rest - Finish_Process Extension Point SELECT count(*) INTO v_count FROM DUAL where exists (select 1 from ad_ep_procedures where ad_extension_points_id = 'E1F9635815BF4A44B88E3EAADBD0D10E'); IF (v_count=1) THEN DECLARE v_ep_instance VARCHAR(32); v_extension_point_id VARCHAR(32) := 'E1F9635815BF4A44B88E3EAADBD0D10E'; BEGIN v_ep_instance := get_uuid(); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Record_ID', v_Record_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'AD_Table_ID', v_AD_Table_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'AD_Client_ID', v_AD_Client_ID, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'DeleteFact', v_DeleteFact, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'User', v_UpdatedBy, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Message', NULL, NULL, NULL, NULL, NULL, NULL, v_Message); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Result', NULL, NULL, v_result, NULL, NULL, NULL, NULL); PERFORM AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'PInstance_ID', p_pinstance_id, NULL, NULL, NULL, NULL, NULL, NULL); PERFORM AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id); SELECT p_number INTO v_Result FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'Result'; SELECT p_text INTO v_Message FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'Message'; SELECT p_string INTO v_DeleteFact FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance AND parametername LIKE 'DeleteFact'; DELETE FROM ad_ep_instance_para WHERE ad_ep_instance_id = v_ep_instance; END; END IF; DECLARE --TYPE RECORD IS REFCURSOR; Cur_Clients RECORD; Cur_Tables RECORD; Cur_Fact_Acct RECORD; BEGIN FOR Cur_Clients IN (SELECT AD_Client_ID FROM AD_CLIENT WHERE(v_AD_Client_ID IS NULL OR AD_Client_ID=v_AD_Client_ID) AND AD_Client_ID<>'0' ) LOOP FOR Cur_Tables IN (SELECT DISTINCT t.AD_Table_ID, t.TableName, C_DOCTYPE.DOCBASETYPE FROM AD_TABLE t, C_DOCTYPE WHERE t.AD_TABLE_ID=C_DOCTYPE.AD_TABLE_ID AND(v_AD_Table_ID IS NULL OR t.AD_Table_ID=v_AD_Table_ID) AND EXISTS (SELECT * FROM AD_COLUMN c WHERE t.AD_Table_ID=c.AD_Table_ID AND c.ColumnName='Posted' ) AND EXISTS (SELECT * FROM AD_COLUMN c WHERE t.AD_Table_ID=c.AD_Table_ID AND c.ColumnName='Processing' ) AND t.IsView='N' ) LOOP RAISE NOTICE '%','AD_Client_ID=' || Cur_Clients.AD_Client_ID || ', AD_Table_ID=' || Cur_Tables.AD_Table_ID || ' ' || Cur_Tables.TableName ; -- Update Table v_ResultStr:='ResetTable:' || Cur_Tables.TableName; IF(v_DeletePosting='Y') THEN FOR Cur_Fact_Acct IN ( SELECT DISTINCT Record_ID FROM FACT_ACCT WHERE AD_TABLE_ID=Cur_Tables.AD_Table_ID AND AD_ISORGINCLUDED(FACT_ACCT.ad_org_id, v_AD_Org_ID, FACT_ACCT.ad_client_id)<>-1 AND NOT EXISTS (SELECT 1 FROM C_YEAR, C_PERIOD, C_PERIODCONTROL, AD_Org, FACT_ACCT fa_aux WHERE C_YEAR.c_year_id=C_PERIOD.c_year_id AND C_PERIOD.c_period_id=C_PERIODCONTROL.c_period_id AND C_YEAR.c_calendar_id=AD_Org.c_calendar_id AND AD_Org.ad_client_id=fa_aux.AD_CLIENT_ID AND C_PERIODCONTROL.docbasetype=fa_aux.DOCBASETYPE AND C_PERIODCONTROL.periodstatus<>'O' AND fa_aux.DATEACCT>=C_PERIOD.StartDate AND fa_aux.DATEACCT''N'' OR Posted IS NULL OR Processing<>''N'' OR Processing IS NULL) AND ' || Cur_Tables.TableName||'_ID = '''||Cur_Fact_Acct.Record_ID||''''; -- DBMS_OUTPUT.PUT_LINE(' executing: ' || v_Cmd); EXECUTE v_Cmd; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_Updated + v_rowcount; RAISE NOTICE '%',' updated=' || v_rowcount ; -- Delete Fact v_ResultStr:='DeleteFact'; DELETE --Deleting complete entries related to the document FROM FACT_ACCT_CFS WHERE FACT_ACCT_CFS_ID IN ( SELECT FACT_ACCT_CFS_ID FROM FACT_ACCT_CFS CFS1 INNER JOIN FACT_ACCT ON FACT_ACCT.FACT_ACCT_ID = CFS1.FACT_ACCT_REF_ID AND AD_TABLE_ID=Cur_Tables.AD_Table_ID AND Record_ID=Cur_Fact_Acct.Record_ID AND FACT_ACCT.AD_Client_ID = Cur_Clients.AD_Client_ID ); SELECT count(DISTINCT FACT_ACCT_GROUP_ID) INTO v_rowcount FROM FACT_ACCT WHERE AD_TABLE_ID=Cur_Tables.AD_Table_ID AND Record_ID=Cur_Fact_Acct.Record_ID AND AD_Client_ID = Cur_Clients.AD_Client_ID; DELETE FROM FACT_ACCT WHERE AD_TABLE_ID=Cur_Tables.AD_Table_ID AND Record_ID=Cur_Fact_Acct.Record_ID AND AD_Client_ID = Cur_Clients.AD_Client_ID; -- GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Deleted:=v_Deleted + v_rowcount; RAISE NOTICE '%',' deleted=' || v_rowcount ; v_factAcctCounter := v_factAcctCounter +1; if (mod(v_factAcctCounter, c_commitInterval) = 0) then -- COMMIT; end if; END IF; END LOOP; v_Cmd:='UPDATE ' || Cur_Tables.TableName || ' SET Posted=''N'', Processing=''N'' WHERE AD_Client_ID=''' || Cur_Clients.AD_Client_ID || ''' AND (Posted=''Y'' OR Processing<>''N'' OR Processing IS NULL) AND NOT EXISTS (SELECT 1 FROM FACT_ACCT WHERE AD_TABLE_ID =''' || Cur_Tables.AD_Table_ID || ''' AND RECORD_ID = ' || Cur_Tables.TableName || '_ID AND AD_CLIENT_ID =''' || Cur_Clients.AD_Client_ID || ''') AND (' || Cur_Tables.TableName || '_ID = ''' || v_Record_ID || ''' OR ''' || UPPER(v_Record_ID) ||''' = ''0'')'; -- DBMS_OUTPUT.PUT_LINE(' executing: ' || v_Cmd); EXECUTE v_Cmd; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_Updated + v_rowcount; RAISE NOTICE '%',' updated=' || v_rowcount ; ELSE v_Cmd:='UPDATE ' || Cur_Tables.TableName || ' SET Processing=''N'' WHERE AD_Client_ID=''' || Cur_Clients.AD_Client_ID || ''' AND Processing<>''N'' OR Processing IS NULL'; EXECUTE v_Cmd; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_Updated + v_rowcount; RAISE NOTICE '%',' unlocked=' || v_rowcount ; v_Cmd:='UPDATE ' || Cur_Tables.TableName || ' SET Posted=''N'' WHERE AD_Client_ID=''' || Cur_Clients.AD_Client_ID || ''' AND Posted NOT IN (''Y'',''N'') AND Processed=''Y'''; EXECUTE v_Cmd; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Updated:=v_Updated + v_rowcount; RAISE NOTICE '%',' updated=' || v_rowcount ; END IF; END LOOP; END LOOP; END; -- Summary info --v_Message:='@Updated@ = ' || v_Updated || ', @Deleted@ = ' || v_Deleted; IF(v_DeletePosting='Y') THEN v_Message:='@UnpostedDocuments@ = ' || v_Updated || ', @DeletedEntries@ = ' || v_Deleted; ELSE v_Message:='@UpdatedDocuments@ = ' || v_Updated; END IF; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; HDROP FUNCTION public.fact_acct_reset(p_pinstance_id character varying); publictadfalse23416125556488.fin_gen_paymentschedule_inv(character varying)FUNCTIONb CREATE FUNCTION fin_gen_paymentschedule_inv(p_ep_instance character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ p_message VARCHAR(2000); p_record_id VARCHAR(60); p_docAction VARCHAR(60); p_user VARCHAR(60); p_result NUMERIC; v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_DocTypeTarget_ID VARCHAR(32); --OBTG:VARCHAR2-- v_IsSOTrx C_INVOICE.IsSOTrx%TYPE; v_GrandTotal NUMERIC:=0; v_PaymentTerm C_INVOICE.C_PaymentTerm_ID%TYPE; v_PaymentRule C_INVOICE.PaymentRule%TYPE; v_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_BPartner_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DateInvoiced TIMESTAMP; v_TotalLines NUMERIC; --TYPE RECORD IS REFCURSOR; Cur_Params RECORD; BEGIN FOR Cur_Params IN ( SELECT * FROM ad_ep_instance_para WHERE ad_ep_instance_id = p_ep_instance ) LOOP IF (cur_params.parametername LIKE 'DocAction') THEN p_docaction := Cur_Params.p_string; ELSIF (cur_params.parametername LIKE 'Record_ID') THEN p_record_id := cur_params.p_string; ELSIF (cur_params.parametername LIKE 'User') THEN p_user := cur_params.p_string; ELSIF (cur_params.parametername LIKE 'Message') THEN p_message := cur_params.p_text; ELSIF (cur_params.parametername LIKE 'Result') THEN p_result := cur_params.p_number; END IF; END LOOP; -- Reading the invoice v_ResultStr:='ReadingInvoice'; SELECT ad_client_id, ad_org_id, c_doctypetarget_id, IsSOTrx, grandtotal, C_PaymentTerm_ID, PaymentRule, C_Currency_ID, C_BPartner_ID, DateInvoiced, totallines INTO v_Client_ID, v_Org_ID, v_DocTypeTarget_ID, v_IsSOTrx, v_GrandTotal, v_PaymentTerm, v_PaymentRule, v_Currency_ID, v_BPartner_ID, v_DateInvoiced, v_totallines FROM c_invoice WHERE c_invoice_id=p_record_id; IF (p_docaction = 'CO') THEN DECLARE cur_orders RECORD; cur_payments RECORD; v_paidamt NUMERIC:=0; v_TargetDocBaseType C_DOCTYPE.DocBaseType%TYPE; v_MultiplierARC NUMERIC:=1; v_pendingAmount NUMERIC; v_plannedDate TIMESTAMP; v_paymentAmount NUMERIC; /* CUR_PAYMENTS RECORD; v_GenDebt_PaymentID VARCHAR(32); --OBTG:varchar2-- v_SettlementDocTypeID VARCHAR(32) ; --OBTG:varchar2-- v_settlement_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_CB_Curr VARCHAR(32) ; --OBTG:VARCHAR2-- v_SDocument_No C_SETTLEMENT.DocumentNo%TYPE;*/ BEGIN v_ResultStr:='Generating FIN_PAYMENT_SCHEDULE'; -- Is it a Credit Memo:4 SELECT docbasetype INTO v_TargetDocBaseType FROM c_doctype WHERE c_doctype_id=v_DocTypeTarget_ID; IF v_TargetDocBaseType in ('ARC','APC') THEN v_MultiplierARC:=-1; END IF; --Insert manual (isAutomaticGenerated='N') payments v_ResultStr:='Update scheduled payment from orders'; FOR cur_orders IN ( SELECT DISTINCT c_orderline.c_order_id AS order_id, fin_payment_schedule.paidamt, fin_payment_schedule_id FROM c_invoiceline, c_orderline, fin_payment_schedule WHERE c_invoiceline.c_orderline_id = c_orderline.c_orderline_id AND c_orderline.c_order_id = fin_payment_schedule.c_order_id AND c_invoiceline.c_invoice_id = p_record_id ) LOOP UPDATE fin_payment_schedule SET amount = paidamt, outstandingamt = 0, c_invoice_id = p_record_id WHERE fin_payment_schedule_id = cur_orders.fin_payment_schedule_id; v_paidamt := v_paidamt + cur_orders.paidamt; END LOOP; --Insert Generated Payments v_pendingAmount:=v_GrandTotal - v_paidamt; FOR cur_payments IN ( SELECT line, percentage, onremainder, excludetax, COALESCE(paymentrule, v_paymentrule) AS paymentrule, fixmonthday, fixmonthday2, fixmonthday3, netdays, fixmonthoffset, netday, isnextbusinessday FROM c_paymenttermline WHERE c_paymentterm_id=v_paymentterm UNION -- Header of paymentTerm is processed at last SELECT 9999 AS line, 100 AS percentage, 'Y' AS onremainder, 'N' AS excludetax, v_paymentRule AS paymentrule, fixmonthday, fixmonthday2, fixmonthday3, netdays, fixmonthoffset, netday, isnextbusinessday FROM c_paymentterm WHERE c_paymentterm_id=v_paymentterm ORDER BY line ) LOOP v_plannedDate:=C_Paymentduedate(v_bpartner_id, v_issotrx, cur_payments.fixmonthday, cur_payments.fixmonthday2, cur_payments.fixmonthday3, cur_payments.netdays, cur_payments.fixmonthoffset, cur_payments.netday, cur_payments.isnextbusinessday, v_dateinvoiced); IF(cur_payments.excludetax='Y') THEN -- if excludeTax = 'Y', percentage is aplied on the TotalLines v_paymentAmount:=C_Currency_Round(v_totallines * cur_payments.percentage/100, v_currency_id, NULL); ELSIF(cur_payments.onremainder='N') THEN -- if onRemainder = 'N', percentage is aplied on the GrandTotal v_paymentAmount:=C_Currency_Round(v_grandtotal * cur_payments.percentage/100, v_currency_id, NULL); ELSE v_paymentAmount:=C_Currency_Round(v_pendingamount * cur_payments.percentage/100, v_currency_id, NULL); END IF; v_pendingamount := v_pendingamount - v_paymentamount; IF (v_paidamt < v_paymentamount) THEN v_paymentamount := v_paymentamount - v_paidamt; v_paidamt := 0; v_ResultStr:='Inserting in FIN_PAYMENT_SCHEDULE table'; v_pendingAmount:=v_pendingAmount - v_paymentAmount; INSERT INTO fin_payment_schedule ( fin_payment_schedule_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, c_invoice_id, c_currency_id, c_order_id, fin_paymentmethod_id, amount, duedate, outstandingamt ) VALUES ( get_uuid(), v_client_id, v_org_id, 'Y', TO_DATE(NOW()), p_user, TO_DATE(NOW()), p_user, p_record_id, v_currency_id, null, 'to-do', C_Currency_Round((v_paymentamount * v_multiplierarc), v_currency_id, NULL), v_planneddate, C_Currency_Round((v_paymentamount * v_multiplierarc), v_currency_id, NULL) ); ELSE --do not insert payment schedule v_paidamt := v_paidamt - v_paymentamount; END IF; END LOOP; END; ELSIF (p_docaction = 'RE') THEN DECLARE v_count NUMERIC; v_paymentno VARCHAR(40); --OBTG:VARCHAR2-- BEGIN SELECT count(*), max(p.documentno) INTO v_count, v_paymentno FROM fin_payment_schedule ps, fin_payment_detail pd, fin_payment p WHERE ps.fin_payment_schedule_id = pd.fin_payment_schedule_id AND pd.fin_payment_id = p.fin_payment_id AND ps.c_invoice_id = p_record_id; IF (v_count <> 0) THEN RAISE EXCEPTION '%', '@InvoiceWithPayments@' || ' ' || v_paymentno; --OBTG:-20000-- END IF; END; END IF; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%','FIN_GENERATE_PAYMENT_SCHEDULE exception: '|| v_ResultStr; RAISE EXCEPTION '%', SQLERRM; END ; $$ LANGUAGE plpgsql; SDROP FUNCTION public.fin_gen_paymentschedule_inv(p_ep_instance character varying); publictadfalse23416125556490.fin_gen_paymentschedule_ord(character varying)FUNCTION@CREATE FUNCTION fin_gen_paymentschedule_ord(p_ep_instance character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2010 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ p_message VARCHAR(2000); p_record_id VARCHAR(60); p_docAction VARCHAR(60); p_user VARCHAR(60); p_result NUMERIC; v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_GrandTotal NUMERIC:=0; v_OrderDate TIMESTAMP; v_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_client_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Params RECORD; BEGIN FOR Cur_Params IN ( SELECT * FROM ad_ep_instance_para WHERE ad_ep_instance_id = p_ep_instance ) LOOP IF (cur_params.parametername LIKE 'DocAction') THEN p_docaction := Cur_Params.p_string; ELSIF (cur_params.parametername LIKE 'Record_ID') THEN p_record_id := cur_params.p_string; ELSIF (cur_params.parametername LIKE 'User') THEN p_user := cur_params.p_string; ELSIF (cur_params.parametername LIKE 'Message') THEN p_message := cur_params.p_text; ELSIF (cur_params.parametername LIKE 'Result') THEN p_result := cur_params.p_number; END IF; END LOOP; -- Reading the order v_ResultStr:='ReadingOrder'; SELECT ad_client_id, ad_org_id, grandtotal, dateordered, c_currency_id INTO v_client_id, v_org_id, v_grandtotal, v_orderdate, v_currency_id FROM c_order WHERE c_order_id = p_record_id; IF (p_docaction = 'CO') THEN v_resultstr := 'Insert payment schedule on completion'; INSERT INTO fin_payment_schedule ( fin_payment_schedule_id, ad_client_id, ad_org_id, isactive, created, createdby, updated, updatedby, c_invoice_id, c_currency_id, c_order_id, fin_paymentmethod_id, amount, duedate, outstandingamt ) VALUES ( get_uuid(), v_Client_ID, v_Org_ID, 'Y', TO_DATE(NOW()), p_user, TO_DATE(NOW()), p_user, null, v_currency_id, p_record_id, 'to-do', v_grandtotal, v_orderdate, v_grandtotal ); ELSIF (p_docaction = 'RE') THEN -- check there is not any paid payment DECLARE v_count NUMERIC; BEGIN SELECT count(*) INTO v_count FROM fin_payment_schedule WHERE c_order_id = p_record_id AND paidamt <> 0; IF (v_count <> 0) THEN RAISE EXCEPTION '%', '@OrderHasPayments@'; --OBTG:-20000-- END IF; v_resultstr:='Delete scheduled payments'; DELETE FROM fin_payment_schedule WHERE c_order_id = p_record_id; END; END IF; EXCEPTION WHEN OTHERS THEN RAISE NOTICE '%','FIN_GENERATE_PAYMENT_SCHEDULE exception: '|| v_ResultStr; RAISE EXCEPTION '%', SQLERRM; END ; $$ LANGUAGE plpgsql; SDROP FUNCTION public.fin_gen_paymentschedule_ord(p_ep_instance character varying); publictadfalse23416125536824 get_uuid()FUNCTIONCREATE FUNCTION get_uuid() RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2008-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ var VARCHAR:=uuid_generate_v4(); BEGIN WHILE var=uuid_generate_v4()::varchar LOOP END LOOP; return replace(upper(uuid_generate_v4()::varchar),'-',''); END; $$ LANGUAGE plpgsql; !DROP FUNCTION public.get_uuid(); publictadfalse23416i125595545gl_jl_chk_restrictions_trg()FUNCTIONCREATE FUNCTION gl_jl_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Processed VARCHAR(60) ; v_Posted VARCHAR(60) ; v_GL_JOURNAL_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_DateNull TIMESTAMP :=TO_DATE('01-01-1900','DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'INSERT' THEN v_GL_JOURNAL_ID:=new.GL_JOURNAL_ID; ELSE v_GL_JOURNAL_ID:=old.GL_JOURNAL_ID; END IF; IF(TG_OP = 'UPDATE') THEN IF((COALESCE(old.AMTSOURCEDR, 0) <> COALESCE(NEW.AMTSOURCEDR, 0) OR COALESCE(old.AMTSOURCECR, 0) <> COALESCE(NEW.AMTSOURCECR, 0) OR COALESCE(old.C_CURRENCY_ID, '0') <> COALESCE(NEW.C_CURRENCY_ID, '0'))) THEN SELECT PROCESSED, POSTED INTO v_Processed, v_Posted FROM GL_JOURNAL WHERE GL_JOURNAL_ID=v_GL_JOURNAL_ID; IF(v_Processed='Y' AND ((COALESCE(old.LINE, 0) <> COALESCE(new.LINE, 0)) OR (COALESCE(old.C_DEBT_PAYMENT_ID, '0') <> COALESCE(new.C_DEBT_PAYMENT_ID, '0')) OR(COALESCE(old.AMTSOURCEDR, 0) <> COALESCE(new.AMTSOURCEDR, 0)) OR(COALESCE(old.AMTSOURCECR, 0) <> COALESCE(new.AMTSOURCECR, 0)) OR(COALESCE(old.C_CURRENCY_ID, '0') <> COALESCE(new.C_CURRENCY_ID, '0')) OR(COALESCE(old.C_UOM_ID, '0') <> COALESCE(new.C_UOM_ID, '0')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(v_Posted='Y' AND ((COALESCE(old.DATEACCT, v_DateNull) <> COALESCE(new.DATEACCT, v_DateNull)) OR(COALESCE(old.C_VALIDCOMBINATION_ID, '0') <> COALESCE(new.C_VALIDCOMBINATION_ID, '0')) OR(COALESCE(old.AMTACCTDR, 0) <> COALESCE(new.AMTACCTDR, 0)) OR(COALESCE(old.AMTACCTCR, 0) <> COALESCE(new.AMTACCTCR, 0)))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; END IF; IF(TG_OP = 'DELETE') THEN SELECT PROCESSED, POSTED INTO v_Processed, v_Posted FROM GL_JOURNAL WHERE GL_JOURNAL_ID=v_GL_JOURNAL_ID; IF (v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN SELECT PROCESSED, POSTED INTO v_Processed, v_Posted FROM GL_JOURNAL WHERE GL_JOURNAL_ID=v_GL_JOURNAL_ID; IF (v_Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 3DROP FUNCTION public.gl_jl_chk_restrictions_trg(); publictadfalse23416l125595551gl_journal_chk_restrict_trg()FUNCTION CREATE FUNCTION gl_journal_chk_restrict_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('01-01-1900', 'DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF(old.Processed='Y' AND ((COALESCE(old.DATEDOC, v_DateNull) <> COALESCE(new.DATEDOC, v_DateNull)) OR(COALESCE(old.C_PERIOD_ID, '0') <> COALESCE(new.C_PERIOD_ID, '0')) OR(COALESCE(old.CURRENCYRATE, 0) <> COALESCE(new.CURRENCYRATE, 0)) OR(COALESCE(old.CURRENCYRATETYPE, '.') <> COALESCE(new.CURRENCYRATETYPE, '.')) OR(COALESCE(old.CONTROLAMT, 0) <> COALESCE(new.CONTROLAMT, 0)) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(old.Posted='Y' AND ((COALESCE(old.DATEACCT, v_DateNull) <> COALESCE(new.DATEACCT, v_DateNull)) OR(COALESCE(old.C_ACCTSCHEMA_ID, '0') <> COALESCE(new.C_ACCTSCHEMA_ID, '0')) OR(COALESCE(old.GL_CATEGORY_ID, '0') <> COALESCE(new.GL_CATEGORY_ID, '0')) OR(COALESCE(old.POSTINGTYPE, '.') <> COALESCE(new.POSTINGTYPE, '.')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(old.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 4DROP FUNCTION public.gl_journal_chk_restrict_trg(); publictadfalse234161255368275gl_journal_post(character varying, character varying)FUNCTIONY&CREATE FUNCTION gl_journal_post(p_pinstance_id character varying, p_gl_journal_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: GL_Journal_Post.sql,v 1.2 2002/05/22 02:48:28 jjanke Exp $ *** * Title: GL Journal Post (preparation) * Description: * - Check Control Amount ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DateAcct TIMESTAMP; v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- Other Variables v_DocStatus GL_Journal.DocStatus%TYPE; v_DocAction GL_Journal.DocAction%TYPE; v_Processing GL_Journal.Processing%TYPE; v_Posted GL_Journal.Posted%TYPE; v_TotalDr GL_Journal.TotalDr%TYPE; v_TotalCr GL_Journal.TotalCr%TYPE; v_ControlAmt GL_Journal.ControlAmt%TYPE; FINISH_PROCESS BOOLEAN:=false; v_is_included NUMERIC:=0; v_available_period NUMERIC:=0; v_is_ready AD_Org.IsReady%TYPE; v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE; v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE; v_org_bule_id AD_Org.AD_Org_ID%TYPE; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; IF(p_PInstance_ID IS NOT NULL) THEN v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter ELSE v_Record_ID:=p_GL_Journal_ID; END IF; RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; BEGIN --BODY /** * Status - Actions * DR CO, VO * CO CL */ v_ResultStr:='ReadingJournal'; SELECT DocStatus, DocAction, Processing, Posted, AD_Org_ID, DateAcct, C_DocType_ID INTO v_DocStatus, v_DocAction, v_Processing, v_Posted, v_AD_Org_ID, v_DateAcct, v_DocType_ID FROM GL_Journal WHERE GL_Journal_ID=v_Record_ID FOR UPDATE; /** * Closed, Voided or Reversed - No action possible */ IF(v_DocStatus IN('CL', 'VO', 'RE')) THEN RAISE EXCEPTION '%', '@AlreadyPosted@' ; --OBTG:-20000-- END IF; /** * Unlock */ IF(NOT FINISH_PROCESS) THEN IF(v_DocAction='XL') THEN UPDATE GL_Journal SET Processing='N', DocAction='--', Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE GL_Journal_ID=v_Record_ID; FINISH_PROCESS:=true; END IF; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN IF(v_Processing='Y') THEN RAISE EXCEPTION '%', '@OtherProcessActive@' ; --OBTG:-20000-- END IF; END IF; --FINISH_PROCESS /** * Close Order */ IF(NOT FINISH_PROCESS) THEN IF(v_DocAction='CL') THEN UPDATE GL_Journal SET DocStatus='CL', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE GL_Journal_ID=v_Record_ID; FINISH_PROCESS:=true; END IF; END IF; --FINISH_PROCESS /** * Void Order */ IF(NOT FINISH_PROCESS) THEN IF(v_DocAction='VO' AND v_DocStatus='DR') THEN -- Cancel all Lines UPDATE GL_JournalLine SET IsActive='N', Updated=TO_DATE(NOW()) WHERE GL_Journal_ID=v_Record_ID; UPDATE GL_Journal SET DocStatus='VO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE GL_Journal_ID=v_Record_ID; FINISH_PROCESS:=true; END IF; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN IF(v_DocAction='RE') THEN IF(v_Posted='Y') THEN RAISE EXCEPTION '%', '@GLJournalDocumentPosted@' ; --OBTG:-20000-- END IF; IF(NOT FINISH_PROCESS) THEN UPDATE GL_Journal SET DocStatus='DR', DocAction='CO', Processed='N', Updated=TO_DATE(NOW()) WHERE GL_Journal_ID=v_Record_ID; FINISH_PROCESS:=true; END IF; END IF; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- Lock journal comes here /** * Process Journal */ -- Check the header belongs to a organization where transactions are posible and ready to use SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed INTO v_is_ready, v_is_tr_allow FROM GL_JOURNAL, AD_Org, AD_OrgType WHERE AD_Org.AD_Org_ID=GL_JOURNAL.AD_Org_ID AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID AND GL_JOURNAL.GL_JOURNAL_ID=v_Record_ID; IF (v_is_ready='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotReady@'; --OBTG:-20000-- END IF; IF (v_is_tr_allow='N') THEN RAISE EXCEPTION '%', '@OrgHeaderNotTransAllowed@'; --OBTG:-20000-- END IF; SELECT AD_ORG_CHK_DOCUMENTS('GL_JOURNAL', 'GL_JOURNALLINE', v_Record_ID, 'GL_JOURNAL_ID', 'GL_JOURNAL_ID') INTO v_is_included FROM dual; IF (v_is_included=-1) THEN RAISE EXCEPTION '%', '@LinesAndHeaderDifferentLEorBU@'; --OBTG:-20000-- END IF; -- Check the period control is opened (only if it is legal entity with accounting) -- Gets the BU or LE of the document SELECT AD_GET_DOC_LE_BU('GL_JOURNAL', v_Record_ID, 'GL_JOURNAL_ID', 'LE') INTO v_org_bule_id FROM DUAL; SELECT AD_OrgType.IsAcctLegalEntity INTO v_isacctle FROM AD_OrgType, AD_Org WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID AND AD_Org.AD_Org_ID=v_org_bule_id; IF (v_isacctle='Y') THEN SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_DateAcct, NULL, v_DocType_ID) INTO v_available_period FROM DUAL; IF (v_available_period<>1) THEN RAISE EXCEPTION '%', '@PeriodNotAvailable@'; --OBTG:-20000-- END IF; END IF; -- Recalculate Totals v_ResultStr:='RecalculateTotals'; UPDATE GL_Journal SET TotalDr= (SELECT COALESCE(SUM(AmtSourceDr), 0) FROM GL_JournalLine WHERE GL_Journal_ID=v_Record_ID AND IsActive='Y' ) , TotalCr= (SELECT COALESCE(SUM(AmtSourceCr), 0) FROM GL_JournalLine WHERE GL_Journal_ID=v_Record_ID AND IsActive='Y' ) WHERE GL_Journal_ID=v_Record_ID; v_ResultStr:='ReadingAmounts'; SELECT ControlAmt, TotalDr, TotalCr INTO v_ControlAmt, v_TotalDr, v_TotalCr FROM GL_Journal WHERE GL_Journal_ID=v_Record_ID FOR UPDATE; IF(v_TotalDr<>v_TotalCr) THEN RAISE EXCEPTION '%', '@DistinctAmtError@' ; --OBTG:-20000-- END IF; END IF; --FINISH_PROCESS IF(NOT FINISH_PROCESS) THEN -- Check ControlAmt IF(v_ControlAmt<>0 AND(v_ControlAmt<>v_TotalDr)) THEN RAISE EXCEPTION '%', '@ControlAmtError@' ; --OBTG:-20000-- ELSE UPDATE GL_Journal SET DocStatus='CO', DocAction='--', Processed='Y', Updated=TO_DATE(NOW()) WHERE GL_Journal_ID=v_Record_ID; END IF; END IF; --FINISH_PROCESS ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; IF(p_PInstance_ID IS NOT NULL) THEN PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', v_ResultStr ; --OBTG:-20100-- END IF; RETURN; END ; $_$ LANGUAGE plpgsql; kDROP FUNCTION public.gl_journal_post(p_pinstance_id character varying, p_gl_journal_id character varying); publictadfalse23416125536829#gl_journal_post0(character varying)FUNCTION CREATE FUNCTION gl_journal_post0(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: GL_Journal_Post0.sql,v 1.1 2002/05/22 02:48:28 jjanke Exp $ *** * Title: GL Journal Post (preparation) * Description: ************************************************************************/ BEGIN PERFORM GL_JOURNAL_POST(p_PInstance_ID, NULL) ; END ; $_$ LANGUAGE plpgsql; IDROP FUNCTION public.gl_journal_post0(p_pinstance_id character varying); publictadfalse23416m125595553gl_journal_trg()FUNCTION CREATE FUNCTION gl_journal_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Journal * - Update Journal Batch Totals if exists (insert is always 0) */ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Subtract Old Amount IF(TG_OP = 'UPDATE') THEN IF(old.TotalDr <> NEW.TotalDr OR OLD.TotalCr <> NEW.TotalCr) THEN IF(old.GL_JournalBatch_ID IS NOT NULL AND old.IsActive='Y') THEN UPDATE GL_JournalBatch SET TotalDr=TotalDr - old.TotalDr, TotalCr=TotalCr - old.TotalCr WHERE GL_JournalBatch_ID=old.GL_JournalBatch_ID; END IF; END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(old.GL_JournalBatch_ID IS NOT NULL AND old.IsActive='Y') THEN UPDATE GL_JournalBatch SET TotalDr=TotalDr - old.TotalDr, TotalCr=TotalCr - old.TotalCr WHERE GL_JournalBatch_ID=old.GL_JournalBatch_ID; END IF; END IF; -- Add new Amount IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN IF(COALESCE(old.TotalDr, 0) <> COALESCE(NEW.TotalDr, 0) OR COALESCE(old.TotalCr, 0) <> COALESCE(NEW.TotalCr, 0)) THEN IF(new.GL_JournalBatch_ID IS NOT NULL AND new.IsActive='Y') THEN UPDATE GL_JournalBatch SET TotalDr=TotalDr + new.TotalDr, TotalCr=TotalCr + new.TotalCr WHERE GL_JournalBatch_ID=new.GL_JournalBatch_ID; END IF; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 'DROP FUNCTION public.gl_journal_trg(); publictadfalse23416125536831'gl_journalbatch_post(character varying)FUNCTIONCREATE FUNCTION gl_journalbatch_post(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: GL_JournalBatch_Post.sql,v 1.2 2002/08/12 04:53:46 jjanke Exp $ *** * Title: Post all Journals of a Batch * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; DECLARE CUR_Journal RECORD; BEGIN -- Post all Journals FOR CUR_Journal IN (SELECT GL_Journal_ID FROM GL_Journal WHERE GL_JournalBatch_ID=v_Record_ID AND Processed='N' ) LOOP PERFORM GL_JOURNAL_POST(NULL, CUR_Journal.GL_Journal_ID) ; END LOOP; -- Are all Journals Posted:1 UPDATE GL_JournalBatch SET Processed='Y', Updated=TO_DATE(NOW()), UpdatedBy=v_AD_User_ID WHERE GL_JournalBatch_ID=v_Record_ID AND NOT EXISTS (SELECT * FROM GL_Journal WHERE GL_JournalBatch_ID=v_Record_ID AND Processed='N' ) ; END; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; MDROP FUNCTION public.gl_journalbatch_post(p_pinstance_id character varying); publictadfalse23416j125595547gl_journalline2_trg()FUNCTION CREATE FUNCTION gl_journalline2_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_AcctSchema_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_TargetCurrency_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_StdPrecision NUMERIC(10) ; v_rate NUMERIC; v_CurrencyRate NUMERIC; v_CurrencyRateType VARCHAR(60) ; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF(TG_OP = 'UPDATE') THEN IF NOT((COALESCE(old.AMTSOURCEDR, 0) <> COALESCE(NEW.AMTSOURCEDR, 0) OR COALESCE(old.AMTSOURCECR, 0) <> COALESCE(NEW.AMTSOURCECR, 0) OR COALESCE(old.C_CURRENCY_ID, '0') <> COALESCE(NEW.C_CURRENCY_ID, '0'))) THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; END IF; SELECT C_AcctSchema_ID, CurrencyRate, COALESCE(CurrencyRateType, 'S') INTO v_AcctSchema_ID, v_CurrencyRate, v_CurrencyRateType FROM GL_Journal WHERE GL_Journal_ID=NEW.GL_Journal_ID; SELECT COALESCE(MAX(c.C_Currency_ID), '0'), COALESCE(MAX(c.StdPrecision), 2) INTO v_TargetCurrency_ID, v_StdPrecision FROM C_AcctSchema a, C_Currency c WHERE a.C_Currency_ID=c.C_Currency_ID AND a.C_AcctSchema_ID=v_AcctSchema_ID; v_rate:=C_CURRENCY_RATE(NEW.C_Currency_ID, v_TargetCurrency_ID, NEW.DateAcct, v_CurrencyRateType, NEW.AD_CLIENT_ID, NEW.AD_ORG_ID) ; IF(v_rate IS NULL) THEN v_rate:=v_CurrencyRate; END IF; NEW.AMTACCTDR:=ROUND(COALESCE(NEW.AMTSOURCEDR, 0) *v_rate, v_StdPrecision) ; NEW.AMTACCTCR:=ROUND(COALESCE(NEW.AMTSOURCECR, 0) *v_rate, v_StdPrecision) ; NEW.CURRENCYRATE:=v_rate; NEW.CURRENCYRATETYPE:=v_CurrencyRateType; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; ,DROP FUNCTION public.gl_journalline2_trg(); publictadfalse23416k125595549gl_journalline_trg()FUNCTION CREATE FUNCTION gl_journalline_trg() RETURNS trigger AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: GL_JournalLine_Trg.sql,v 1.3 2002/07/01 02:29:00 jjanke Exp $ *** * Title: Journal Line * Description: * - Update Journal Totals ************************************************************************/ v_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RO NUMERIC; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; -- Get ID IF(TG_OP = 'UPDATE' OR TG_OP = 'INSERT') THEN v_ID:=new.GL_Journal_ID; ELSE v_ID:=old.GL_Journal_ID; END IF; -- ReadOnly Check SELECT COUNT(*) INTO v_RO FROM GL_Journal WHERE GL_Journal_ID=v_ID AND(Processed='Y' OR Posted='Y') ; IF(v_RO > 0) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; -- Subtract Old Amount IF(TG_OP = 'UPDATE' OR TG_OP = 'DELETE') THEN IF(old.IsActive='Y') THEN UPDATE GL_Journal SET TotalDr=TotalDr - old.AmtSourceDr, TotalCr=TotalCr - old.AmtSourceCr WHERE GL_Journal_ID=old.GL_Journal_ID; END IF; END IF; -- Add new Amount IF(TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN IF(new.IsActive='Y') THEN UPDATE GL_Journal SET TotalDr=TotalDr + new.AmtSourceDr, TotalCr=TotalCr + new.AmtSourceCr WHERE GL_Journal_ID=new.GL_Journal_ID; END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $_$ LANGUAGE plpgsql; +DROP FUNCTION public.gl_journalline_trg(); publictadfalse23416125536834dgl_period_open(character varying, timestamp without time zone, character varying, character varying)FUNCTIONHCREATE FUNCTION gl_period_open(p_ad_client_id character varying, p_dateacct timestamp without time zone, p_docbasetype character varying, p_c_acctschema_id character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: GL_Period_Open.sql,v 1.5 2003/02/07 05:49:58 jjanke Exp $ *** * Title: Period Control * Description: * Determine if period is open for DateAcct and DocBaseType (API, ..) * If C_AcctSchema_ID is specified, check only for this schema, * otherwise for the first of AD_Client_ID * Return * C_Period_ID if period is open ot 0 if auto control * -1 if period is not open * * Test: * SELECT GL_Period_Open (11, '01-JAN-2002', 'ARI') FROM DUAL ************************************************************************/ v_C_Calendar_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_C_Period_ID VARCHAR(32) := -1; -- not found --OBTG:varchar2-- v_Temp_Period NUMERIC(10) ; v_PeriodStatus C_PeriodControl.PeriodStatus%TYPE; -- --TYPE RECORD IS REFCURSOR; CUR_AS RECORD; BEGIN -- Get Calendar SELECT MAX(C_Calendar_ID) INTO v_C_Calendar_ID FROM AD_ClientInfo WHERE AD_Client_ID = p_AD_Client_ID; IF(v_C_Calendar_ID IS NULL) THEN RAISE NOTICE '%','NO Calendar' ; RETURN NULL; END IF; -- FOR CUR_AS IN (SELECT AutoPeriodControl, Period_OpenHistory, Period_OpenFuture FROM C_AcctSchema WHERE AD_Client_ID = p_AD_Client_ID AND(p_C_AcctSchema_ID IS NULL OR C_AcctSchema_ID = p_C_AcctSchema_ID) ) LOOP RAISE NOTICE '%','AcctSchema - Auto=' || CUR_AS.AutoPeriodControl ; v_C_Period_ID := 1; IF(CUR_AS.AutoPeriodControl = 'Y') THEN IF(p_DateAcct BETWEEN(TRUNC(TO_DATE(NOW()), 'MM') -CUR_AS.Period_OpenHistory) AND(ADD_MONTHS(TRUNC(TO_DATE(NOW()), 'MM'), 1) +CUR_AS.Period_OpenFuture)) THEN RAISE NOTICE '%','Open(A) ' ||(TRUNC(TO_DATE(NOW()), 'MM') -CUR_AS.Period_OpenHistory) || ' - ' ||(ADD_MONTHS(TRUNC(TO_DATE(NOW()), 'MM'), 1) +CUR_AS.Period_OpenFuture) ; v_C_Period_ID := 0; -- open ELSE RAISE NOTICE '%','Not in Limits (A) ' ||(TRUNC(TO_DATE(NOW()), 'MM') -CUR_AS.Period_OpenHistory) || ' - ' ||(ADD_MONTHS(TRUNC(TO_DATE(NOW()), 'MM'), 1) +CUR_AS.Period_OpenFuture) ; v_C_Period_ID := -1; -- closed END IF; END IF; -- No AutoPeriodControl -- -- Get Period if not AutoPeriodControl aoutside limits IF(v_C_Period_ID <> -1) THEN SELECT MAX(p.C_Period_ID) INTO v_C_Period_ID FROM C_Period p, C_Year y WHERE TRUNC(p_DateAcct) BETWEEN TRUNC(p.StartDate) AND TRUNC(p.EndDate) AND p.C_Year_ID = y.C_Year_ID AND y.C_Calendar_ID = v_C_Calendar_ID AND p.PeriodType = 'S'; -- standard period -- We have no Period defined IF(v_C_Period_ID IS NULL) THEN RAISE NOTICE '%','No Period found for Date ' || p_DateAcct ; v_C_Period_ID := -1; ELSIF(CUR_AS.AutoPeriodControl <> 'Y') THEN -- Check PeriodControl for Period and Document Type SELECT MAX(PeriodStatus) INTO v_PeriodStatus FROM C_PeriodControl WHERE C_Period_ID = v_C_Period_ID AND DocBaseType = p_DocBaseType; IF(v_PeriodStatus IS NULL) THEN RAISE NOTICE '%','No PeriodStatus found for Period ' || v_C_Period_ID ; v_C_Period_ID := -1; ELSIF(v_PeriodStatus = 'O') THEN RAISE NOTICE '%','Open' ; ELSE RAISE NOTICE '%','NOT Open: PeriodStatus=' || v_PeriodStatus ; v_C_Period_ID := -1; END IF; END IF; END IF; EXIT; END LOOP; RAISE NOTICE '%','Period_ID=' || v_C_Period_ID ; RETURN v_C_Period_ID; END ; $_$ LANGUAGE plpgsql; DROP FUNCTION public.gl_period_open(p_ad_client_id character varying, p_dateacct timestamp without time zone, p_docbasetype character varying, p_c_acctschema_id character varying); publictadfalse23416125536836<greaterequal(timestamp without time zone, character varying)FUNCTIONCREATE FUNCTION greaterequal(timestamp without time zone, character varying) RETURNS boolean AS $_$ BEGIN RETURN $1 >= TO_DATE($2); END; $_$ LANGUAGE plpgsql IMMUTABLE; SDROP FUNCTION public.greaterequal(timestamp without time zone, character varying); publictadfalse23416125536837hex_to_int(character varying)FUNCTION{CREATE FUNCTION hex_to_int(character varying) RETURNS numeric AS $_$ DECLARE h alias for $1; exec varchar; curs refcursor; res numeric; res1 numeric; res2 numeric; res3 numeric; res4 numeric; hi varchar; h1 varchar; h2 varchar; h3 varchar; h4 varchar; exp1 numeric(50); exp2 numeric(50); exp3 numeric(50); BEGIN if length(h) < 32 then hi:=repeat('0',32-length(h)) || h; else hi:=h; end if; h1:=substr(hi,25,8); h2:=substr(hi,17,8); h3:=substr(hi,9,8); h4:=substr(hi,1,8); exec := 'SELECT x''' || h1 || '''::bigint'; OPEN curs FOR EXECUTE exec; FETCH curs INTO res1; CLOSE curs; exec := 'SELECT x''' || h2 || '''::bigint'; OPEN curs FOR EXECUTE exec; FETCH curs INTO res2; CLOSE curs; exec := 'SELECT x''' || h3 || '''::bigint'; OPEN curs FOR EXECUTE exec; FETCH curs INTO res3; CLOSE curs; exec := 'SELECT x''' || h4 || '''::bigint'; OPEN curs FOR EXECUTE exec; FETCH curs INTO res4; CLOSE curs; exp1=pow(16::numeric,8::numeric); exp2=pow(16::numeric,16::numeric); exp3=pow(16::numeric,24::numeric); res:=res1; res:=res+res2*exp1; res:=res+res3*exp2; res:=res+res4*exp3; return to_number(res); END;$_$ LANGUAGE plpgsql IMMUTABLE STRICT; 4DROP FUNCTION public.hex_to_int(character varying); publictadfalse23416125536838hex_to_int(numeric)FUNCTIONCREATE FUNCTION hex_to_int(numeric) RETURNS numeric AS $_$ DECLARE h alias for $1; exec varchar; curs refcursor; res int; BEGIN return h; END;$_$ LANGUAGE plpgsql IMMUTABLE STRICT; *DROP FUNCTION public.hex_to_int(numeric); publictadfalse23416n125595555i_elementvalue_trg()FUNCTIONCCREATE FUNCTION i_elementvalue_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; SELECT COALESCE(MAX(SEQNO),0)+10 INTO NEW.SEQNO FROM I_ELEMENTVALUE; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; +DROP FUNCTION public.i_elementvalue_trg(); publictadfalse23416125536840+instr(character varying, character varying)FUNCTIONCREATE FUNCTION instr(character varying, character varying) RETURNS integer AS $_$DECLARE pos integer; BEGIN pos:= instr($1, $2, 1); RETURN pos; END; $_$ LANGUAGE plpgsql IMMUTABLE; BDROP FUNCTION public.instr(character varying, character varying); publictadfalse23416j1255368414instr(character varying, character varying, integer)FUNCTIONCREATE FUNCTION instr(string character varying, string_to_search character varying, beg_index integer) RETURNS integer AS $$DECLARE pos integer NOT NULL DEFAULT 0; temp_str varchar; beg integer; length integer; ss_length integer; BEGIN IF ((string IS NULL) OR (string_to_search IS NULL) OR (beg_index IS NULL)) THEN RETURN 0; END IF; IF beg_index > 0 THEN temp_str := substring(string FROM beg_index); pos := position(string_to_search IN temp_str); IF pos = 0 THEN RETURN 0; ELSE RETURN pos + beg_index - 1; END IF; ELSE ss_length := char_length(string_to_search); length := char_length(string); beg := length + beg_index - ss_length + 2; WHILE beg > 0 LOOP temp_str := substring(string FROM beg FOR ss_length); pos := position(string_to_search IN temp_str); IF pos > 0 THEN RETURN beg; END IF; beg := beg - 1; END LOOP; RETURN 0; END IF; END; $$ LANGUAGE plpgsql IMMUTABLE; mDROP FUNCTION public.instr(string character varying, string_to_search character varying, beg_index integer); publictadfalse23416x125536842=instr(character varying, character varying, integer, integer)FUNCTIONCREATE FUNCTION instr(string character varying, string_to_search character varying, beg_index integer, occur_index integer) RETURNS integer AS $$DECLARE pos integer NOT NULL DEFAULT 0; occur_number integer NOT NULL DEFAULT 0; temp_str varchar; beg integer; i integer; length integer; ss_length integer; BEGIN IF ((string IS NULL) OR (string_to_search IS NULL) OR (beg_index IS NULL) OR (occur_index IS NULL)) THEN RETURN 0; END IF; IF beg_index > 0 THEN beg := beg_index; temp_str := substring(string FROM beg_index); FOR i IN 1..occur_index LOOP pos := position(string_to_search IN temp_str); IF i = 1 THEN beg := beg + pos - 1; ELSE beg := beg + pos; END IF; temp_str := substring(string FROM beg + 1); END LOOP; IF pos = 0 THEN RETURN 0; ELSE RETURN beg; END IF; ELSE ss_length := char_length(string_to_search); length := char_length(string); beg := length + beg_index - ss_length + 2; WHILE beg > 0 LOOP temp_str := substring(string FROM beg FOR ss_length); pos := position(string_to_search IN temp_str); IF pos > 0 THEN occur_number := occur_number + 1; IF occur_number = occur_index THEN RETURN beg; END IF; END IF; beg := beg - 1; END LOOP; RETURN 0; END IF; END; $$ LANGUAGE plpgsql IMMUTABLE; DROP FUNCTION public.instr(string character varying, string_to_search character varying, beg_index integer, occur_index integer); publictadfalse23416125536843is_trigger_enabled(text)FUNCTIONCREATE FUNCTION is_trigger_enabled(tg_name text) RETURNS boolean AS $$ DECLARE v_isEnabled boolean := false; BEGIN SELECT tgenabled INTO v_isEnabled FROM pg_trigger WHERE UPPER(tgname) = UPPER(tg_name); RETURN v_isEnabled; EXCEPTION WHEN OTHERS THEN SELECT (UPPER(tgenabled)<>'D') INTO v_isEnabled FROM pg_trigger WHERE tgname = tg_name; RETURN v_isEnabled; END; $$ LANGUAGE plpgsql STABLE; 7DROP FUNCTION public.is_trigger_enabled(tg_name text); publictadfalse23416125536844last_day(date)FUNCTIONCREATE FUNCTION last_day(date) RETURNS date AS $_$select cast(date_trunc('month', $1) + '1 month'::interval as date) - 1$_$ LANGUAGE sql; %DROP FUNCTION public.last_day(date); publictadfalse6125536845"last_day(timestamp with time zone)FUNCTIONCREATE FUNCTION last_day(timestamp with time zone) RETURNS date AS $_$select cast(date_trunc('month', cast($1 AS date)) + '1 month'::interval as date) - 1$_$ LANGUAGE sql; 9DROP FUNCTION public.last_day(timestamp with time zone); publictadfalse6125536846-lowerequalnumeric(numeric, character varying)FUNCTIONCREATE FUNCTION lowerequalnumeric(numeric, character varying) RETURNS boolean AS $_$ BEGIN RETURN $1 <= TO_NUMBER($2); END; $_$ LANGUAGE plpgsql IMMUTABLE; DDROP FUNCTION public.lowerequalnumeric(numeric, character varying); publictadfalse23416125536847Clowerequaltimestamp(timestamp without time zone, character varying)FUNCTIONCREATE FUNCTION lowerequaltimestamp(timestamp without time zone, character varying) RETURNS boolean AS $_$ BEGIN RETURN $1 <= TO_DATE($2); END; $_$ LANGUAGE plpgsql IMMUTABLE; ZDROP FUNCTION public.lowerequaltimestamp(timestamp without time zone, character varying); publictadfalse23416q125595561m_attributevalue_trg()FUNCTION| CREATE FUNCTION m_attributevalue_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_desc VARCHAR(500); --OBTG:varchar2-- v_desc_aux VARCHAR(500); --OBTG:varchar2-- pos NUMERIC; --TYPE RECORD IS REFCURSOR; CurSetInstance RECORD; BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF COALESCE(New.Name,'.')!=COALESCE(Old.Name,'.') THEN UPDATE M_AttributeInstance SET Value = New.Name WHERE M_AttributeValue_ID = New.M_AttributeValue_ID; --Upate Attribute set instance descriptions... FOR CurSetInstance IN (select si.description, si.m_attributeset_id, i.m_attribute_id, si.M_AttributeSetInstance_ID from m_attributeinstance i, m_attributesetinstance si where si.m_attributesetinstance_id = i.m_attributesetinstance_id and i.m_attributevalue_id = New.M_AttributeValue_ID) LOOP select (case when isSerNo ='Y' then 1 else 0 end)+ (case when isLot ='Y' then 1 else 0 end)+ (case when isGuaranteeDate ='Y' then 1 else 0 end)+ (select count(*) from M_AttributeUse u1 where u1.M_AttributeSet_ID = u.M_AttributeSet_ID and u1.seqno0) THEN -- Get Rounding Precision for Product SELECT COALESCE(MAX(u.StdPrecision), 0) INTO v_StdPrecision FROM C_UOM u, M_PRODUCT p WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID; -- RETURN ROUND(v_Quantity, v_StdPrecision) ; END IF; RETURN 0; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_bom_qty_onhand(p_product_id character varying, p_warehouse_id character varying, p_locator_id character varying); publictadfalse23416%1255368566m_bom_qty_onhand(character varying, character varying)FUNCTIONCREATE FUNCTION m_bom_qty_onhand(p_product_id character varying, p_warehouse_id character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN M_BOM_QTY_ONHAND ($1, $2, NULL); END ; $_$ LANGUAGE plpgsql; iDROP FUNCTION public.m_bom_qty_onhand(p_product_id character varying, p_warehouse_id character varying); publictadfalse23416&125536857Jm_bom_qty_ordered(character varying, character varying, character varying)FUNCTIONGCREATE FUNCTION m_bom_qty_ordered(p_product_id character varying, p_warehouse_id character varying, p_locator_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Return quantity ordered for BOM */ v_Warehouse_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Quantity NUMERIC:= 99999; -- unlimited v_IsBOM CHAR(1) ; v_IsStocked CHAR(1) ; v_ProductType VARCHAR(60); v_ProductQty NUMERIC; v_StdPrecision NUMERIC; -- Get BOM Product info --TYPE RECORD IS REFCURSOR; CUR_BOM RECORD; -- BEGIN -- Check Parameters v_Warehouse_ID := p_Warehouse_ID; IF(v_Warehouse_ID IS NULL) THEN IF(p_Locator_ID IS NULL) THEN RETURN 0; ELSE SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID FROM M_Locator WHERE M_Locator_ID = p_Locator_ID; END IF; END IF; IF(v_Warehouse_ID IS NULL) THEN RETURN 0; END IF; -- DBMS_OUTPUT.PUT_LINE('Warehouse=' || v_Warehouse_ID); -- Check, if product exists and if it is stocked BEGIN SELECT IsBOM, ProductType, IsStocked INTO v_IsBOM, v_ProductType, v_IsStocked FROM M_Product WHERE M_Product_ID = p_Product_ID; -- EXCEPTION -- not found WHEN OTHERS THEN RETURN 0; END; -- No reservation for non-stocked IF((v_ProductType <> 'I' OR(v_IsStocked = 'N' AND v_IsBOM = 'N'))) THEN RETURN 0; -- Stocked item ELSIF(v_IsStocked = 'Y') THEN -- Get ProductQty SELECT COALESCE(SUM(QtyOrdered), 0) INTO v_ProductQty FROM M_Storage_Pending s WHERE M_Product_ID = p_Product_ID AND M_Warehouse_ID = v_Warehouse_ID; -- RETURN v_ProductQty; END IF; -- Go though BOM -- DBMS_OUTPUT.PUT_LINE('BOM'); FOR CUR_BOM IN (SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType FROM M_Product_BOM b, M_Product p WHERE b.M_ProductBOM_ID = p.M_Product_ID AND b.M_Product_ID = p_Product_ID ) LOOP -- Stocked Items "leaf node" IF(CUR_BOM.ProductType = 'I' AND CUR_BOM.IsStocked = 'Y') THEN -- Get ProductQty SELECT COALESCE(SUM(QtyOrdered), 0) INTO v_ProductQty FROM M_Storage_Pending s WHERE M_Product_ID = CUR_BOM.M_ProductBOM_ID AND M_Warehouse_ID = v_Warehouse_ID; -- Get Rounding Precision SELECT COALESCE(MAX(u.StdPrecision), 0) INTO v_StdPrecision FROM C_UOM u, M_Product p WHERE u.C_UOM_ID = p.C_UOM_ID AND p.M_Product_ID = CUR_BOM.M_ProductBOM_ID; -- How much can we make with this product v_ProductQty := ROUND(v_ProductQty/CUR_BOM.BOMQty, v_StdPrecision) ; -- How much can we make overall IF(v_ProductQty < v_Quantity) THEN v_Quantity := v_ProductQty; END IF; -- Another BOM ELSIF(CUR_BOM.IsBOM = 'Y') THEN v_ProductQty := M_BOM_Qty_Reserved(CUR_BOM.M_ProductBOM_ID, v_Warehouse_ID) ; -- How much can we make overall IF(v_ProductQty < v_Quantity) THEN v_Quantity := v_ProductQty; END IF; END IF; END LOOP; -- BOM -- Unlimited (e.g. only services) IF(v_Quantity = 99999) THEN RETURN 0; END IF; IF(v_Quantity > 0) THEN -- Get Rounding Precision for Product SELECT COALESCE(MAX(u.StdPrecision), 0) INTO v_StdPrecision FROM C_UOM u, M_Product p WHERE u.C_UOM_ID = p.C_UOM_ID AND p.M_Product_ID = p_Product_ID; -- RETURN ROUND(v_Quantity, v_StdPrecision) ; END IF; -- RETURN 0; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_bom_qty_ordered(p_product_id character varying, p_warehouse_id character varying, p_locator_id character varying); publictadfalse23416'1255368597m_bom_qty_ordered(character varying, character varying)FUNCTIONCREATE FUNCTION m_bom_qty_ordered(p_product_id character varying, p_warehouse_id character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN M_BOM_QTY_ORDERED ($1, $2, NULL); END ; $_$ LANGUAGE plpgsql; jDROP FUNCTION public.m_bom_qty_ordered(p_product_id character varying, p_warehouse_id character varying); publictadfalse23416(125536860Km_bom_qty_reserved(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION m_bom_qty_reserved(p_product_id character varying, p_warehouse_id character varying, p_locator_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2009 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * Return quantity reserved for BOM */ v_Warehouse_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Quantity NUMERIC:=99999; -- unlimited v_IsBOM CHAR(1) ; v_IsStocked CHAR(1) ; v_ProductType VARCHAR(60); v_ProductQty NUMERIC; v_StdPrecision NUMERIC; -- Get BOM Product info --TYPE RECORD IS REFCURSOR; CUR_BOM RECORD; -- BEGIN -- Check Parameters v_Warehouse_ID:=p_Warehouse_ID; IF(v_Warehouse_ID IS NULL) THEN IF(p_Locator_ID IS NULL) THEN RETURN 0; ELSE SELECT MAX(M_Warehouse_ID) INTO v_Warehouse_ID FROM M_Locator WHERE M_Locator_ID=p_Locator_ID; END IF; END IF; IF(v_Warehouse_ID IS NULL) THEN RETURN 0; END IF; -- DBMS_OUTPUT.PUT_LINE('Warehouse=' || v_Warehouse_ID); -- Check, if product exists and if it is stocked BEGIN SELECT IsBOM, ProductType, IsStocked INTO v_IsBOM, v_ProductType, v_IsStocked FROM M_Product WHERE M_Product_ID=p_Product_ID; -- EXCEPTION -- not found WHEN OTHERS THEN RETURN 0; END; -- No reservation for non-stocked IF((v_ProductType <> 'I' OR(v_IsStocked='N' AND v_IsBOM='N'))) THEN RETURN 0; -- Stocked item ELSIF(v_IsStocked='Y') THEN -- Get ProductQty SELECT COALESCE(SUM(QtyReserved), 0) INTO v_ProductQty FROM M_Storage_Pending s WHERE M_Product_ID=p_Product_ID AND M_Warehouse_ID=v_Warehouse_ID; -- RETURN v_ProductQty; END IF; -- Go though BOM -- DBMS_OUTPUT.PUT_LINE('BOM'); FOR CUR_BOM IN (SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM, p.IsStocked, p.ProductType FROM M_Product_BOM b, M_Product p WHERE b.M_ProductBOM_ID=p.M_Product_ID AND b.M_Product_ID=p_Product_ID ) LOOP -- Stocked Items "leaf node" IF(CUR_BOM.ProductType='I' AND CUR_BOM.IsStocked='Y') THEN -- Get ProductQty SELECT COALESCE(SUM(QtyReserved), 0) INTO v_ProductQty FROM M_Storage_Pending s WHERE M_Product_ID=CUR_BOM.M_ProductBOM_ID AND M_Warehouse_ID=v_Warehouse_ID; -- Get Rounding Precision SELECT COALESCE(MAX(u.StdPrecision), 0) INTO v_StdPrecision FROM C_UOM u, M_Product p WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=CUR_BOM.M_ProductBOM_ID; -- How much can we make with this product v_ProductQty:=ROUND(v_ProductQty/CUR_BOM.BOMQty, v_StdPrecision) ; -- How much can we make overall IF(v_ProductQty < v_Quantity) THEN v_Quantity:=v_ProductQty; END IF; -- Another BOM ELSIF(CUR_BOM.IsBOM='Y') THEN v_ProductQty:=M_BOM_Qty_Reserved(CUR_BOM.M_ProductBOM_ID, v_Warehouse_ID) ; -- How much can we make overall IF(v_ProductQty < v_Quantity) THEN v_Quantity:=v_ProductQty; END IF; END IF; END LOOP; -- BOM -- Unlimited (e.g. only services) IF(v_Quantity=99999) THEN RETURN 0; END IF; IF(v_Quantity > 0) THEN -- Get Rounding Precision for Product SELECT COALESCE(MAX(u.StdPrecision), 0) INTO v_StdPrecision FROM C_UOM u, M_Product p WHERE u.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=p_Product_ID; -- RETURN ROUND(v_Quantity, v_StdPrecision) ; END IF; RETURN 0; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_bom_qty_reserved(p_product_id character varying, p_warehouse_id character varying, p_locator_id character varying); publictadfalse23416)1255368628m_bom_qty_reserved(character varying, character varying)FUNCTIONCREATE FUNCTION m_bom_qty_reserved(p_product_id character varying, p_warehouse_id character varying) RETURNS numeric AS $_$ DECLARE BEGIN RETURN M_BOM_QTY_RESERVED ($1, $2, NULL); END ; $_$ LANGUAGE plpgsql; kDROP FUNCTION public.m_bom_qty_reserved(p_product_id character varying, p_warehouse_id character varying); publictadfalse23416*125536863Fm_check_stock(character varying, character varying, character varying)FUNCTIONCREATE FUNCTION m_check_stock(p_m_product_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, OUT p_result numeric, OUT p_message character varying) RETURNS record AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_ExistsNegativeStock NUMERIC; v_Stock CHAR:='N'; v_Name VARCHAR(60) ; --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN v_ResultStr:='Checking stock'; p_Result:=1; SELECT ALLOWNEGATIVESTOCK INTO v_Stock FROM AD_CLIENTINFO WHERE AD_CLIENT_ID=p_AD_Client_ID; IF v_Stock='N' THEN SELECT COUNT(*) INTO v_ExistsNegativeStock FROM ( SELECT ROUND(COALESCE(QTYONHAND, 0), 2) AS QTY, ROUND(COALESCE(QTYORDERONHAND, 0), 2) AS QTYORDER FROM M_STORAGE_DETAIL WHERE M_PRODUCT_ID=p_M_Product_ID AND AD_CLIENT_ID=p_AD_Client_ID AND AD_ORG_ID=p_AD_Org_ID ) A WHERE QTY<0 OR QTYORDER<0; IF v_ExistsNegativeStock<>0 THEN p_Result:=0; p_Message:='@NotEnoughStocked@'; END IF; END IF; RETURN; EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; RAISE EXCEPTION '%', SQLERRM; RETURN; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_check_stock(p_m_product_id character varying, p_ad_client_id character varying, p_ad_org_id character varying, OUT p_result numeric, OUT p_message character varying); publictadfalse23416+125536864*m_copy_product_template(character varying)FUNCTIONCREATE FUNCTION m_copy_product_template(pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Record Info v_Bpartner VARCHAR(32); --OBTG:VARCHAR2-- v_Mpricelist VARCHAR(32); --OBTG:VARCHAR2-- v_Currency VARCHAR(32); --OBTG:VARCHAR2-- v_Warehouse VARCHAR(32); --OBTG:VARCHAR2-- v_SeqNo NUMERIC; v_CorderId VARCHAR(32); --OBTG:varchar2-- v_Client VARCHAR(32); --OBTG:VARCHAR2-- v_Org VARCHAR(32); --OBTG:VARCHAR2-- v_Createdby VARCHAR(32); --OBTG:VARCHAR2-- v_Dateordered TIMESTAMP; v_BillTo NUMERIC; v_BpartnerLocation VARCHAR(32); --OBTG:VARCHAR2-- v_Pricelist VARCHAR(32); --OBTG:VARCHAR2-- v_Pricelimit NUMERIC; v_Pricestd NUMERIC; v_Linenetamount NUMERIC; v_Discount VARCHAR(32); --OBTG:VARCHAR2-- v_Tax VARCHAR(32); --OBTG:VARCHAR2-- v_Issotrx CHAR; v_NoOfLines NUMERIC:=0; v_projectID VARCHAR(32); --OBTG:varchar2-- -- Copy Cur_ProductTemplate RECORD; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PINSTANCE i LEFT JOIN AD_PINSTANCE_PARA p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; v_ResultStr:='ReadingOrder'; SELECT AD_CLIENT_ID, AD_ORG_ID, CREATEDBY, DATEORDERED, C_BPARTNER_ID, BILLTO_ID, C_BPARTNER_LOCATION_ID, C_CURRENCY_ID, M_WAREHOUSE_ID, M_PRICELIST_ID, C_PROJECT_ID, ISSOTRX INTO v_client, v_org, v_Createdby, v_Dateordered, v_Bpartner, v_BillTo, v_BpartnerLocation, v_Currency, v_Warehouse, v_Mpricelist, v_projectID, v_Issotrx FROM C_ORDER WHERE C_Order_ID=v_Record_ID; SELECT COALESCE(MAX(C_ORDERLINE.line), 10) INTO v_SeqNo FROM C_ORDERLINE WHERE C_ORDERLINE.C_ORDER_ID=v_Record_ID; -- Record_ID is the Tab_ID to copy to v_ResultStr:='Copying'; FOR Cur_ProductTemplate IN (SELECT M_PRODUCT_TEMPLATE.M_PRODUCT_ID, M_PRODUCT_TEMPLATE.QTY, M_PRODUCT.C_TaxCategory_Id, M_PRODUCT.C_UOM_ID FROM M_PRODUCT_TEMPLATE, M_PRODUCT WHERE M_PRODUCT_TEMPLATE.M_PRODUCT_ID=M_PRODUCT.M_PRODUCT_ID AND M_PRODUCT_TEMPLATE.TYPE_TEMPLATE IN('2', '3') AND M_PRODUCT_TEMPLATE.C_Bpartner_Id=v_Bpartner ) LOOP -- Get prices SELECT COALESCE(MAX(M_PRODUCTPRICE.PRICESTD), 0) AS PRICESTD, COALESCE(MAX(M_PRODUCTPRICE.PRICELIST), 0) AS PRICELIST, COALESCE(MAX(M_PRODUCTPRICE.PRICELIMIT), 0) AS PRICELIMIT INTO v_Pricestd, v_Pricelist, v_Pricelimit FROM M_PRICELIST_VERSION, M_PRODUCTPRICE WHERE M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID=M_PRODUCTPRICE.M_PRICELIST_VERSION_ID AND M_PRICELIST_VERSION.VALIDFROM= (SELECT MAX(VALIDFROM) FROM M_PRICELIST_VERSION WHERE ISACTIVE='Y' AND VALIDFROM<=TO_DATE(NOW()) AND M_PRICELIST_ID=v_Mpricelist ) AND M_PRICELIST_VERSION.M_PRICELIST_ID=v_Mpricelist AND M_PRODUCTPRICE.M_PRODUCT_ID=Cur_ProductTemplate.M_PRODUCT_ID; v_Linenetamount:=C_Currency_Round(M_Get_Offers_Price(TO_DATE(NOW()), v_Bpartner, Cur_ProductTemplate.M_Product_ID, v_Pricestd,Cur_ProductTemplate.QTY,v_Mpricelist ) *Cur_ProductTemplate.QTY, v_Currency, NULL) ; SELECT C_Gettax(Cur_ProductTemplate.M_PRODUCT_ID, v_Dateordered, v_org, v_Warehouse, v_BillTo, v_BpartnerLocation, v_projectID, v_Issotrx) INTO v_tax FROM DUAL; v_Discount:=(v_Pricelist - v_Pricestd) /v_Pricelist; -- Get next no SELECT * INTO v_CorderId FROM Ad_Sequence_Next('C_OrderLine', v_client) ; -- Insert INSERT INTO C_ORDERLINE ( C_ORDERLINE_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY, C_ORDER_ID, LINE, C_BPARTNER_ID, C_BPARTNER_LOCATION_ID, DATEORDERED, DATEPROMISED, DATEDELIVERED, DATEINVOICED, DESCRIPTION, M_PRODUCT_ID, M_WAREHOUSE_ID, DIRECTSHIP, C_UOM_ID, QTYORDERED, QTYRESERVED, QTYDELIVERED, QTYINVOICED, M_SHIPPER_ID, C_CURRENCY_ID, PRICELIST, PRICEACTUAL, PRICELIMIT, LINENETAMT, DISCOUNT, FREIGHTAMT, C_CHARGE_ID, CHARGEAMT, C_TAX_ID, S_RESOURCEASSIGNMENT_ID, REF_ORDERLINE_ID, M_ATTRIBUTESETINSTANCE_ID, ISDESCRIPTION, QUANTITYORDER, M_PRODUCT_UOM_ID, PriceStd ) VALUES ( v_CorderId, v_client, v_org, 'Y', TO_DATE(NOW()), v_Createdby, TO_DATE(NOW()), v_Createdby, v_Record_ID, v_SeqNo, v_Bpartner, v_BpartnerLocation, v_Dateordered, NULL, NULL, NULL, NULL, Cur_ProductTemplate.M_PRODUCT_ID, v_Warehouse, 'N', Cur_ProductTemplate.C_UOM_ID, Cur_ProductTemplate.QTY, 0, 0, 0, NULL, v_Currency, v_Pricelist, M_Get_Offers_Price(TO_DATE(NOW()), v_Bpartner, Cur_ProductTemplate.M_Product_ID, v_Pricestd, Cur_ProductTemplate.QTY, v_Mpricelist), v_Pricelimit, v_Linenetamount, v_Discount, 0, NULL, 0, v_tax, NULL, NULL, NULL, 'N', NULL, NULL, v_Pricestd ) ; -- update translation -- v_SeqNo:=v_SeqNo + 10; v_NoOfLines:=v_NoOfLines + 1; END LOOP; v_Message:='@Copied@=' || v_NoOfLines ; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; NDROP FUNCTION public.m_copy_product_template(pinstance_id character varying); publictadfalse23416,125536866)m_discountschema_reseq(character varying)FUNCTIONCREATE FUNCTION m_discountschema_reseq(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: M_DiscountSchema_ReSeq.sql,v 1.2 2002/10/21 04:49:46 jjanke Exp $ *** * Title: Resequence Discount entries * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- 0=failure v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_User_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- v_NextNo NUMERIC; v_Count NUMERIC:=0; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_AD_User_ID:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; -- Line v_ResultStr:='ResequenceLine'; DECLARE Cur_Line RECORD; BEGIN v_NextNo:=10; FOR Cur_Line IN (SELECT M_DiscountSchemaLine_ID FROM M_DiscountSchemaLine WHERE M_DiscountSchema_ID=v_Record_ID ORDER BY SeqNo FOR UPDATE --OBTG: OF SeqNo-- ) LOOP UPDATE M_DiscountSchemaLine SET SeqNo=v_NextNo WHERE M_DiscountSchemaLine.M_DiscountSchemaLine_ID=Cur_Line.M_DiscountSchemaLine_ID; v_NextNo:=v_NextNo + 10; v_Count:=v_Count + 1; END LOOP; END; -- Line v_Message:='@Updated@ ' || v_Count; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $_$ LANGUAGE plpgsql; ODROP FUNCTION public.m_discountschema_reseq(p_pinstance_id character varying); publictadfalse23416-125536867&m_freight_calculate(character varying)FUNCTIONN%CREATE FUNCTION m_freight_calculate(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Result NUMERIC:=1; -- Success v_Cheaper CHAR(1) ; v_Calc_Qty CHAR(1) ; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Record Info v_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_User_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Shipper_ID VARCHAR(32); --OBTG:VARCHAR2-- v_FreightCategory_ID VARCHAR(32); --OBTG:VARCHAR2-- v_From_ID VARCHAR(32); --OBTG:VARCHAR2-- v_To_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Date TIMESTAMP; v_Qty NUMERIC; v_IsSOTrx CHAR(1) ; v_Amt NUMERIC; v_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Freight_Currency_ID VARCHAR(32); --OBTG:VARCHAR2-- v_RoundLine CHAR(1) ; v_RoundTotal CHAR(1) ; v_FreightUnit VARCHAR(60) ; --OBTG:VARCHAR2-- BEGIN -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.AD_Org_ID, p.AD_Client_ID FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User_ID:=Cur_Parameter.AD_User_ID; v_Org_ID:=Cur_Parameter.AD_Org_ID; v_Client_ID:=Cur_Parameter.AD_Client_ID; IF(Cur_Parameter.ParameterName='cheaper') THEN v_Cheaper:=Cur_Parameter.P_String; RAISE NOTICE '%',' Cheaper=' || v_Cheaper ; ELSIF(Cur_Parameter.ParameterName='calc_qty') THEN v_Calc_Qty:=Cur_Parameter.P_String; RAISE NOTICE '%',' Calc_qty=' || v_Calc_Qty ; END IF; END LOOP; -- Get Parameter RAISE NOTICE '%',' v_Record_ID=' || v_Record_ID ; v_ResultStr:='Select variables'; SELECT M_Shipper_ID, M_FreightCategory_ID, MovementDate, nopackages, IsSOTrx, Freight_Currency_ID INTO v_Shipper_ID, v_FreightCategory_ID, v_Date, v_Qty, v_IsSOTrx, v_Freight_Currency_ID FROM M_InOut WHERE M_InOut_ID=v_Record_ID; v_ResultStr:='Set to and from region'; IF(v_IsSOTrx='Y') THEN SELECT COALESCE(dl.C_REGION_ID, l.C_REGION_ID), wl.C_REGION_ID INTO v_To_ID, v_From_ID FROM M_InOut i LEFT JOIN C_BPartner_Location dbl ON dbl.C_BPARTNER_LOCATION_ID=i.DELIVERY_LOCATION_ID LEFT JOIN C_location dl ON dbl.C_LOCATION_ID=dl.C_LOCATION_ID, C_BPartner_Location bl, C_location l, M_Warehouse w, C_Location wl WHERE i.C_BPARTNER_LOCATION_ID=bl.C_BPARTNER_LOCATION_ID AND bl.C_LOCATION_ID=l.C_LOCATION_ID AND i.M_WAREHOUSE_ID=w.M_WAREHOUSE_ID AND w.C_LOCATION_ID=wl.C_LOCATION_ID AND i.M_InOut_ID=v_Record_ID; ELSE SELECT COALESCE(dl.C_REGION_ID, l.C_REGION_ID), wl.C_REGION_ID INTO v_From_ID, v_To_ID FROM M_InOut i LEFT JOIN C_BPartner_Location dbl ON dbl.C_BPARTNER_LOCATION_ID=i.DELIVERY_LOCATION_ID LEFT JOIN C_location dl ON dbl.C_LOCATION_ID=dl.C_LOCATION_ID, C_BPartner_Location bl, C_location l, M_Warehouse w, C_Location wl WHERE i.C_BPARTNER_LOCATION_ID=bl.C_BPARTNER_LOCATION_ID AND bl.C_LOCATION_ID=l.C_LOCATION_ID AND i.M_WAREHOUSE_ID=w.M_WAREHOUSE_ID AND w.C_LOCATION_ID=wl.C_LOCATION_ID AND i.M_InOut_ID=v_Record_ID; END IF; SELECT TOTAL_ROUND, LINE_ROUND, FREIGHT_UNIT INTO v_RoundTotal, v_RoundLine, v_FreightUnit FROM M_FreightCategory WHERE M_FreightCategory_ID=v_FreightCategory_ID; v_ResultStr:='Calculate freight quantity'; IF(v_Calc_Qty='Y') THEN SELECT CASE v_RoundLine WHEN 'N' THEN CASE v_RoundTotal WHEN 'N' THEN sum(QTY) WHEN 'I' THEN trunc(sum(QTY)) WHEN 'U' THEN CEIL(sum(QTY)) WHEN 'R' THEN ROUND(sum(QTY), 0) END WHEN 'I' THEN CASE v_RoundTotal WHEN 'N' THEN sum(TRUNC(QTY, 0)) WHEN 'I' THEN trunc(sum(TRUNC(QTY))) WHEN 'U' THEN CEIL(sum(TRUNC(QTY))) WHEN 'R' THEN ROUND(sum(TRUNC(QTY)), 0) END WHEN 'U' THEN CASE v_RoundTotal WHEN 'N' THEN sum(CEIL(QTY)) WHEN 'I' THEN trunc(sum(CEIL(QTY))) WHEN 'U' THEN CEIL(sum(CEIL(QTY))) WHEN 'R' THEN ROUND(sum(CEIL(QTY)), 0) END WHEN 'R' THEN CASE v_RoundTotal WHEN 'N' THEN sum(ROUND(QTY, 0)) WHEN 'I' THEN trunc(sum(ROUND(QTY, 0))) WHEN 'U' THEN CEIL(sum(ROUND(QTY, 0))) WHEN 'R' THEN ROUND(sum(ROUND(QTY, 0)), 0) END END INTO v_Qty FROM (SELECT CASE v_FreightUnit WHEN 'U' THEN l.MOVEMENTQTY WHEN 'P' THEN l.MOVEMENTQTY/p.UNITSPERPALLET END AS QTY FROM M_InOutLine l, M_Product p WHERE l.M_Product_ID=p.M_Product_ID AND M_InOut_ID=v_Record_ID ) A; UPDATE M_InOut SET NoPackages=v_Qty WHERE M_InOut_ID=v_Record_ID; END IF; BEGIN IF(v_Cheaper='Y') THEN v_ResultStr:='Calculate cheaper amount'; DECLARE Cur_M_FreightSelect RECORD; BEGIN FOR Cur_M_FreightSelect IN (SELECT f.M_Shipper_ID, f.C_Currency_ID, CASE isprice WHEN 'Y' THEN freightamt*v_Qty ELSE freightamt END as amount FROM M_Freight f, (SELECT M_Shipper_ID, MAX(validFrom) AS validFrom FROM M_Freight WHERE M_FreightCategory_ID=v_FreightCategory_ID AND C_Region_ID=v_From_ID AND TO_Region_ID=v_To_ID AND QtyFrom<=v_Qty AND QtyTo>v_Qty AND ValidFromv_Qty ORDER BY amount ) LOOP v_Shipper_ID:=Cur_M_FreightSelect.M_Shipper_ID; v_Amt:=Cur_M_FreightSelect.amount; v_Currency_ID:=Cur_M_FreightSelect.C_Currency_ID; EXIT; END LOOP; END; ELSE v_ResultStr:='Calculate amount'; DECLARE Cur_M_FreightSelect RECORD; BEGIN FOR Cur_M_FreightSelect IN (SELECT M_Shipper_ID, C_Currency_ID, CASE isprice WHEN 'Y' THEN freightamt*v_Qty ELSE freightamt END as amount FROM M_Freight WHERE M_FreightCategory_ID=v_FreightCategory_ID AND C_Region_ID=v_From_ID AND TO_Region_ID=v_To_ID AND QtyFrom<=v_Qty AND QtyTo>v_Qty AND ValidFrom> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished - ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_User_ID, 'N', v_Result, v_Message) ; RETURN; EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; LDROP FUNCTION public.m_freight_calculate(p_pinstance_id character varying); publictadfalse23416.125536869+m_generate_average_costs(character varying)FUNCTIONB+CREATE FUNCTION m_generate_average_costs(p_pinstance_id character varying) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2009 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC; v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Date TIMESTAMP; v_Qty NUMERIC; v_Cost NUMERIC; v_User VARCHAR(32); --OBTG:VARCHAR2-- v_Price NUMERIC; v_DateOld TIMESTAMP; v_CumQty NUMERIC; v_Processed VARCHAR(60) ; --OBTG:VARCHAR2-- v_count NUMERIC; v_Deleted NUMERIC; v_ProductOld VARCHAR(32); --OBTG:VARCHAR2-- v_Client VARCHAR(32); --OBTG:VARCHAR2-- v_BaseCurrency VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_InOutLine RECORD; Cur_ProdCost RECORD; Cur_PriceList RECORD; Cur_ManualCost RECORD; v_rowcount NUMERIC; BEGIN v_Qty:=0; v_Cost:=0; v_Price:=0; v_CumQty:=0; v_ProductOld:='0'; -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, i.AD_User_ID, i.AD_Client_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User:=Cur_Parameter.AD_User_ID; v_Client:=Cur_Parameter.AD_Client_ID; END LOOP; -- Get Parameter SELECT AD_CLIENT.C_CURRENCY_ID INTO v_BaseCurrency FROM AD_CLIENT WHERE AD_CLIENT.AD_CLIENT_ID = v_Client; DELETE FROM M_COSTING WHERE ISPERMANENT='N' AND ISMANUAL='N' AND COSTTYPE='AV' AND ISPRODUCTION = 'N' AND AD_CLIENT_ID = v_Client; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Deleted:=v_Deleted + v_rowcount; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; RAISE NOTICE '%',' deleted=' || v_rowcount ; --RECALCULATE THE DATETO OF MANUAL COSTS FOR Cur_ManualCost IN (SELECT M_COSTING_ID, M_PRODUCT_ID, DATEFROM FROM M_COSTING WHERE AD_CLIENT_ID = v_Client ORDER BY M_PRODUCT_ID, DATEFROM DESC) LOOP IF (v_ProductOld <> Cur_ManualCost.M_PRODUCT_ID) THEN v_Date := TO_DATE('31-12-9999', 'DD-MM-YYYY'); END IF; UPDATE M_COSTING SET DATETO = v_date WHERE M_COSTING_ID = Cur_ManualCost.M_Costing_ID; v_Date := cur_manualcost.DATEFROM; v_ProductOld := cur_manualcost.M_PRODUCT_ID; END LOOP; v_ProductOld:='0'; v_DateOld:=TO_DATE('01-01-1900', 'DD-MM-YYYY') ; FOR Cur_InOutLine IN (SELECT M_INOUTLINE.M_INOUTLINE_ID, M_INOUTLINE.MOVEMENTQTY, M_PRODUCT.M_PRODUCT_ID, M_INOUT.MOVEMENTDATE, M_INOUTLINE.AD_CLIENT_ID, M_INOUTLINE.AD_ORG_ID, M_INOUT.C_BPARTNER_ID FROM M_INOUT, M_INOUTLINE, M_PRODUCT WHERE M_INOUT.M_INOUT_ID=M_INOUTLINE.M_INOUT_ID AND M_INOUTLINE.M_PRODUCT_ID=M_PRODUCT.M_PRODUCT_ID AND M_PRODUCT.COSTTYPE='AV' AND M_INOUT.ISSOTRX='N' AND M_INOUT.PROCESSED='Y' AND M_INOUTLINE.MOVEMENTQTY>0 AND M_INOUT.DOCSTATUS <> 'DR' AND M_INOUT.DOCSTATUS <> 'RE' AND M_INOUT.DOCSTATUS <> 'VO' AND M_INOUT.AD_CLIENT_ID = v_Client AND NOT EXISTS (SELECT 1 FROM M_COSTING WHERE M_INOUTLINE_ID=M_INOUTLINE.M_INOUTLINE_ID) ORDER BY M_PRODUCT.M_PRODUCT_ID, M_INOUT.MOVEMENTDATE, M_INOUTLINE.MOVEMENTQTY DESC ) LOOP v_ResultStr:='new albaran: '||Cur_InOutLine.M_INOUTLINE_ID; IF(Cur_InOutLine.M_PRODUCT_ID<>v_ProductOld) THEN v_Date:=NULL; v_CumQty:=0; ELSIF (Cur_InOutLine.MOVEMENTDATE<>v_DateOld) THEN v_CumQty:=0; END IF; SELECT COUNT(*) INTO v_Count FROM M_COSTING WHERE M_PRODUCT_ID=Cur_InOutLine.M_PRODUCT_ID AND AD_CLIENT_ID = v_Client; IF(v_Count>0) THEN FOR Cur_ProdCost IN (SELECT COST, DATETO, M_COSTING_ID FROM M_COSTING WHERE M_PRODUCT_ID=Cur_InOutLine.M_PRODUCT_ID AND DATEFROM <= Cur_InOutLine.MOVEMENTDATE AND AD_CLIENT_ID = v_Client ORDER BY DATETO DESC, M_COSTING_ID ) LOOP v_Cost:=Cur_ProdCost.COST; v_Date:=Cur_ProdCost.DATETO; UPDATE M_COSTING SET DATETO = Cur_InOutLine.MOVEMENTDATE WHERE M_COSTING_ID = Cur_ProdCost.M_COSTING_ID; EXIT; END LOOP; IF (v_Date IS NULL) THEN SELECT MIN(DATEFROM) INTO v_Date FROM M_COSTING WHERE M_PRODUCT_ID=Cur_InOutLine.M_PRODUCT_ID AND DATEFROM > Cur_InOutLine.MOVEMENTDATE AND AD_CLIENT_ID = v_Client; END IF; ELSE v_Cost:=NULL; END IF; IF(v_Cost IS NOT NULL) THEN SELECT COALESCE(SUM(MOVEMENTQTY), 0) INTO v_Qty FROM M_TRANSACTION WHERE M_PRODUCT_ID=Cur_InOutLine.M_PRODUCT_ID AND MOVEMENTDATE0; IF(v_Count=0) THEN v_ResultStr:='order albaran: '||Cur_InOutLine.M_INOUTLINE_ID; SELECT CASE WHEN SUM(C_ORDERLINE.QTYORDERED) <=0 THEN 0 ELSE SUM(C_ORDERLINE.QTYORDERED*C_CURRENCY_CONVERT(C_ORDERLINE.PRICEACTUAL, COALESCE(C_ORDERLINE.C_CURRENCY_ID, C_ORDER.C_CURRENCY_ID), v_BaseCurrency, TO_DATE(COALESCE(C_ORDERLINE.DATEORDERED, C_ORDER.DATEORDERED, Cur_InOutLine.MOVEMENTDATE)), NULL, C_ORDERLINE.AD_CLIENT_ID, C_ORDERLINE.AD_ORG_ID)) /SUM(C_ORDERLINE.QTYORDERED) END, CASE WHEN SUM(C_ORDERLINE.QTYORDERED) <=0 THEN 0 ELSE COUNT(C_ORDERLINE.C_ORDERLINE_ID) END INTO v_Price, v_Count FROM M_MATCHPO, C_ORDERLINE, C_ORDER WHERE M_MATCHPO.C_ORDERLINE_ID=C_ORDERLINE.C_ORDERLINE_ID AND M_MATCHPO.C_INVOICELINE_ID IS NULL AND M_MATCHPO.M_INOUTLINE_ID=Cur_InOutLine.M_INOUTLINE_ID AND C_ORDER.C_ORDER_ID = C_ORDERLINE.C_ORDER_ID AND C_ORDERLINE.QTYORDERED<>0; END IF; IF(v_Count=0) THEN FOR Cur_PriceList IN (SELECT C_CURRENCY_CONVERT(M_PRODUCTPRICE.PRICESTD, M_PRICELIST.C_CURRENCY_ID, v_BaseCurrency, TO_DATE(Cur_InOutLine.MOVEMENTDATE), NULL, M_PRODUCTPRICE.AD_CLIENT_ID, M_PRODUCTPRICE.AD_ORG_ID) AS PRICESTD FROM M_PRICELIST, M_PRICELIST_VERSION, M_PRODUCTPRICE WHERE M_PRICELIST_VERSION.M_PRICELIST_ID= (SELECT po_pricelist_id FROM C_BPARTNER WHERE c_bpartner_id=Cur_InOutLine.C_BPARTNER_ID ) AND M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID=M_PRODUCTPRICE.M_PRICELIST_VERSION_ID AND M_PRICELIST_VERSION.ISACTIVE='Y' AND M_PRODUCTPRICE.M_PRODUCT_ID=Cur_InOutLine.M_PRODUCT_ID AND M_PRICELIST.M_PRICELIST_ID = M_PRICELIST_VERSION.M_PRICELIST_ID AND M_PRICELIST_VERSION.VALIDFROM> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_User, 'N', 1, v_Message); RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN -- ROLLBACK; RAISE NOTICE '%',v_ResultStr; v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr); RETURN; END ; $$ LANGUAGE plpgsql; QDROP FUNCTION public.m_generate_average_costs(p_pinstance_id character varying); publictadfalse23416/125536871Tm_generate_standard_costs(character varying, timestamp without time zone, character)FUNCTIONlCREATE FUNCTION m_generate_standard_costs(p_pinstance_id character varying, p_date timestamp without time zone, p_products character) RETURNS void AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Result NUMERIC; v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- v_User VARCHAR(32); --OBTG:VARCHAR2-- v_Deleted NUMERIC; -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; Cur_PriceList record; v_rowcount NUMERIC; BEGIN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; BEGIN --BODY -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter in (SELECT i.Record_ID, i.AD_User_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; v_User:=Cur_Parameter.AD_User_ID; END LOOP; -- Get Parameter DELETE FROM M_COSTING WHERE ISPERMANENT='N' AND ISMANUAL='N' AND COSTTYPE='ST'; GET DIAGNOSTICS v_rowcount:=ROW_COUNT; v_Deleted:=v_Deleted + v_rowcount; RAISE NOTICE '%',' deleted=' || v_rowcount ; FOR Cur_PriceList in (SELECT COALESCE(M_PRODUCT.COSTSTD, 0) AS COSTSTD, M_PRODUCT.M_PRODUCT_ID, M_PRODUCT.AD_CLIENT_ID, M_PRODUCT.AD_ORG_ID FROM M_PRODUCT WHERE M_PRODUCT_ID IN (SELECT M_PRODUCT_ID FROM M_PRODUCT WHERE COSTTYPE='ST') AND M_PRODUCT_ID IN(p_Products) AND NOT EXISTS (SELECT 1 FROM M_COSTING WHERE COSTTYPE='ST' AND M_PRODUCT_ID=M_PRODUCT.M_PRODUCT_ID AND DATEFROM=p_Date AND PRICE=M_PRODUCT.COSTSTD AND COST=M_PRODUCT.COSTSTD ) ) LOOP UPDATE M_COSTING SET DATETO=p_Date WHERE DATETO=TO_DATE('31-12-9999', 'DD-MM-YYYY') AND M_PRODUCT_ID=Cur_PriceList.M_PRODUCT_ID AND COSTTYPE='ST'; INSERT INTO M_COSTING ( M_COSTING_ID, CREATED, CREATEDBY, UPDATED, UPDATEDBY, AD_CLIENT_ID, AD_ORG_ID, M_PRODUCT_ID, DATETO, DATEFROM, ISMANUAL, M_INOUTLINE_ID, C_INVOICELINE_ID, QTY, PRICE, CUMQTY, COST, COSTTYPE, ISPERMANENT ) VALUES ( Ad_Sequence_Nextno('M_Costing'), TO_DATE(NOW()), v_User, TO_DATE(NOW()), v_User, Cur_PriceList.AD_CLIENT_ID, Cur_PriceList.AD_ORG_ID, Cur_PriceList.M_PRODUCT_ID, TO_DATE('31-12-9999', 'DD-MM-YYYY'), p_Date, 'N', NULL, NULL, 0, Cur_PriceList.COSTSTD, 0, Cur_PriceList.COSTSTD, 'ST', 'N' ) ; END LOOP; ---- <> -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, v_User, 'N', 1, v_Message) ; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN -- ROLLBACK; v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; RETURN; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_generate_standard_costs(p_pinstance_id character varying, p_date timestamp without time zone, p_products character); publictadfalse234160125536873Nm_get_offer(timestamp without time zone, character varying, character varying)FUNCTIONCREATE FUNCTION m_get_offer(p_date timestamp without time zone, p_bpartner_id character varying, p_product_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* DEPRECATED! This function should not be used, now more than one offer can be applied */ v_Offer_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Offer RECORD; BEGIN FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE p_Date BETWEEN DATEFROM AND COALESCE(DATETO, TO_DATE('31-12-9999', 'DD-MM-YYYY')) AND((BPARTNER_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID )) OR(BPARTNER_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID ))) AND((BP_GROUP_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID )) OR(BP_GROUP_SELECTION = 'N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID ))) AND((PRODUCT_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID )) OR(PRODUCT_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID ))) AND((PROD_CAT_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID )) OR(PROD_CAT_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID ))) ORDER BY PRIORITY, M_OFFER_ID DESC ) LOOP v_Offer_ID := Cur_Offer.M_OFFER_ID; EXIT; END LOOP; RETURN v_Offer_ID; EXCEPTION WHEN OTHERS THEN RETURN NULL; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_offer(p_date timestamp without time zone, p_bpartner_id character varying, p_product_id character varying); publictadfalse234162125536874-m_get_offer_price(character varying, numeric)FUNCTION/CREATE FUNCTION m_get_offer_price(p_offer_id character varying, p_pricestd numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ /* DEPRECATED! This function should not be used. Use instead M_Get_Offers_Price. */ v_Price NUMERIC; v_Fixed NUMERIC; v_AddAmt NUMERIC; v_Discount NUMERIC; BEGIN v_Price := p_PriceStd; IF v_Price IS NULL THEN v_Price := 0; END IF; IF p_Offer_ID IS NOT NULL THEN SELECT FIXED, COALESCE(ADDAMT, 0), COALESCE(DISCOUNT, 0) INTO v_Fixed, v_AddAmt, v_Discount FROM M_OFFER WHERE M_OFFER_ID = p_Offer_ID AND ISACTIVE = 'Y'; IF v_Fixed IS NOT NULL THEN v_Price := v_Fixed; ELSE v_Price :=(p_PriceStd - v_AddAmt) *(1 - v_Discount/100) ; END IF; END IF; RETURN v_Price; EXCEPTION WHEN OTHERS THEN RETURN NULL; END ; $$ LANGUAGE plpgsql; ZDROP FUNCTION public.m_get_offer_price(p_offer_id character varying, p_pricestd numeric); publictadfalse2341631255368751m_get_offer_std_price(character varying, numeric)FUNCTIONCREATE FUNCTION m_get_offer_std_price(p_offer_id character varying, p_priceactual numeric) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Price NUMERIC; v_Fixed NUMERIC; v_AddAmt NUMERIC; v_Discount NUMERIC; BEGIN v_Price := p_PriceActual; IF v_Price IS NULL THEN v_Price := 0; END IF; IF p_Offer_ID IS NOT NULL THEN SELECT FIXED, COALESCE(ADDAMT, 0), COALESCE(DISCOUNT, 0) INTO v_Fixed, v_AddAmt, v_Discount FROM M_OFFER WHERE M_OFFER_ID = p_Offer_ID; IF v_Fixed IS NOT NULL THEN v_Price := v_Fixed; ELSE v_Price := v_AddAmt +(p_PriceActual/(1-v_Discount/100)) ; END IF; END IF; RETURN v_Price; EXCEPTION WHEN OTHERS THEN RETURN NULL; END ; $$ LANGUAGE plpgsql; aDROP FUNCTION public.m_get_offer_std_price(p_offer_id character varying, p_priceactual numeric); publictadfalse234164125536876:m_get_offers_applied(character varying, character varying)FUNCTIONUCREATE FUNCTION m_get_offers_applied(p_id character varying, p_type character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; CurOffers RECORD; v_offers VARCHAR(500); --OBTG:VARCHAR2-- BEGIN IF p_Type = 'I' THEN --invoice FOR CurOffers IN (SELECT o.addamt, o.discount, o.fixed, cursymbol FROM C_InvoiceLine_Offer io, M_Offer o, C_Currency c, C_Invoice i, C_InvoiceLine il WHERE o.M_Offer_ID = io.M_Offer_ID AND c.C_Currency_ID = i.C_Currency_ID AND i.C_Invoice_ID = il.C_Invoice_ID AND il.C_InvoiceLine_ID = io.C_InvoiceLine_ID AND il.C_InvoiceLine_ID = p_Id ORDER BY COALESCE(io.line,0)) LOOP IF CurOffers.Fixed IS NOT NULL THEN IF v_Offers IS NOT NULL THEN v_Offers := v_Offers || ' + '; END IF; v_Offers := v_Offers || 'F: ' || CurOffers.Fixed ||CurOffers.CurSymbol; ELSE IF COALESCE(CurOffers.AddAmt,0) <> 0 THEN IF v_Offers IS NOT NULL THEN v_Offers := v_Offers || ' + '; END IF; v_Offers := v_Offers || CurOffers.AddAmt || CurOffers.CurSymbol; END IF; IF COALESCE(CurOffers.Discount,0) <> 0 THEN IF v_Offers IS NOT NULL THEN v_Offers := v_Offers || ' + '; END IF; v_Offers := v_Offers || CurOffers.Discount || '%'; END IF; END IF; END LOOP; ELSE --order FOR CurOffers IN (SELECT o.addamt, o.discount, o.fixed, cursymbol FROM C_OrderLine_Offer io, M_Offer o, C_Currency c, C_Order i, C_OrderLine il WHERE o.M_Offer_ID = io.M_Offer_ID AND c.C_Currency_ID = i.C_Currency_ID AND i.C_Order_ID = il.C_Order_ID AND il.C_OrderLine_ID = io.C_OrderLine_ID AND il.C_OrderLine_ID = p_Id ORDER BY COALESCE(io.line,0)) LOOP IF CurOffers.Fixed IS NOT NULL THEN IF v_Offers IS NOT NULL THEN v_Offers := v_Offers || ' + '; END IF; v_Offers := v_Offers || 'F: ' || CurOffers.Fixed || CurOffers.CurSymbol; ELSE IF COALESCE(CurOffers.AddAmt,0) <> 0 THEN IF v_Offers IS NOT NULL THEN v_Offers := v_Offers || ' + '; END IF; v_Offers := v_Offers || CurOffers.AddAmt || CurOffers.CurSymbol; END IF; IF COALESCE(CurOffers.Discount,0) <> 0 THEN IF v_Offers IS NOT NULL THEN v_Offers := v_Offers || ' + '; END IF; v_Offers := v_Offers || CurOffers.Discount || '%'; END IF; END IF; END LOOP; END IF; RETURN v_Offers; END ; $$ LANGUAGE plpgsql; ]DROP FUNCTION public.m_get_offers_applied(p_id character varying, p_type character varying); publictadfalse234165125536877Tm_get_offers_name(timestamp without time zone, character varying, character varying)FUNCTIONCREATE FUNCTION m_get_offers_name(p_date timestamp without time zone, p_bpartner_id character varying, p_product_id character varying) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Offer_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Offer RECORD; v_Names VARCHAR(10000) := ''; --OBTG:varchar2-- BEGIN FOR Cur_Offer IN (SELECT NAME FROM M_OFFER WHERE p_Date BETWEEN DATEFROM AND COALESCE(DATETO, TO_DATE('31-12-9999', 'DD-MM-YYYY')) AND IsActive = 'Y' AND((BPARTNER_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID )) OR(BPARTNER_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID ))) AND((BP_GROUP_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID )) OR(BP_GROUP_SELECTION = 'N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID ))) AND((PRODUCT_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID )) OR(PRODUCT_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID ))) AND((PROD_CAT_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID )) OR(PROD_CAT_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID ))) ORDER BY PRIORITY, M_OFFER_ID DESC ) LOOP IF v_Names <> '' THEN v_Names := v_Names||'
 '; END IF; v_Names := v_Names||Cur_Offer.name; END LOOP; RETURN v_Names; EXCEPTION WHEN OTHERS THEN RETURN NULL; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_offers_name(p_date timestamp without time zone, p_bpartner_id character varying, p_product_id character varying); publictadfalse234166125536878zm_get_offers_price(timestamp without time zone, character varying, character varying, numeric, numeric, character varying)FUNCTIONCREATE FUNCTION m_get_offers_price(p_date timestamp without time zone, p_bpartner_id character varying, p_product_id character varying, p_pricestd numeric, p_qty numeric, p_pricelist character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Price NUMERIC; --TYPE RECORD IS REFCURSOR; Cur_Offer RECORD; BEGIN v_Price := p_PriceStd; FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE p_Date BETWEEN DATEFROM AND COALESCE(DATETO, TO_DATE('31-12-9999', 'DD-MM-YYYY')) AND IsActive = 'Y' AND (p_Qty >= COALESCE(Qty_From,0) OR Qty_From IS NULL) AND (p_Qty <= COALESCE(Qty_To,0) OR Qty_To IS NULL) AND ((PRICELIST_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = p_PriceList)) OR (PRICELIST_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = p_PriceList))) AND((BPARTNER_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID )) OR(BPARTNER_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID ))) AND((BP_GROUP_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID )) OR(BP_GROUP_SELECTION = 'N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID ))) AND((PRODUCT_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID )) OR(PRODUCT_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID ))) AND((PROD_CAT_SELECTION = 'Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID )) OR(PROD_CAT_SELECTION = 'N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID ))) ORDER BY PRIORITY, M_OFFER_ID ASC ) LOOP v_Price := M_Get_Offer_Price(Cur_Offer.M_Offer_ID, v_Price) ; END LOOP; RETURN v_Price; EXCEPTION WHEN OTHERS THEN RETURN p_PriceStd; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_offers_price(p_date timestamp without time zone, p_bpartner_id character varying, p_product_id character varying, p_pricestd numeric, p_qty numeric, p_pricelist character varying); publictadfalse234167125536879~m_get_offers_std_price(character varying, numeric, character varying, timestamp without time zone, numeric, character varying)FUNCTIONCREATE FUNCTION m_get_offers_std_price(p_bpartner_id character varying, p_priceactual numeric, p_product_id character varying, p_date timestamp without time zone, p_qty numeric, p_pricelist character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ --TYPE RECORD IS REFCURSOR; Cur_Offer RECORD; v_Price NUMERIC; BEGIN --Get the new "std" price from the Actual price (if actual price is the std price they will be equal) v_Price := p_PriceActual; FOR Cur_Offer IN (SELECT M_OFFER_ID FROM M_OFFER WHERE p_Date BETWEEN DATEFROM AND COALESCE(DATETO,TO_DATE('31-12-9999','DD-MM-YYYY')) AND IsActive = 'Y' AND (p_Qty >= COALESCE(Qty_From,0) OR Qty_From IS NULL) AND (p_Qty <= COALESCE(Qty_To,0) OR Qty_To IS NULL) AND ((PRICELIST_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = p_PriceList)) OR (PRICELIST_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_PRICELIST WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRICELIST_ID = p_PriceList))) AND ((BPARTNER_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID=M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID)) OR (BPARTNER_SELECTION='N' AND EXISTS(SELECT 1 FROM M_OFFER_BPARTNER WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND C_BPARTNER_ID = p_BPartner_ID))) AND ((BP_GROUP_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID)) OR (BP_GROUP_SELECTION='N' AND EXISTS (SELECT 1 FROM C_BPARTNER B, M_OFFER_BP_GROUP OB WHERE OB.M_OFFER_ID = M_OFFER.M_OFFER_ID AND B.C_BPARTNER_ID = p_BPartner_ID AND OB.C_BP_GROUP_ID = B.C_BP_GROUP_ID))) AND ((PRODUCT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID)) OR (PRODUCT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_OFFER_PRODUCT WHERE M_OFFER_ID = M_OFFER.M_OFFER_ID AND M_PRODUCT_ID = p_Product_ID))) AND ((PROD_CAT_SELECTION='Y' AND NOT EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID)) OR (PROD_CAT_SELECTION='N' AND EXISTS (SELECT 1 FROM M_PRODUCT P, M_OFFER_PROD_CAT OP WHERE OP.M_OFFER_ID = M_OFFER.M_OFFER_ID AND P.M_PRODUCT_ID = p_Product_ID AND OP.M_PRODUCT_CATEGORY_ID = P.M_PRODUCT_CATEGORY_ID))) ORDER BY PRIORITY DESC, M_OFFER_ID) LOOP v_Price := M_Get_Offer_Std_Price(Cur_Offer.M_Offer_ID, v_Price); END LOOP; RETURN v_Price; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_offers_std_price(p_bpartner_id character varying, p_priceactual numeric, p_product_id character varying, p_date timestamp without time zone, p_qty numeric, p_pricelist character varying); publictadfalse234168125536880Rm_get_pareto_abc(character varying, character varying, character varying, numeric)FUNCTIONXCREATE FUNCTION m_get_pareto_abc(p_warehouse_id character varying, p_org_id character varying, p_client_id character varying, p_percentageactual numeric) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_orgList VARCHAR(4000) ; --OBTG:VARCHAR2-- VARaCUM NUMERIC:=0; VARaCUMB NUMERIC:=0; v_limitA NUMERIC:=80; v_limitB NUMERIC:=15; varComprobadoA NUMERIC:=0; varComprobadoB NUMERIC:=0; --TYPE RECORD IS REFCURSOR; Cur_Cursor RECORD; BEGIN varAcum :=0; varComprobadoA := 0; for Cur_Cursor in ( SELECT 100*SUM(msd.qtyonhand*M_GET_PRODUCT_COST(MSD.M_PRODUCT_ID,TO_DATE(TO_DATE(NOW())),'AV'))/ (select SUM(msd1.qtyonhand*M_GET_PRODUCT_COST(MSD1.M_PRODUCT_ID,TO_DATE(TO_DATE(NOW())),'AV')) from M_WAREHOUSE MW1 LEFT JOIN M_LOCATOR ML1 ON ML1.M_WAREHOUSE_ID=MW1.M_WAREHOUSE_ID LEFT JOIN M_STORAGE_DETAIL MSD1 ON ML1.M_LOCATOR_ID=MSD1.M_LOCATOR_ID WHERE (p_warehouse_ID IS NULL OR MW1.M_WAREHOUSE_ID=p_warehouse_ID) AND (p_org_ID IS NULL OR MW1.AD_ORG_ID=p_org_ID) AND (p_client_id IS NULL OR MW1.AD_CLIENT_ID=p_client_id) AND MSD1.QTYONHAND>0) as PERCENTAGE FROM M_WAREHOUSE MW LEFT JOIN M_LOCATOR ML ON ML.M_WAREHOUSE_ID=MW.M_WAREHOUSE_ID LEFT JOIN M_STORAGE_DETAIL MSD ON ML.M_LOCATOR_ID=MSD.M_LOCATOR_ID WHERE (p_warehouse_ID IS NULL OR MW.M_WAREHOUSE_ID=p_warehouse_ID) AND (p_org_ID IS NULL OR MW.AD_ORG_ID=p_org_ID) AND (p_client_id IS NULL OR MW.AD_CLIENT_ID=p_client_id) AND MSD.QTYONHAND>0 AND M_GET_PRODUCT_COST(MSD.M_PRODUCT_ID,TO_DATE(TO_DATE(NOW())),null) IS NOT NULL AND M_GET_PRODUCT_COST(MSD.M_PRODUCT_ID,TO_DATE(TO_DATE(NOW())),null) <> 0 GROUP BY MSD.M_PRODUCT_ID ORDER BY PERCENTAGE DESC) loop varAcum := varAcum+Cur_Cursor.percentage; if(varComprobadoA=0)then if (varAcum>=v_limitA) then if (p_percentageactual>=Cur_Cursor.percentage) then return 'A'; else varComprobadoA:=-1; varAcumB:=-1*Cur_Cursor.percentage; end if; end if; end if; if (varComprobadoA=-1 and varComprobadoB=0) then varAcumB:=varAcumB+Cur_Cursor.percentage; if (varAcumB>=v_limitB) then if (p_percentageactual>=Cur_Cursor.percentage) then return 'B'; else varComprobadoB:=-1; end if; end if; end if; end loop; return 'C'; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_pareto_abc(p_warehouse_id character varying, p_org_id character varying, p_client_id character varying, p_percentageactual numeric); publictadfalse234169125536881Gm_get_pricelist_version(character varying, timestamp without time zone)FUNCTIONCREATE FUNCTION m_get_pricelist_version(p_pricelist_id character varying, p_date timestamp without time zone) RETURNS character varying AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_M_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Pricelist_Version RECORD; BEGIN FOR Cur_Pricelist_Version IN (SELECT PLV.M_PRICELIST_VERSION_ID AS PRICELISTVERSION FROM M_PRICELIST PL, M_PRICELIST_VERSION PLV WHERE PL.M_PRICELIST_ID = PLV.M_PRICELIST_ID AND PLV.ISACTIVE = 'Y' AND PL.M_PRICELIST_ID = p_Pricelist_Id AND PLV.VALIDFROM <= p_Date ORDER BY PLV.VALIDFROM DESC ) LOOP v_M_PriceList_Version_ID := Cur_Pricelist_Version.PRICELISTVERSION; EXIT; END LOOP; RETURN v_M_PriceList_Version_ID; END ; $$ LANGUAGE plpgsql; tDROP FUNCTION public.m_get_pricelist_version(p_pricelist_id character varying, p_date timestamp without time zone); publictadfalse23416:125536882Mm_get_product_cost(character varying, timestamp without time zone, character)FUNCTION CREATE FUNCTION m_get_product_cost(p_product_id character varying, p_movementdate timestamp without time zone, p_costtype character) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Cost NUMERIC; v_Count NUMERIC; v_CostType VARCHAR(60) ; --OBTG:VARCHAR2-- --TYPE RECORD IS REFCURSOR; Cur_Cost RECORD; BEGIN v_CostType := p_CostType; IF(p_Product_ID IS NULL) THEN RETURN 0; END IF; IF(p_MovementDate IS NULL) THEN RETURN 0; END IF; /*IF (v_CostType IS NULL) THEN SELECT COSTTYPE INTO v_CostType FROM M_PRODUCT WHERE M_PRODUCT_ID=p_Product_ID; END IF;*/ SELECT COUNT(*) INTO v_Count FROM M_COSTING WHERE p_MovementDate BETWEEN DATEFROM AND DATETO AND M_PRODUCT_ID = p_Product_ID AND(v_CostType IS NULL OR v_CostType = COSTTYPE) ; IF(v_Count = 0) THEN RETURN 0; ELSE FOR Cur_Cost IN (SELECT COST FROM M_COSTING WHERE DATEFROM <= p_MovementDate AND DATETO >= p_MovementDate AND M_PRODUCT_ID = p_Product_ID AND(v_CostType IS NULL OR v_CostType = COSTTYPE) ORDER BY DATEFROM, DATETO DESC ) LOOP v_Cost := Cur_Cost.COST; EXIT; END LOOP; RETURN v_Cost; END IF; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_product_cost(p_product_id character varying, p_movementdate timestamp without time zone, p_costtype character); publictadfalse23416;1255368839m_get_product_price(character varying, character varying)FUNCTION CREATE FUNCTION m_get_product_price(p_ad_client_id character varying, p_m_product_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_M_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Price NUMERIC; v_BaseCurrency VARCHAR(32); --OBTG:VARCHAR2-- BEGIN SELECT AD_CLIENT.C_CURRENCY_ID INTO v_BaseCurrency FROM AD_CLIENT WHERE AD_CLIENT.AD_CLIENT_ID = p_AD_Client_ID; SELECT M_PRICELIST_VERSION_ID INTO v_M_PriceList_Version_ID FROM M_PRICELIST_VERSION WHERE M_PRICELIST_ID IN (SELECT M_PRICELIST_ID FROM M_PRICELIST WHERE ISDEFAULT = 'Y' AND AD_CLIENT_ID = p_AD_Client_ID AND ISACTIVE = 'Y' ) AND VALIDFROM = (SELECT max(VALIDFROM) FROM M_PRICELIST_VERSION WHERE M_PRICELIST_ID IN (SELECT M_PRICELIST_ID FROM M_PRICELIST WHERE ISDEFAULT = 'Y' AND AD_CLIENT_ID = p_AD_Client_ID AND ISACTIVE = 'Y' ) AND VALIDFROM <= TO_DATE(TO_DATE(NOW())) ) ; IF(v_M_PriceList_Version_ID IS NULL) THEN RETURN 0; ELSE SELECT C_CURRENCY_CONVERT(COALESCE(M_PRODUCTPRICE.PRICESTD, 0), M_PRICELIST.C_CURRENCY_ID, v_BaseCurrency, TO_DATE(TO_DATE(NOW())), NULL, M_PRODUCTPRICE.AD_CLIENT_ID, M_PRODUCTPRICE.AD_ORG_ID) INTO v_Price FROM M_PRODUCTPRICE, M_PRICELIST_VERSION, M_PRICELIST WHERE M_PRODUCTPRICE.M_PRICELIST_VERSION_ID = v_M_PriceList_Version_ID AND M_PRODUCTPRICE.AD_CLIENT_ID = p_AD_Client_ID AND M_PRODUCTPRICE.M_PRODUCT_ID = p_M_Product_ID AND M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID = M_PRODUCTPRICE.M_PRICELIST_VERSION_ID AND M_PRICELIST.M_PRICELIST_ID = M_PRICELIST_VERSION.M_PRICELIST_ID; END IF; IF v_Price IS NULL THEN v_Price := 0; END IF; RETURN v_Price; END ; $$ LANGUAGE plpgsql; nDROP FUNCTION public.m_get_product_price(p_ad_client_id character varying, p_m_product_id character varying); publictadfalse23416<125536884[m_get_product_price_date(character varying, character varying, timestamp without time zone)FUNCTION CREATE FUNCTION m_get_product_price_date(p_ad_client_id character varying, p_m_product_id character varying, p_date timestamp without time zone) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2007-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_M_PriceList_Version_ID VARCHAR(32); --OBTG:VARCHAR2-- v_Price NUMERIC; v_BaseCurrency VARCHAR(32); --OBTG:VARCHAR2-- BEGIN SELECT AD_CLIENT.C_CURRENCY_ID INTO v_BaseCurrency FROM AD_CLIENT WHERE AD_CLIENT.AD_CLIENT_ID = p_AD_Client_ID; SELECT MAX(M_PRICELIST_VERSION_ID) INTO v_M_PriceList_Version_ID FROM M_PRICELIST_VERSION WHERE M_PRICELIST_ID IN (SELECT M_PRICELIST_ID FROM M_PRICELIST WHERE ISDEFAULT = 'Y' AND AD_CLIENT_ID = p_AD_Client_ID AND ISACTIVE = 'Y' ) AND VALIDFROM = (SELECT max(VALIDFROM) FROM M_PRICELIST_VERSION WHERE M_PRICELIST_ID IN (SELECT M_PRICELIST_ID FROM M_PRICELIST WHERE ISDEFAULT = 'Y' AND AD_CLIENT_ID = p_AD_Client_ID AND ISACTIVE = 'Y' ) AND TO_DATE(VALIDFROM) <= TO_DATE(COALESCE(p_Date, TO_DATE(NOW()))) AND EXISTS(SELECT 1 FROM M_PRODUCTPRICE WHERE M_PRICELIST_VERSION_ID = M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID AND M_PRODUCT_ID = p_M_Product_ID) ) AND EXISTS(SELECT 1 FROM M_PRODUCTPRICE WHERE M_PRICELIST_VERSION_ID = M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID AND M_PRODUCT_ID = p_M_Product_ID) ; IF(v_M_PriceList_Version_ID IS NULL) THEN RETURN 0; ELSE SELECT C_CURRENCY_CONVERT(COALESCE(M_PRODUCTPRICE.PRICESTD, 0), M_PRICELIST.C_CURRENCY_ID, v_BaseCurrency, TO_DATE(COALESCE(p_Date, TO_DATE(NOW()))), NULL, M_PRODUCTPRICE.AD_CLIENT_ID, M_PRODUCTPRICE.AD_ORG_ID) INTO v_Price FROM M_PRODUCTPRICE, M_PRICELIST_VERSION, M_PRICELIST WHERE M_PRODUCTPRICE.M_PRICELIST_VERSION_ID = v_M_PriceList_Version_ID AND M_PRODUCTPRICE.AD_CLIENT_ID = p_AD_Client_ID AND M_PRODUCTPRICE.M_PRODUCT_ID = p_M_Product_ID AND M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID = M_PRODUCTPRICE.M_PRICELIST_VERSION_ID AND M_PRICELIST.M_PRICELIST_ID = M_PRICELIST_VERSION.M_PRICELIST_ID; END IF; IF v_Price IS NULL THEN v_Price := 0; END IF; RETURN v_Price; END ; $$ LANGUAGE plpgsql; DROP FUNCTION public.m_get_product_price_date(p_ad_client_id character varying, p_m_product_id character varying, p_date timestamp without time zone); publictadfalse23416=125536885'm_get_purchase_price(character varying)FUNCTIONCREATE FUNCTION m_get_purchase_price(p_product_id character varying) RETURNS numeric AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2008 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_Price NUMERIC; --TYPE RECORD IS REFCURSOR; Cur_Orderline RECORD; Cur_Invoiceline RECORD; Cur_Pricelist_Version RECORD; v_BaseCurrency VARCHAR(32); --OBTG:VARCHAR2-- BEGIN SELECT AD_CLIENT.C_CURRENCY_ID INTO v_BaseCurrency FROM M_PRODUCT, AD_CLIENT WHERE M_PRODUCT.M_PRODUCT_ID = p_Product_ID AND M_PRODUCT.AD_CLIENT_ID = AD_CLIENT.AD_CLIENT_ID; FOR Cur_Invoiceline IN (SELECT COALESCE(C_CURRENCY_CONVERT(C_INVOICELINE.PRICEACTUAL, C_INVOICE.C_CURRENCY_ID, v_BaseCurrency, TO_DATE(COALESCE(C_INVOICE.DATEINVOICED, TO_DATE(NOW()))), NULL, C_INVOICELINE.AD_CLIENT_ID, C_INVOICELINE.AD_ORG_ID), 0) AS Price FROM C_INVOICELINE, C_INVOICE WHERE C_INVOICELINE.C_INVOICE_ID = C_INVOICE.C_INVOICE_ID AND C_INVOICE.ISSOTRX = 'N' AND C_INVOICE.DOCSTATUS = 'CO' AND C_INVOICE.PROCESSED = 'Y' AND C_INVOICELINE.M_PRODUCT_ID = p_Product_ID ORDER BY C_INVOICE.DATEINVOICED DESC ) LOOP v_Price := Cur_Invoiceline.PRICE; EXIT; END LOOP; IF(v_Price IS NULL) THEN FOR Cur_Orderline IN (SELECT COALESCE(C_CURRENCY_CONVERT(C_ORDERLINE.PRICEACTUAL, COALESCE(C_ORDERLINE.C_CURRENCY_ID, C_ORDER.C_CURRENCY_ID), v_BaseCurrency, TO_DATE(COALESCE(C_ORDERLINE.DATEORDERED, C_ORDER.DATEORDERED, TO_DATE(NOW()))), NULL, C_ORDERLINE.AD_CLIENT_ID, C_ORDERLINE.AD_ORG_ID), 0) AS Price FROM C_ORDERLINE, C_ORDER WHERE C_ORDERLINE.C_ORDER_ID = C_ORDER.C_ORDER_ID AND C_ORDER.ISSOTRX = 'N' AND C_ORDER.DOCSTATUS = 'CO' AND C_ORDER.PROCESSED = 'Y' AND C_ORDERLINE.M_PRODUCT_ID = p_Product_ID ORDER BY C_ORDER.DATEORDERED DESC ) LOOP v_Price := Cur_Orderline.PRICE; EXIT; END LOOP; END IF; IF(v_Price IS NULL) THEN FOR Cur_Pricelist_Version IN (SELECT COALESCE(C_CURRENCY_CONVERT(M_PRODUCTPRICE.PRICESTD, M_PRICELIST.C_CURRENCY_ID, v_BaseCurrency, TO_DATE(TO_DATE(NOW())), NULL, M_PRODUCTPRICE.AD_CLIENT_ID, M_PRODUCTPRICE.AD_ORG_ID), 0) AS Price FROM M_PRODUCTPRICE, M_PRICELIST_VERSION, M_PRICELIST WHERE M_PRODUCTPRICE.M_PRICELIST_VERSION_ID = M_PRICELIST_VERSION.M_PRICELIST_VERSION_ID AND M_PRICELIST_VERSION.M_PRICELIST_ID = M_PRICELIST.M_PRICELIST_ID AND M_PRICELIST.ISSOPRICELIST = 'N' -- AND M_PRICELIST_VERSION.ISACTIVE= 'Y' AND M_PRICELIST_VERSION.VALIDFROM < TO_DATE(TO_DATE(NOW())) AND M_PRODUCTPRICE.M_PRODUCT_ID = p_Product_ID ORDER BY M_PRICELIST_VERSION.VALIDFROM DESC ) LOOP v_Price := Cur_Pricelist_Version.PRICE; EXIT; END LOOP; END IF; IF(v_Price IS NULL) THEN SELECT COALESCE(MAX(C_CURRENCY_CONVERT(M_PRODUCT_PO.PRICEPO, M_PRODUCT_PO.C_CURRENCY_ID, v_BaseCurrency, TO_DATE(TO_DATE(NOW())), NULL, M_PRODUCT_PO.AD_CLIENT_ID, M_PRODUCT_PO.AD_ORG_ID)), 0) INTO v_Price FROM M_PRODUCT_PO WHERE M_PRODUCT_PO.M_PRODUCT_ID = p_Product_ID AND M_PRODUCT_PO.ISCURRENTVENDOR = 'Y'; END IF; IF(v_Price IS NULL) THEN v_Price := 0; END IF; RETURN v_Price; END ; $$ LANGUAGE plpgsql; KDROP FUNCTION public.m_get_purchase_price(p_product_id character varying); publictadfalse23416>1255368864m_inout_cancel(character varying, character varying)FUNCTIONUCREATE FUNCTION m_inout_cancel(p_pinstance_id character varying, p_order_id character varying) RETURNS void AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2008 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: M_InOut_Cancel.sql,v 1.2 2002/08/13 05:27:36 jjanke Exp $ *** * Title: Cancel Delivery of Order by reversing it * Description: ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_Record_ID VARCHAR(32); --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Parameter Variables -- Cur_InOut RECORD; v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- BEGIN -- Update AD_PInstance IF(p_PInstance_ID IS NOT NULL) THEN RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date FROM AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID ORDER BY p.SeqNo ) LOOP v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' Record_ID=' || v_Record_ID ; ELSE v_Record_ID:=p_Order_ID; END IF; BEGIN --BODY -- For all Deliveries of Order FOR Cur_InOut IN (SELECT * FROM M_InOut WHERE C_Order_ID=v_Record_ID AND DocStatus<>'RE' -- Not the existing reversal trx FOR UPDATE ) LOOP RAISE NOTICE '%','Cancel Shipment ' || Cur_InOut.DocumentNo || ', ID=' || Cur_InOut.M_InOut_ID ; -- Cancel Order UPDATE M_InOut SET DocAction='RC', -- Reverse Correction Processed='N', Updated=TO_DATE(NOW()) WHERE M_InOut_ID=Cur_InOut.M_InOut_ID; PERFORM M_INOUT_POST(NULL, Cur_InOut.M_InOut_ID) ; END LOOP; ---- <> IF(p_PInstance_ID IS NOT NULL) THEN -- Update AD_PInstance RAISE NOTICE '%','Updating PInstance - Finished ' || v_Message ; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 1, v_Message) ; END IF; RETURN; END; --BODY EXCEPTION WHEN OTHERS THEN v_ResultStr:= '@ERROR=' || SQLERRM; RAISE NOTICE '%',v_ResultStr ; IF(p_PInstance_ID IS NOT NULL) THEN -- ROLLBACK; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ; ELSE RAISE EXCEPTION '%', SQLERRM; END IF; RETURN; END ; $_$ LANGUAGE plpgsql; eDROP FUNCTION public.m_inout_cancel(p_pinstance_id character varying, p_order_id character varying); publictadfalse23416?125536888!m_inout_cancel(character varying)FUNCTIONCREATE FUNCTION m_inout_cancel(p_pinstance_id character varying) RETURNS void AS $_$ DECLARE BEGIN PERFORM M_INOUT_CANCEL($1, NULL); END ; $_$ LANGUAGE plpgsql; GDROP FUNCTION public.m_inout_cancel(p_pinstance_id character varying); publictadfalse23416s125595566m_inout_chk_restrictions_trg()FUNCTION,CREATE FUNCTION m_inout_chk_restrictions_trg() RETURNS trigger AS $$ DECLARE /************************************************************************* * The contents of this file are subject to the Openbravo Public License * Version 1.0 (the "License"), being the Mozilla Public License * Version 1.1 with a permitted attribution clause; you may not use this * file except in compliance with the License. You may obtain a copy of * the License at http://www.openbravo.com/legal/license.html * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SL * All portions are Copyright (C) 2001-2006 Openbravo SL * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ v_DateNull TIMESTAMP := TO_DATE('01-01-1900', 'DD-MM-YYYY'); BEGIN IF AD_isTriggerEnabled()='N' THEN IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END IF; IF TG_OP = 'UPDATE' THEN IF(old.Processed='Y' AND ((COALESCE(old.C_BPartner_ID, '0') <> COALESCE(new.C_BPartner_ID, '0')) OR(COALESCE(old.DOCUMENTNO, '.') <> COALESCE(new.DOCUMENTNO, '.')) OR(COALESCE(old.C_DOCTYPE_ID, '0') <> COALESCE(new.C_DOCTYPE_ID, '0')) OR(COALESCE(old.AD_USER_ID, '0') <> COALESCE(new.AD_USER_ID, '0')) OR(COALESCE(old.C_ORDER_ID, '0') <> COALESCE(new.C_ORDER_ID, '0')) OR(COALESCE(old.DATEORDERED, v_DateNull) <> COALESCE(new.DATEORDERED, v_DateNull)) OR(COALESCE(old.MOVEMENTDATE, v_DateNull) <> COALESCE(new.MOVEMENTDATE, v_DateNull)) OR(COALESCE(OLD.C_BPARTNER_LOCATION_ID, '0') <> COALESCE(NEW.C_BPARTNER_LOCATION_ID, '0')) OR(COALESCE(old.PICKDATE, v_DateNull) <> COALESCE(new.PICKDATE, v_DateNull)) OR(COALESCE(old.SHIPDATE, v_DateNull) <> COALESCE(new.SHIPDATE, v_DateNull)) OR(COALESCE(old.C_CHARGE_ID, '0') <> COALESCE(new.C_CHARGE_ID, '0')) OR(COALESCE(old.CHARGEAMT, 0) <> COALESCE(new.CHARGEAMT, 0)) OR(COALESCE(old.AD_ORGTRX_ID, '0') <> COALESCE(new.AD_ORGTRX_ID, '0')) OR(COALESCE(old.USER1_ID, '0') <> COALESCE(new.USER1_ID, '0')) OR(COALESCE(old.M_SHIPPER_ID, '0') <> COALESCE(new.M_SHIPPER_ID, '0')) OR(COALESCE(old.SALESREP_ID, '0') <> COALESCE(new.SALESREP_ID, '0')) OR(COALESCE(old.M_WAREHOUSE_ID, '0') <> COALESCE(new.M_WAREHOUSE_ID, '0')) OR(COALESCE(old.USER2_ID, '0') <> COALESCE(new.USER2_ID, '0')) OR(COALESCE(old.DELIVERYRULE, '.') <> COALESCE(new.DELIVERYRULE, '.')) OR(COALESCE(old.DELIVERYVIARULE, '.') <> COALESCE(new.DELIVERYVIARULE, '.')) OR(COALESCE(old.PRIORITYRULE, '.') <> COALESCE(new.PRIORITYRULE, '.')) OR(COALESCE(old.AD_ORG_ID, '0') <> COALESCE(new.AD_ORG_ID, '0')) OR(COALESCE(old.AD_CLIENT_ID, '0') <> COALESCE(new.AD_CLIENT_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; IF(old.Posted='Y' AND ((COALESCE(old.DATEACCT, v_DateNull) <> COALESCE(new.DATEACCT, v_DateNull)) OR (COALESCE(old.MOVEMENTDATE, v_DateNull) <> COALESCE(new.MOVEMENTDATE, v_DateNull)) OR(COALESCE(old.C_CAMPAIGN_ID, '0') <> COALESCE(new.C_CAMPAIGN_ID, '0')) OR(COALESCE(old.C_PROJECT_ID, '0') <> COALESCE(new.C_PROJECT_ID, '0')) OR(COALESCE(old.C_ACTIVITY_ID, '0') <> COALESCE(new.C_ACTIVITY_ID, '0')))) THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'DELETE') THEN IF(old.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF(TG_OP = 'INSERT') THEN IF(NEW.Processed='Y') THEN RAISE EXCEPTION '%', 'Document processed/posted' ; --OBTG:-20501-- END IF; END IF; IF TG_OP = 'DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF; END ; $$ LANGUAGE plpgsql; 5DROP FUNCTION public.m_inout_chk_restrictions_trg(); publictadfalse23416B125536890em_inout_create(character varying, character varying, character varying, character, character varying)FUNCTIONCREATE FUNCTION m_inout_create(p_pinstance_id character varying, OUT p_inout_id character varying, p_order_id character varying, p_invoice_id character varying, p_forcedelivery character, p_locator_id character varying) RETURNS character varying AS $_$ DECLARE /************************************************************************* * The contents of this file are subject to the Compiere Public * License 1.1 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License in * the legal folder of your Openbravo installation. * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing rights * and limitations under the License. * The Original Code is Compiere ERP & Business Solution * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc. * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SL * Contributions are Copyright (C) 2001-2010 Openbravo, S.L. * * Specifically, this derivative work is based upon the following Compiere * file and version. ************************************************************************* * $Id: M_InOut_Create.sql,v 1.17 2003/09/05 04:58:06 jjanke Exp $ *** * Title: Create Shipment from Order * Description: * Order Loop goes though all open orders, where we would need to ship something * if forced or if there is a line to ship * create InOut document header * for all qualifying order lines * check every locator availability and if qty available * create InOut line * * Order and reservation is updated when posting * as there should not be a delay between creating + posting it * * For each Warehouse create lines (with exception if Direct Ship's), * create also lines for non-stocked, ad_hoc products or comments ************************************************************************/ -- Logistice v_ResultStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_result NUMERIC(1):=1; v_logMessageLength NUMERIC:= 2000; v_logLines NUMERIC:=0; v_isWholeLog BOOLEAN := true; v_Message VARCHAR(2000):=''; --OBTG:VARCHAR2-- result_String VARCHAR(2000):=''; --OBTG:VARCHAR2-- v_ResultLinesStr VARCHAR(2000):=''; --OBTG:VARCHAR2-- -- Parameter --TYPE RECORD IS REFCURSOR; Cur_Parameter RECORD; -- Record Info v_AD_Org_ID VARCHAR(32); --OBTG:VARCHAR2-- v_AD_Client_ID VARCHAR(32); --OBTG:VARCHAR2-- v_allownegativestock CHAR(1); v_order_count NUMERIC:=0; v_order_delivered_count NUMERIC:=0; v_order_partial_count NUMERIC:= 0; v_Record_ID VARCHAR(32):=NULL; --OBTG:VARCHAR2-- v_Selection VARCHAR(1):='N'; --OBTG:VARCHAR2-- v_hasPartial BOOLEAN := false; -- Orders to process - one per warehouse Cur_Order RECORD; -- Order Lines per Warehouse DECLARE Cur_OrderLine CURSOR (Order_ID VARCHAR, Warehouse_ID VARCHAR) FOR SELECT l.*, p.name FROM C_ORDERLINE l LEFT JOIN M_Product p ON l.M_Product_ID = p.M_Product_ID WHERE C_Order_ID=Order_ID -- Parameter AND l.M_Warehouse_ID=Warehouse_ID -- Parameter -- Incomplete lines and comments AND(QtyOrdered<>QtyDelivered OR(QtyOrdered=0 AND l.M_Product_ID IS NULL)) -- Don't include Direct Ship's AND DirectShip='N' ORDER BY l.line, l.M_Product_ID, l.M_Warehouse_id, l.c_uom_id, l.m_attributesetinstance_id, l.m_product_uom_id, qtyordered-qtydelivered; ol RECORD; --OBTG:Cur_OrderLine-- DECLARE Cur_Storage CURSOR (p_Product varchar, p_Warehouse varchar, p_UOM varchar, p_Product_UOM varchar, p_Attribute varchar) FOR SELECT T.C_UOM_ID, T.M_LOCATOR_ID, T.M_ATTRIBUTESETINSTANCE_ID, T.M_PRODUCT_UOM_ID, COALESCE(T.QtyOnHand, 0) AS QtyOnHand, T.QtyOrderOnHand AS QtyOrder FROM M_STORAGE_DETAIL T, M_LOCATOR L WHERE T.M_PRODUCT_ID=p_Product AND T.M_LOCATOR_ID=L.M_LOCATOR_ID AND L.M_WAREHOUSE_ID=p_Warehouse AND T.C_UOM_ID=p_UOM AND COALESCE(T.M_PRODUCT_UOM_ID, '0')=COALESCE(p_Product_UOM, '0') AND COALESCE(T.M_ATTRIBUTESETINSTANCE_ID, '0')=COALESCE(p_Attribute, COALESCE(T.M_ATTRIBUTESETINSTANCE_ID, '0')) AND COALESCE(T.QtyOnHand, 0)>0 ORDER BY L.PRIORITYNO, T.M_ATTRIBUTESETINSTANCE_ID; v_storage RECORD; --OBTG:Cur_Storage-- -- v_NextNo VARCHAR(32); --OBTG:varchar2-- v_DocType_ID VARCHAR(32); --OBTG:VARCHAR2-- v_DocumentNo VARCHAR(40) ; --OBTG:VARCHAR2-- v_Qty NUMERIC; --MODIFIED BY F.IRIAZABAL v_QtyOrder NUMERIC; v_ProductUOM VARCHAR(32); --OBTG:VARCHAR2-- v_ActualQty NUMERIC; v_QtyAux NUMERIC; -- v_lines NUMERIC:=0; v_lines_per_orderline NUMERIC:=0; v_count NUMERIC:=0; CREATE_FROM_INVOICE BOOLEAN:=false; Next_Line BOOLEAN:=false; Next_Order BOOLEAN:=false; NEXT_PRODUCT BOOLEAN:=false; FINISH_PROCESS BOOLEAN:=false; Cur_Storage_ISOPEN BOOLEAN:=false; Cur_OrderLine_ISOPEN BOOLEAN:=false; BEGIN -- Process Parameters IF(p_PInstance_ID IS NOT NULL) THEN -- Chec k for serial execution RAISE NOTICE '%','Updating PInstance - Processing ' || p_PInstance_ID ; SELECT COUNT(*) INTO v_count FROM AD_PINSTANCE WHERE AD_PROCESS_ID IN(SELECT AD_PROCESS_ID FROM AD_PINSTANCE WHERE AD_PInstance_ID=p_PInstance_ID) AND IsProcessing='Y' AND AD_PInstance_ID<>p_PInstance_ID; IF(v_count>0) THEN RAISE EXCEPTION '%', '@SerialProcessStillRunning@' ; --OBTG:-20000-- END IF; -- Update AD_PInstance RAISE NOTICE '%','M_InOut_Create - Processing ' || p_PInstance_ID ; v_ResultStr:='PInstanceNotFound'; PERFORM AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ; -- Get Parameters v_ResultStr:='ReadingParameters'; FOR Cur_Parameter IN (SELECT i.Record_ID, p.ParameterName, p.P_String, p.P_Number, p.P_Date, p.AD_CLIENT_ID, ci.allownegativestock FROM AD_ClientInfo ci, AD_PInstance i LEFT JOIN AD_PInstance_Para p ON i.AD_PInstance_ID=p.AD_PInstance_ID WHERE i.AD_PInstance_ID=p_PInstance_ID AND p.ad_client_id = ci.ad_client_id ORDER BY p.SeqNo) LOOP IF(Cur_Parameter.ParameterName='AD_Org_ID') THEN v_AD_Org_ID:=Cur_Parameter.P_String; RAISE NOTICE '%',' AD_Org_ID=' || v_AD_Org_ID ; ELSIF(Cur_Parameter.ParameterName='Selection') THEN v_Selection:=Cur_Parameter.P_String; RAISE NOTICE '%',' Selection=' || v_Selection ; ELSE RAISE NOTICE '%','*** Unknown Parameter=' || Cur_Parameter.ParameterName ; END IF; v_AD_Client_ID:=Cur_Parameter.AD_CLIENT_ID; v_allownegativestock := cur_parameter.allownegativestock; v_Record_ID:=Cur_Parameter.Record_ID; END LOOP; -- Get Parameter RAISE NOTICE '%',' v_Record_ID=' || v_Record_ID ; ELSIF(p_Invoice_ID IS NOT NULL) THEN CREATE_FROM_INVOICE:=true; SELECT c_invoice.AD_CLIENT_ID, ad_clientinfo.allownegativestock INTO v_ad_client_id, v_allownegativestock FROM ad_clientinfo, c_invoice where ad_clientinfo.ad_client_id = c_invoice.ad_client_id and c_invoice_id = p_invoice_id; ELSE v_Record_ID:=p_Order_ID; RAISE NOTICE '%','--<> Order_ID=' || v_Record_ID; SELECT c_order.AD_CLIENT_ID, ad_clientinfo.allownegativestock INTO v_ad_client_id, v_allownegativestock FROM ad_clientinfo, c_order where ad_clientinfo.ad_client_id = c_order.ad_client_id and c_order_id = v_Record_ID; END IF; BEGIN --BODY IF(NOT CREATE_FROM_INVOICE) THEN -- May be NULL or 0 IF(v_Record_ID IS NULL) THEN v_Record_ID:='0'; END IF; IF(v_Selection IS NULL) THEN v_Selection:='N'; END IF; END IF;--CREATE_FROM_INVOICE IF(NOT CREATE_FROM_INVOICE) THEN /************************************************************************** * Order Loop goes though all open orders, where we would need to ship something * (if v_Record_ID = '0') *************************************************************************/ FOR Cur_Order IN (SELECT o.AD_Client_ID, o.AD_Org_ID, o.C_Order_ID, o.IsSOTrx, o.Description, o.DocumentNo, o.C_DocType_ID, o.C_BPartner_ID, o.C_BPartner_Location_ID, o.AD_User_ID, l.M_Warehouse_ID, o.POReference, o.DateOrdered, o.DeliveryRule, o.FreightCostRule, o.FreightAmt, o.C_Project_ID, o.C_Activity_ID, o.C_Campaign_ID, o.AD_OrgTrx_ID, o.User1_ID, o.User2_ID, o.DeliveryViaRule, o.M_Shipper_ID, o.C_Charge_ID, o.ChargeAmt, o.PriorityRule, o.SALESREP_ID, o.DELIVERY_LOCATION_ID -- Added by Rafa Roda to include delivery location FROM C_ORDER o INNER JOIN C_ORDERLINE l ON(o.C_Order_ID=l.C_Order_ID) -- Orders are IP or CO if Standard Orders WHERE(o.DocStatus='IP' OR(o.DocStatus='CO' AND o.IsDelivered='N' AND v_Record_ID='0')) -- Sales Orders Only and not Offers AND o.IsSOTrx='Y' AND o.C_DocType_ID IN (SELECT C_DocType_ID FROM C_DOCTYPE WHERE DocBaseType='SOO' AND DocSubTypeSO NOT IN('ON', 'OB') ) -- Manually Selected AND((v_Selection='Y' AND o.IsSelected='Y') OR(v_Selection<>'Y' -- Specific or individual organization AND(v_AD_Org_ID IS NULL OR v_AD_Org_ID=o.AD_Org_ID) -- Specific order or all open orders AND(o.C_Order_ID=v_Record_ID -- Parameter OR(v_Record_ID='0' AND EXISTS (SELECT * FROM C_ORDERLINE ll WHERE o.C_Order_ID=ll.C_Order_ID AND ll.QtyOrdered<>ll.QtyDelivered AND ll.DirectShip='N' AND ll.M_Product_ID IS NOT NULL ))))) GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_Order_ID, o.IsSOTrx, o.Description, o.DocumentNo, o.C_DocType_ID, o.C_BPartner_ID, o.C_BPartner_Location_ID, o.AD_User_ID, l.M_Warehouse_ID, o.POReference, o.DateOrdered, o.DeliveryRule, o.FreightCostRule, o.FreightAmt, o.C_Project_ID, o.C_Activity_ID, o.C_Campaign_ID, o.AD_OrgTrx_ID, o.User1_ID, o.User2_ID, o.DeliveryViaRule, o.M_Shipper_ID, o.C_Charge_ID, o.ChargeAmt, o.PriorityRule, o.SALESREP_ID, o.DELIVERY_LOCATION_ID -- Added by Rafa Roda to include delivery location ORDER BY o.PriorityRule ) LOOP v_DocumentNo:=''; v_order_count := v_order_count +1; RAISE NOTICE '%','Order ' || Cur_Order.DocumentNo || '/' || Cur_Order.C_Order_ID || ', Wh=' || Cur_Order.M_Warehouse_ID || ', Force=' || p_ForceDelivery || ', Delivery=' || Cur_Order.DeliveryRule ; -- Delivery Rules -- (A)vailability -- Complete (L)ine -- Complete (O)rder -- After (R)eceipt -- (A)vailability (L)ine -- Do we have something to ship ? IF(Cur_Order.DeliveryRule IN('A', 'L', 'R', 'O')) THEN v_ResultStr:='CheckSomethingToShip'; OPEN Cur_OrderLine(Cur_Order.C_Order_ID, Cur_Order.M_Warehouse_ID) ; Cur_OrderLine_ISOPEN:=true; v_ResultStr:='Fetching'; FETCH Cur_OrderLine INTO ol; IF( NOT FOUND ) THEN --OBTG:Cur_OrderLine-- RAISE NOTICE '%',' -no lines-' ; Next_Order:=true; END IF; ELSE RAISE NOTICE '%','** DeliveryRule=' || Cur_Order.DeliveryRule || ' not implemented' ; Next_Order:=true; END IF; IF(NOT Next_Order) THEN /** * Create Order Header * if forced or if there is a line to ship */ v_ResultStr:='CreateInOut-S'; v_lines:=10; v_lines_per_orderline := 0; -- SELECT * INTO p_InOut_ID FROM Ad_Sequence_Next('M_InOut', Cur_Order.C_Order_ID) ; v_ResultStr:='CreateInOut DocType=' || Cur_Order.C_DocType_ID; -- Get Shipment Doc Number SELECT C_DocTypeShipment_ID INTO v_DocType_ID FROM C_DOCTYPE WHERE C_DocType_ID=Cur_Order.C_DocType_ID; SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doctype(v_DocType_ID, Cur_Order.C_Order_ID, 'Y') ; IF(v_DocumentNo IS NULL) THEN SELECT * INTO v_DocumentNo FROM Ad_Sequence_Doc('DocumentNo_M_InOut', Cur_Order.AD_Client_ID, 'Y') ; END IF; --RAISE EXCEPTION '%','el numero documento es:'||COALESCE(v_DocumentNo,0)||' El doctypeId es: '||COALESCE(v_DocType_ID,0)||' El cOrderId es: '||COALESCE(Cur_Order.C_Order_ID,'0'); --OBTG:-20100-- -- RAISE NOTICE '%',' InOut_ID=' || p_InOut_ID || ', DocumentNo=' || v_DocumentNo || ', Ship_DocType_ID=' || v_DocType_ID || ', Order_DocType_ID=' || Cur_Order.C_DocType_ID ; v_ResultStr:='InsertInOut ' || p_InOut_ID; INSERT INTO M_INOUT (M_InOut_ID, C_Order_ID, IsSOTrx, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, DocumentNo, C_DocType_ID, Description, IsPrinted, MovementType, MovementDate, DateAcct, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID, M_Warehouse_ID, POReference, DateOrdered, DeliveryRule, FreightCostRule, FreightAmt, C_Project_ID, C_Activity_ID, C_Campaign_ID, AD_OrgTrx_ID, User1_ID, User2_ID, DeliveryViaRule, M_Shipper_ID, C_Charge_ID, ChargeAmt, PriorityRule, DocStatus, DocAction, Processing, Processed, SALESREP_ID, DELIVERY_LOCATION_ID) -- Added by Rafa Roda to include delivery location VALUES (p_InOut_ID, Cur_Order.C_Order_ID, Cur_Order.IsSOTrx, Cur_Order.AD_Client_ID, Cur_Order.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', v_DocumentNo, v_DocType_ID, Cur_Order.Description, 'N', 'C-', Cur_Order.DATEORDERED, TO_DATE(NOW()), Cur_Order.C_BPartner_ID, Cur_Order.C_BPartner_Location_ID, Cur_Order.AD_User_ID, Cur_Order.M_Warehouse_ID, Cur_Order.POReference, Cur_Order.DateOrdered, Cur_Order.DeliveryRule, Cur_Order.FreightCostRule, Cur_Order.FreightAmt, Cur_Order.C_Project_ID, Cur_Order.C_Activity_ID, Cur_Order.C_Campaign_ID, Cur_Order.AD_OrgTrx_ID, Cur_Order.User1_ID, Cur_Order.User2_ID, Cur_Order.DeliveryViaRule, Cur_Order.M_Shipper_ID, Cur_Order.C_Charge_ID, Cur_Order.ChargeAmt, Cur_Order.PriorityRule, 'DR', 'CO', 'N', 'N', Cur_Order.SALESREP_ID, Cur_Order.DELIVERY_LOCATION_ID); -- Added by Rafa Roda to include delivery location END IF;--Next_Order IF(NOT Next_Order) THEN /** * Create InOut Lines * for all qualifying order lines */ DECLARE v_Product_old VARCHAR(32); --OBTG:varchar2-- v_Warehouse_old VARCHAR(32); --OBTG:varchar2-- v_UOM_old VARCHAR(32); --OBTG:varchar2-- v_Attribute_old VARCHAR(32); --OBTG:varchar2-- v_Product_UOM_old VARCHAR(32); --OBTG:varchar2-- v_QtyStorage NUMERIC:=0; BEGIN LOOP -- Check Availability v_Qty:=ol.QtyOrdered - ol.QtyDelivered; --MODIFIED BY F.IRIAZABAL v_QtyOrder:=0; IF(ol.M_Product_UOM_ID IS NOT NULL) THEN SELECT M_PRODUCT_UOM.C_UOM_ID INTO v_ProductUOM FROM M_PRODUCT_UOM, C_UOM WHERE M_PRODUCT_UOM.C_UOM_ID=C_UOM.C_UOM_ID AND M_Product_UOM_ID=ol.M_Product_UOM_ID; IF(ol.QtyDelivered=0) THEN v_QtyOrder:=ol.QuantityOrder; ELSIF(v_ProductUOM IS NOT NULL) THEN v_QtyOrder:=ol.QuantityOrder*v_Qty/ol.QtyOrdered; --v_QtyOrder:=C_Uom_Convert(v_Qty, ol.C_UOM_ID, v_ProductUOM, 'Y') ; ELSE v_QtyOrder:=NULL; END IF; ELSE v_QtyOrder:=NULL; END IF; -- Skip zero product lines (comments are zero qty) IF(v_Qty=0 AND ol.M_Product_ID IS NOT NULL) THEN Next_Line:=true; END IF; IF(NOT Next_Line) THEN -- DECLARE v_LocatorQty NUMERIC; v_Locator_ID VARCHAR(32) ; --OBTG:VARCHAR2-- v_IsStocked NUMERIC:=0; BEGIN -- Is it a standard stocked product? IF(ol.M_Product_ID IS NOT NULL) THEN SELECT COUNT(*) INTO v_IsStocked FROM M_PRODUCT WHERE M_Product_ID=ol.M_Product_ID AND IsStocked='Y' AND ProductType='I'; END IF; -- Item is stocked - check availability IF(v_IsStocked<>0) THEN -- check every locator availability and if qty available -- create InOut line, update storage reservation + qty IF(NOT Cur_Storage_ISOPEN) OR(v_Product_old<>ol.M_Product_ID OR v_Warehouse_old<>ol.M_Warehouse_ID OR v_UOM_old<>ol.C_UOM_ID OR COALESCE(v_Attribute_old, '0')<>COALESCE(ol.M_AttributeSetInstance_ID, '0') OR COALESCE(v_Product_UOM_old, '0')<>COALESCE(ol.M_Product_UOM_ID, '0')) THEN v_Product_old:=ol.M_Product_ID; v_Warehouse_old:=ol.M_Warehouse_ID; v_UOM_old:=ol.C_UOM_ID; v_Attribute_old:=ol.M_AttributeSetInstance_ID; v_Product_UOM_old:=ol.M_Product_UOM_ID; IF(Cur_Storage_ISOPEN) THEN CLOSE Cur_Storage; Cur_Storage_ISOPEN:=false; END IF; OPEN Cur_Storage(v_Product_old, v_Warehouse_old, v_UOM_old, v_Product_UOM_old, v_Attribute_old) ; Cur_Storage_ISOPEN:=true; FETCH Cur_Storage INTO v_storage; IF NOT FOUND THEN --OBTG:Cur_Storage-- NEXT_PRODUCT:=true; END IF; IF(NOT NEXT_PRODUCT) THEN v_QtyStorage:=v_storage.QtyOnHand; END IF;--NEXT_PRODUCT END IF; IF(NOT NEXT_PRODUCT) THEN LOOP -- How much do we deliver from here? v_ResultStr:='Deliver'; IF(v_Qty>v_QtyStorage) THEN v_LocatorQty:=v_QtyStorage; ELSE v_LocatorQty:=v_Qty; v_QtyStorage:=v_QtyStorage-v_Qty; END IF; v_ActualQty:=NULL; IF v_storage.M_Product_UOM_ID IS NOT NULL THEN v_ActualQty:=v_storage.QtyOrder*(v_LocatorQty/v_storage.QtyOnHand) ; END IF; IF(v_LocatorQty<>0) THEN -- Create InOut Line SELECT * INTO v_NextNo FROM Ad_Sequence_Next('M_InOutLine', Cur_Order.C_Order_ID) ; -- RAISE NOTICE '%',' Line ' || ol.Line || ' Qty=' || v_LocatorQty ; v_ResultStr:='CreateInOutLine'; INSERT INTO M_INOUTLINE (M_InOutLine_ID, Line, M_InOut_ID, C_OrderLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, M_Product_ID, C_UOM_ID, M_Locator_ID, MovementQty, Description, IsInvoiced, --MODIFIED BY F.IRIAZABAL QuantityOrder, M_Product_Uom_ID, M_AttributeSetInstance_ID) VALUES (v_NextNo, v_lines, p_InOut_ID, ol.C_OrderLine_ID, ol.AD_Client_ID, ol.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', ol.M_Product_ID, v_storage.C_UOM_ID, v_storage.M_Locator_ID, v_LocatorQty, ol.Description, 'N', --MODIFIED BY F.IRIAZABAL v_ActualQty, v_storage.M_PRODUCT_UOM_ID, v_storage.M_AttributeSetInstance_ID); v_lines:=v_lines + 10; v_lines_per_orderline:= v_lines_per_orderline + 10; RAISE NOTICE '%','v_lines' || v_lines ; END IF; v_Qty:=v_Qty - v_LocatorQty; --MODIFIED BY F.IRIAZABAL v_QtyOrder:=v_QtyOrder - v_ActualQty; EXIT WHEN v_Qty=0; v_QtyStorage:=0; v_ResultStr:='FetchingData'; FETCH Cur_Storage INTO v_storage; EXIT WHEN NOT FOUND ; --OBTG:Cur_Storage-- v_QtyStorage:=v_storage.QtyOnHand; END LOOP; -- Storage END IF;--NEXT_PRODUCT ---- <> NEXT_PRODUCT:=false; IF(v_Qty<>0 AND (p_ForceDelivery='Y' OR v_allownegativestock = 'Y')) THEN -- Create InOut Line SELECT * INTO v_NextNo FROM Ad_Sequence_Next('M_InOutLine', Cur_Order.C_Order_ID) ; IF(v_ProductUOM IS NOT NULL) THEN v_ActualQty:=ol.QuantityOrder*v_Qty/ol.QtyOrdered; --v_ActualQty:=C_Uom_Convert(v_Qty, ol.C_UOM_ID, v_ProductUOM, 'Y') ; ELSE v_ActualQty:=NULL; END IF; SELECT MIN(M_LOCATOR_ID) INTO v_Locator_ID FROM M_LOCATOR WHERE M_WAREHOUSE_ID=ol.M_Warehouse_ID; -- RAISE NOTICE '%',' Line ' || ol.Line || ' Qty=' || v_LocatorQty ; v_ResultStr:='CreateInOutLine'; INSERT INTO M_INOUTLINE (M_InOutLine_ID, Line, M_InOut_ID, C_OrderLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, M_Product_ID, C_UOM_ID, M_Locator_ID, MovementQty, Description, IsInvoiced, --MODIFIED BY F.IRIAZABAL , QuantityOrder, M_Product_Uom_ID, M_AttributeSetInstance_ID) VALUES (v_NextNo, v_lines, p_InOut_ID, ol.C_OrderLine_ID, ol.AD_Client_ID, ol.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', ol.M_Product_ID, ol.C_UOM_ID, v_Locator_ID, v_Qty, ol.Description, 'N', --MODIFIED BY F.IRIAZABAL v_ActualQty, ol.M_PRODUCT_UOM_ID, ol.M_AttributeSetInstance_ID); v_lines:=v_lines + 10; ELSIF (v_qty <> 0) THEN IF (cur_order.deliveryrule = 'O') THEN RAISE NOTICE '%','Not enough stocked products, delivery type Order'; next_order := true; v_lines := 0; EXIT; ELSIF (Cur_order.deliveryrule = 'L') THEN RAISE NOTICE '%','Not enough stocked products, delivery type Line'; v_lines := v_lines - v_lines_per_orderline; v_resultlinesstr := COALESCE(v_resultlinesstr, '') || '
@OrderLine@: ' || ol.Line || ' @ForProduct@ ' || ol.name || ': @notEnoughStockDeliveryRuleLine@.' ; v_hasPartial := true; DELETE FROM M_INOUTLINE WHERE M_INOUT_ID = p_InOut_ID AND C_ORDERLINE_ID = ol.C_ORDERLINE_ID; ELSE v_resultlinesstr := COALESCE(v_resultlinesstr, '') || '
@OrderLine@: ' || ol.Line || ' @ForProduct@ ' || ol.name || ': @notEnoughStockPartial@' || '.' ; v_hasPartial := true; END IF; END IF; -- Copy Ad-hoc lines, Comments OR Service Items ELSE -- Create InOut Line SELECT * INTO v_NextNo FROM Ad_Sequence_Next('M_InOutLine', Cur_Order.C_Order_ID) ; -- RAISE NOTICE '%',' Line* ' || ol.Line || ' Qty=' || v_Qty ; v_ResultStr:='CreateInOutLine*2 '||ol.c_order_id||'-'||ol.line||'-'||ol.m_product_id; INSERT INTO M_INOUTLINE (M_InOutLine_ID, Line, M_InOut_ID, C_OrderLine_ID, AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy, M_Product_ID, C_UOM_ID, M_Locator_ID, MovementQty, Description, IsInvoiced, --MODIFIED BY F.IRIAZABAL QuantityOrder, M_Product_Uom_ID, M_AttributeSetInstance_ID) VALUES (v_NextNo, v_lines, p_InOut_ID, ol.C_OrderLine_ID, ol.AD_Client_ID, ol.AD_Org_ID, 'Y', TO_DATE(NOW()), '0', TO_DATE(NOW()), '0', ol.M_Product_ID, ol.C_UOM_ID, NULL, v_Qty, ol.Description,