create site's contacts

/*聲明DO_CREATE_JOB_TITLE*/
  PROCEDURE DO_CREATE_JOB_TITLE
  (
    I_JOB_TITLE         VARCHAR2,
    I_CUST_PARTY_ID     NUMBER,
    I_CUST_ACCOUNT_ID   NUMBER,
    I_CUST_ACCT_SITE_ID NUMBER,
    I_PERSON_LAST_NAME  HZ_PARTIES.PERSON_LAST_NAME%TYPE DEFAULT 'N/A',
    I_PHONE             HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_FAX               HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_EMAIL             HZ_CONTACT_POINTS.EMAIL_ADDRESS%TYPE
  );
  /*實現DO_CREATE_JOB_TITLE*/
  PROCEDURE DO_CREATE_JOB_TITLE
  (
    I_JOB_TITLE         VARCHAR2,
    I_CUST_PARTY_ID     NUMBER,
    I_CUST_ACCOUNT_ID   NUMBER,
    I_CUST_ACCT_SITE_ID NUMBER,
    I_PERSON_LAST_NAME  HZ_PARTIES.PERSON_LAST_NAME%TYPE DEFAULT 'N/A',
    I_PHONE             HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_FAX               HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_EMAIL             HZ_CONTACT_POINTS.EMAIL_ADDRESS%TYPE
  ) AS
    V_JOB_TITLE         VARCHAR2(100);
    V_CUST_PARTY_ID     NUMBER(10);
    V_CUST_ACCOUNT_ID   NUMBER(10);
    V_CUST_ACCT_SITE_ID NUMBER(10);
 
    --create person
    P_PERSON_REC   HZ_PARTY_V2PUB.PERSON_REC_TYPE;
    X_PARTY_ID     NUMBER;
    X_PARTY_NUMBER VARCHAR2(100);
    X_PROFILE_ID   NUMBER;
 
    --create org_contact
    P_ORG_CONTACT_REC HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE;
    X_ORG_CONTACT_ID  NUMBER;
    X_PARTY_REL_ID    NUMBER;
    X_PARTY_ID2       NUMBER;
    X_PARTY_NUMBER2   VARCHAR2(100);
 
    --create acctount_role
    P_CR_CUST_ACC_ROLE_REC HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE;
    X_CUST_ACCOUNT_ROLE_ID NUMBER;
 
    --create contact_point
    P_CONTACT_POINT_REC HZ_CONTACT_POINT_V2PUB.CONTACT_POINT_REC_TYPE;
    P_EMAIL_REC         HZ_CONTACT_POINT_V2PUB.EMAIL_REC_TYPE;
    P_PHONE_REC_GEN     HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
    P_PHONE_REC_FAX     HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
    X_CONTACT_POINT_ID  NUMBER;
 
    X_RETURN_STATUS VARCHAR2(2000);
    X_MSG_COUNT     NUMBER;
    X_MSG_DATA      VARCHAR2(2000);
  BEGIN
    V_JOB_TITLE         := I_JOB_TITLE;
    V_CUST_PARTY_ID     := I_CUST_PARTY_ID;
    V_CUST_ACCOUNT_ID   := I_CUST_ACCOUNT_ID;
    V_CUST_ACCT_SITE_ID := I_CUST_ACCT_SITE_ID;
 
    --step 1 創建hz_parties
    P_PERSON_REC.PERSON_LAST_NAME  := I_PERSON_LAST_NAME;
    P_PERSON_REC.CREATED_BY_MODULE := 'TCA_V2_API';
    --調用TCAPI中創建方法
    HZ_PARTY_V2PUB.CREATE_PERSON('T',
                                 P_PERSON_REC,
                                 X_PARTY_ID,
                                 X_PARTY_NUMBER,
                                 X_PROFILE_ID,
                                 X_RETURN_STATUS,
                                 X_MSG_COUNT,
                                 X_MSG_DATA);
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('********CREATE PERSON SUCCESSFUL********');
    DBMS_OUTPUT.PUT_LINE('Output information ....');
    DBMS_OUTPUT.PUT_LINE('x_party_id: ' || X_PARTY_ID);
    DBMS_OUTPUT.PUT_LINE('x_party_number: ' || X_PARTY_NUMBER);
    DBMS_OUTPUT.PUT_LINE('x_profile_id: ' || X_PROFILE_ID);
    DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
    DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
    DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
 
    --step 2 創建hz_org_contacts並同時創建了hz_relationships
    IF X_RETURN_STATUS = 'S' THEN
      P_ORG_CONTACT_REC.JOB_TITLE                        := V_JOB_TITLE;
      P_ORG_CONTACT_REC.CREATED_BY_MODULE                := 'TCA_V2_API';
      P_ORG_CONTACT_REC.PARTY_REL_REC.SUBJECT_ID         := X_PARTY_ID; -- from step 1
      P_ORG_CONTACT_REC.PARTY_REL_REC.SUBJECT_TYPE       := 'PERSON';
      P_ORG_CONTACT_REC.PARTY_REL_REC.SUBJECT_TABLE_NAME := 'HZ_PARTIES';
      P_ORG_CONTACT_REC.PARTY_REL_REC.OBJECT_ID          := V_CUST_PARTY_ID;
      P_ORG_CONTACT_REC.PARTY_REL_REC.OBJECT_TYPE        := 'ORGANIZATION';
      P_ORG_CONTACT_REC.PARTY_REL_REC.OBJECT_TABLE_NAME  := 'HZ_PARTIES';
      P_ORG_CONTACT_REC.PARTY_REL_REC.RELATIONSHIP_CODE  := 'CONTACT_OF';
      P_ORG_CONTACT_REC.PARTY_REL_REC.RELATIONSHIP_TYPE  := 'CONTACT';
      P_ORG_CONTACT_REC.PARTY_REL_REC.START_DATE         := SYSDATE;
      P_ORG_CONTACT_REC.PARTY_REL_REC.STATUS             := 'A';
      --調用TCAPI中的創建方法
      HZ_PARTY_CONTACT_V2PUB.CREATE_ORG_CONTACT('T',
                                                P_ORG_CONTACT_REC,
                                                X_ORG_CONTACT_ID,
                                                X_PARTY_REL_ID,
                                                X_PARTY_ID2,
                                                X_PARTY_NUMBER2,
                                                X_RETURN_STATUS,
                                                X_MSG_COUNT,
                                                X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('******CREATE_ORG_CONTACT SUCCESSFUL************');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('x_org_contact_id: ' || X_ORG_CONTACT_ID);
      DBMS_OUTPUT.PUT_LINE('x_party_rel_id: ' || X_PARTY_REL_ID);
      DBMS_OUTPUT.PUT_LINE('x_party_id: ' || X_PARTY_ID2);
      DBMS_OUTPUT.PUT_LINE('x_party_number: ' || X_PARTY_NUMBER2);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
    ELSE
      RETURN;
    END IF;
 
    IF X_RETURN_STATUS = 'S' THEN
      --step 3 創建hz_cust_acctount_roles
      P_CR_CUST_ACC_ROLE_REC.PARTY_ID          := X_PARTY_ID2; -- from step 2;
      P_CR_CUST_ACC_ROLE_REC.CUST_ACCOUNT_ID   := V_CUST_ACCOUNT_ID;
      P_CR_CUST_ACC_ROLE_REC.CUST_ACCT_SITE_ID := V_CUST_ACCT_SITE_ID;
      /*P_CR_CUST_ACC_ROLE_REC.ORIG_SYSTEM       := 'UNKNOWN';
      P_CR_CUST_ACC_ROLE_REC.orig_system_reference:='N';*/
      P_CR_CUST_ACC_ROLE_REC.PRIMARY_FLAG      := 'N';
      P_CR_CUST_ACC_ROLE_REC.ROLE_TYPE         := 'CONTACT';
      P_CR_CUST_ACC_ROLE_REC.CREATED_BY_MODULE := 'TCA_V2_API';
      --調用TCAPI中的創建方法
   
      HZ_CUST_ACCOUNT_ROLE_V2PUB.CREATE_CUST_ACCOUNT_ROLE('T',
                                                          P_CR_CUST_ACC_ROLE_REC,
                                                          X_CUST_ACCOUNT_ROLE_ID,
                                                          X_RETURN_STATUS,
                                                          X_MSG_COUNT,
                                                          X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('********CREATE_CUST_ACCOUNT_ROLE SUCCESSFUL************');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('x_cust_account_role_id: ' ||
                           X_CUST_ACCOUNT_ROLE_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
    ELSE
      RETURN;
    END IF;
 
    IF X_RETURN_STATUS = 'S' THEN
      --step 4 創建hz_contact_points
      P_CONTACT_POINT_REC.OWNER_TABLE_NAME   := 'HZ_PARTIES';
      P_CONTACT_POINT_REC.OWNER_TABLE_ID     := X_PARTY_ID2;
      P_CONTACT_POINT_REC.CREATED_BY_MODULE  := 'TCA_V2_API';
      P_CONTACT_POINT_REC.CONTACT_POINT_TYPE := 'PHONE';
   
      --create GEN
      P_PHONE_REC_GEN.PHONE_NUMBER     := I_PHONE;
      P_PHONE_REC_GEN.PHONE_LINE_TYPE  := 'GEN';
      P_CONTACT_POINT_REC.PRIMARY_FLAG := 'Y';
      HZ_CONTACT_POINT_V2PUB.CREATE_PHONE_CONTACT_POINT('T',
                                                        P_CONTACT_POINT_REC,
                                                        P_PHONE_REC_GEN,
                                                        X_CONTACT_POINT_ID,
                                                        X_RETURN_STATUS,
                                                        X_MSG_COUNT,
                                                        X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('*********CREATE GEN SUCCESSFUL**********');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('X_CONTACT_POINT_ID: ' || X_CONTACT_POINT_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
   
      --create FAX
      P_PHONE_REC_FAX.PHONE_NUMBER     := I_FAX;
      P_PHONE_REC_FAX.PHONE_LINE_TYPE  := 'FAX';
      P_CONTACT_POINT_REC.PRIMARY_FLAG := 'N';
      HZ_CONTACT_POINT_V2PUB.CREATE_PHONE_CONTACT_POINT('T',
                                                        P_CONTACT_POINT_REC,
                                                        P_PHONE_REC_FAX,
                                                        X_CONTACT_POINT_ID,
                                                        X_RETURN_STATUS,
                                                        X_MSG_COUNT,
                                                        X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('********CREATE FAX SUCCESSFUL*********');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('X_CONTACT_POINT_ID: ' || X_CONTACT_POINT_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
   
      --create email
      P_CONTACT_POINT_REC.CONTACT_POINT_TYPE := 'EMAIL';
      P_EMAIL_REC.EMAIL_ADDRESS              := I_EMAIL;
      P_CONTACT_POINT_REC.PRIMARY_FLAG       := 'Y';
      P_CONTACT_POINT_REC.ATTRIBUTE_CATEGORY := 'CPC Email Information';
      P_CONTACT_POINT_REC.ATTRIBUTE1         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE2         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE3         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE4         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE5         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE6         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE7         := 'Y';
   
      HZ_CONTACT_POINT_V2PUB.CREATE_EMAIL_CONTACT_POINT('T',
                                                        P_CONTACT_POINT_REC,
                                                        P_EMAIL_REC,
                                                        X_CONTACT_POINT_ID,
                                                        X_RETURN_STATUS,
                                                        X_MSG_COUNT,
                                                        X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('********CREATE EMAIL SUCCESSFUL********');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('X_CONTACT_POINT_ID: ' || X_CONTACT_POINT_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
    END IF;
 
  END DO_CREATE_JOB_TITLE;

  /*聲明DO_CREATE_CONTACT_POINT*/
  PROCEDURE DO_CREATE_CONTACT_POINT
  (
    I_OWNER_TABLE_ID     NUMBER,
    I_CONTACT_POINT_TYPE VARCHAR,
    I_PHONE              HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_FAX                HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_EMAIL              HZ_CONTACT_POINTS.EMAIL_ADDRESS%TYPE
  );

  /*實現DO_CREATE_CONTACT_POINT*/
  PROCEDURE DO_CREATE_CONTACT_POINT
  (
    I_OWNER_TABLE_ID     NUMBER,
    I_CONTACT_POINT_TYPE VARCHAR,
    I_PHONE              HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_FAX                HZ_CONTACT_POINTS.PHONE_NUMBER%TYPE,
    I_EMAIL              HZ_CONTACT_POINTS.EMAIL_ADDRESS%TYPE
  ) AS
    V_OWNER_TABLE_ID     NUMBER(10);
    V_CONTACT_POINT_TYPE VARCHAR(100);
    P_CONTACT_POINT_REC  HZ_CONTACT_POINT_V2PUB.CONTACT_POINT_REC_TYPE;
    P_EMAIL_REC          HZ_CONTACT_POINT_V2PUB.EMAIL_REC_TYPE;
    P_PHONE_REC          HZ_CONTACT_POINT_V2PUB.PHONE_REC_TYPE;
    X_CONTACT_POINT_ID   NUMBER;
 
    X_RETURN_STATUS VARCHAR2(2000);
    X_MSG_COUNT     NUMBER;
    X_MSG_DATA      VARCHAR2(2000);
  BEGIN
    V_OWNER_TABLE_ID                      := I_OWNER_TABLE_ID;
    V_CONTACT_POINT_TYPE                  := I_CONTACT_POINT_TYPE;
    P_CONTACT_POINT_REC.OWNER_TABLE_NAME  := 'HZ_PARTIES';
    P_CONTACT_POINT_REC.OWNER_TABLE_ID    := V_OWNER_TABLE_ID;
    P_CONTACT_POINT_REC.CREATED_BY_MODULE := 'TCA_V2_API';
 
    --根據需要創造不同的contact_point
    IF V_CONTACT_POINT_TYPE = 'GEN' THEN
      P_CONTACT_POINT_REC.CONTACT_POINT_TYPE := 'PHONE';
      P_CONTACT_POINT_REC.PRIMARY_FLAG       := 'Y';
      P_PHONE_REC.PHONE_NUMBER               := I_PHONE;
      P_PHONE_REC.PHONE_LINE_TYPE            := V_CONTACT_POINT_TYPE;
      HZ_CONTACT_POINT_V2PUB.CREATE_PHONE_CONTACT_POINT('T',
                                                        P_CONTACT_POINT_REC,
                                                        P_PHONE_REC,
                                                        X_CONTACT_POINT_ID,
                                                        X_RETURN_STATUS,
                                                        X_MSG_COUNT,
                                                        X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('********CREATE GEN SUCCESSFUL********');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('X_CONTACT_POINT_ID: ' || X_CONTACT_POINT_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
      DBMS_OUTPUT.PUT_LINE('***************************');
   
    ELSIF V_CONTACT_POINT_TYPE = 'FAX' THEN
      P_CONTACT_POINT_REC.CONTACT_POINT_TYPE := 'PHONE';
      P_CONTACT_POINT_REC.PRIMARY_FLAG       := 'N';
      P_PHONE_REC.PHONE_NUMBER               := I_FAX;
      P_PHONE_REC.PHONE_LINE_TYPE            := V_CONTACT_POINT_TYPE;
      HZ_CONTACT_POINT_V2PUB.CREATE_PHONE_CONTACT_POINT('T',
                                                        P_CONTACT_POINT_REC,
                                                        P_PHONE_REC,
                                                        X_CONTACT_POINT_ID,
                                                        X_RETURN_STATUS,
                                                        X_MSG_COUNT,
                                                        X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('********CREATE FAX SUCCESSFUL********');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('X_CONTACT_POINT_ID: ' || X_CONTACT_POINT_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
      DBMS_OUTPUT.PUT_LINE('***************************');
   
    ELSIF V_CONTACT_POINT_TYPE = 'EMAIL' THEN
      P_CONTACT_POINT_REC.CONTACT_POINT_TYPE := 'EMAIL';
      P_CONTACT_POINT_REC.PRIMARY_FLAG       := 'Y';
      P_EMAIL_REC.EMAIL_ADDRESS              := I_EMAIL;
      P_CONTACT_POINT_REC.ATTRIBUTE_CATEGORY := 'CPC Email Information';
      P_CONTACT_POINT_REC.ATTRIBUTE1         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE2         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE3         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE4         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE5         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE6         := 'N';
      P_CONTACT_POINT_REC.ATTRIBUTE7         := 'Y';
      HZ_CONTACT_POINT_V2PUB.CREATE_EMAIL_CONTACT_POINT('T',
                                                        P_CONTACT_POINT_REC,
                                                        P_EMAIL_REC,
                                                        X_CONTACT_POINT_ID,
                                                        X_RETURN_STATUS,
                                                        X_MSG_COUNT,
                                                        X_MSG_DATA);
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('********CREATE EMAIL SUCCESSFUL********');
      DBMS_OUTPUT.PUT_LINE('Output information ....');
      DBMS_OUTPUT.PUT_LINE('X_CONTACT_POINT_ID: ' || X_CONTACT_POINT_ID);
      DBMS_OUTPUT.PUT_LINE('x_return_status: ' || X_RETURN_STATUS);
      DBMS_OUTPUT.PUT_LINE('x_msg_count: ' || X_MSG_COUNT);
      DBMS_OUTPUT.PUT_LINE('x_msg_data: ' || X_MSG_DATA);
      DBMS_OUTPUT.PUT_LINE('***************************');
   
    END IF;
  END;

  /*name:Create_Contacts
    effect:根據傳入的site_gid和ou_name來判斷當前的site是否已經創建了General Default、General Additional、Account Manager,
           如果沒有創建,則進行創建,並同時創建contact_point,如果已經創建了Account Manager,則要判斷其是否創建了phone、
           fax、email,如果沒有,則必須創建
  */
  PROCEDURE CREATE_CONTACTS
  (
    I_SITE_GID HZ_LOCATIONS.ADDRESS_LINES_PHONETIC%TYPE,
    I_OU_NAME  HR_ORGANIZATION_UNITS.NAME%TYPE
  ) AS
    V_GENERAL_DEFAULT_CNT    NUMBER;
    V_GENERAL_ADDITIONAL_CNT NUMBER;
    V_ACCOUNT_MANAGER_CNT    NUMBER;
    V_GEN_CNT                NUMBER DEFAULT 0;
    V_FAX_CNT                NUMBER DEFAULT 0;
    V_EMAIL_CNT              NUMBER DEFAULT 0;
    V_SITE_GID               VARCHAR2(100);
    V_OU_NAME                VARCHAR2(100);
 
    V_CUST_PARTY_ID     NUMBER;
    V_CUST_ACCOUNT_ID   NUMBER;
    V_CUST_ACCT_SITE_ID NUMBER;
    V_OWNER_TABLE_ID    NUMBER;
 
  BEGIN
    V_SITE_GID := I_SITE_GID;
    V_OU_NAME  := I_OU_NAME;
 
    /*查詢當前site對應OU的General Default、General Additional、Account Manager的數量*/
    SELECT NVL(SUM(DECODE(CSC.JOB_TITLE, 'General Default', 1, 0)), 0),
           NVL(SUM(DECODE(CSC.JOB_TITLE, 'General Additional', 1, 0)), 0),
           NVL(SUM(DECODE(CSC.JOB_TITLE, 'Account Manager', 1, 0)), 0)
      INTO V_GENERAL_DEFAULT_CNT,
           V_GENERAL_ADDITIONAL_CNT,
           V_ACCOUNT_MANAGER_CNT
      FROM CPC_V_CUSTOMER_SITE_CONTACT CSC
     WHERE 1 = 1
       AND CSC.SITE_USE_CODE = 'BILL_TO'
       AND CSC.SITE_GID = V_SITE_GID
       AND OU_NAME = V_OU_NAME
          --AND CSC.CONTACT_P_STATUS = 'A'
       AND CSC.CUST_ACCOUNT_ROLE_STATUS = 'A'
       AND CSC.PARTY_SITE_STATUS = 'A'
       AND CSC.ACCT_SITE_STATUS = 'A';
 
    --爲後面創建parties、relationships等準備參數
    SELECT DISTINCT CSC.CUST_PARTY_ID,
                    CSC.CUST_ACCOUNT_ID,
                    CSC.CUST_ACCT_SITE_ID,
                    CSC.ACCT_ROLE_PARTY_ID
      INTO V_CUST_PARTY_ID,
           V_CUST_ACCOUNT_ID,
           V_CUST_ACCT_SITE_ID,
           V_OWNER_TABLE_ID
      FROM CPC_V_CUSTOMER_SITE_CONTACT CSC
     WHERE 1 = 1
       AND CSC.SITE_USE_CODE = 'BILL_TO'
       AND CSC.SITE_GID = V_SITE_GID
       AND OU_NAME = V_OU_NAME
       AND CSC.PARTY_SITE_STATUS = 'A'
       AND CSC.ACCT_SITE_STATUS = 'A';
 
    MO_GLOBAL.INIT('PO'); --必須
 
    --如果。。爲0,則調用創建job_title的方法
    IF V_GENERAL_DEFAULT_CNT = 0 THEN
      DO_CREATE_JOB_TITLE('General Default',
                          V_CUST_PARTY_ID,
                          V_CUST_ACCOUNT_ID,
                          V_CUST_ACCT_SITE_ID,
                          'N/A',
                          'N/A',
                          'N/A',
                          'N/A');
      DBMS_OUTPUT.PUT_LINE('General Default Create Successful!');
      DBMS_OUTPUT.PUT_LINE('***************************');
    END IF;
 
    IF V_GENERAL_ADDITIONAL_CNT = 0 THEN
      DO_CREATE_JOB_TITLE('General Additional',
                          V_CUST_PARTY_ID,
                          V_CUST_ACCOUNT_ID,
                          V_CUST_ACCT_SITE_ID,
                          'N/A',
                          'N/A',
                          'N/A',
                          'N/A');
      DBMS_OUTPUT.PUT_LINE('General Additional Create Successful!');
      DBMS_OUTPUT.PUT_LINE('***************************');
    END IF;
 
    IF V_ACCOUNT_MANAGER_CNT = 0 THEN
      DO_CREATE_JOB_TITLE('Account Manager',
                          V_CUST_PARTY_ID,
                          V_CUST_ACCOUNT_ID,
                          V_CUST_ACCT_SITE_ID,
                          'N/A',
                          'N/A',
                          'N/A',
                          'N/A');
      DBMS_OUTPUT.PUT_LINE('Account Manager Create Successful!');
      DBMS_OUTPUT.PUT_LINE('***************************');
   
    END IF;
 
    --如果..不爲0
    IF V_GENERAL_DEFAULT_CNT > 0 THEN
      --查詢出當前的job_title所擁有的contact_point的數量
      SELECT NVL(SUM(DECODE(CSC.PHONE_LINE_TYPE, 'GEN', 1, 0)), 0),
             NVL(SUM(DECODE(CSC.PHONE_LINE_TYPE, 'FAX', 1, 0)), 0),
             NVL(SUM(DECODE(CSC.CONTACT_POINT_TYPE, 'EMAIL', 1, 0)), 0)
        INTO V_GEN_CNT,
             V_FAX_CNT,
             V_EMAIL_CNT
        FROM CPC_V_CUSTOMER_SITE_CONTACT CSC
       WHERE 1 = 1
         AND CSC.SITE_USE_CODE = 'BILL_TO'
         AND CSC.SITE_GID = V_SITE_GID
         AND OU_NAME = V_OU_NAME
         AND CSC.JOB_TITLE = 'General Default'
         AND CSC.CONTACT_P_STATUS = 'A'
         AND CSC.CUST_ACCOUNT_ROLE_STATUS = 'A'
         AND CSC.PARTY_SITE_STATUS = 'A'
         AND CSC.ACCT_SITE_STATUS = 'A';
      --如果,,爲0則進行創建
      IF V_GEN_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'GEN',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Gen Create Successful!');
      END IF;
      IF V_FAX_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'FAX',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Fax Create Successful!');
      END IF;
      IF V_EMAIL_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'EMAIL',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Email Create Successful!');
      END IF;
    END IF;
 
    IF V_GENERAL_ADDITIONAL_CNT > 0 THEN
      SELECT NVL(SUM(DECODE(CSC.PHONE_LINE_TYPE, 'GEN', 1, 0)), 0),
             NVL(SUM(DECODE(CSC.PHONE_LINE_TYPE, 'FAX', 1, 0)), 0),
             NVL(SUM(DECODE(CSC.CONTACT_POINT_TYPE, 'EMAIL', 1, 0)), 0)
        INTO V_GEN_CNT,
             V_FAX_CNT,
             V_EMAIL_CNT
        FROM CPC_V_CUSTOMER_SITE_CONTACT CSC
       WHERE 1 = 1
         AND CSC.SITE_USE_CODE = 'BILL_TO'
         AND CSC.SITE_GID = V_SITE_GID
         AND OU_NAME = V_OU_NAME
         AND CSC.JOB_TITLE = 'General Additional'
         AND CSC.CONTACT_P_STATUS = 'A'
         AND CSC.CUST_ACCOUNT_ROLE_STATUS = 'A'
         AND CSC.PARTY_SITE_STATUS = 'A'
         AND CSC.ACCT_SITE_STATUS = 'A'
       GROUP BY CSC.JOB_TITLE;
      IF V_GEN_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'GEN',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Gen Create Successful!');
      END IF;
      IF V_FAX_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'FAX',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Fax Create Successful!');
      END IF;
      IF V_EMAIL_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'EMAIL',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Email Create Successful!');
      END IF;
    END IF;
 
    IF V_ACCOUNT_MANAGER_CNT > 0 THEN
      SELECT NVL(SUM(DECODE(CSC.PHONE_LINE_TYPE, 'GEN', 1, 0)), 0),
             NVL(SUM(DECODE(CSC.PHONE_LINE_TYPE, 'FAX', 1, 0)), 0),
             NVL(SUM(DECODE(CSC.CONTACT_POINT_TYPE, 'EMAIL', 1, 0)), 0)
        INTO V_GEN_CNT,
             V_FAX_CNT,
             V_EMAIL_CNT
        FROM CPC_V_CUSTOMER_SITE_CONTACT CSC
       WHERE 1 = 1
         AND CSC.SITE_USE_CODE = 'BILL_TO'
         AND CSC.SITE_GID = V_SITE_GID
         AND OU_NAME = V_OU_NAME
         AND CSC.JOB_TITLE = 'Account Manager'
         AND CSC.CONTACT_P_STATUS = 'A'
         AND CSC.CUST_ACCOUNT_ROLE_STATUS = 'A'
         AND CSC.PARTY_SITE_STATUS = 'A'
         AND CSC.ACCT_SITE_STATUS = 'A'
       GROUP BY CSC.JOB_TITLE;
      IF V_GEN_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'GEN',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Gen Create Successful!');
      END IF;
      IF V_FAX_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'FAX',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Fax Create Successful!');
      END IF;
      IF V_EMAIL_CNT = 0 THEN
        DO_CREATE_CONTACT_POINT(V_OWNER_TABLE_ID,
                                'EMAIL',
                                'N/A',
                                'N/A',
                                'N/A');
        DBMS_OUTPUT.PUT_LINE('Email Create Successful!');
      END IF;
    END IF;
 
  END CREATE_CONTACTS;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章