SQL Stored Procedure - Import Contact

WARNING: This is not kids stuff. Use of this feature requires expertise in SQL Server and in the Cyrious database structure. It is very possible to irreversibly damage your Cyrious Control database if you make a mistake. Always develop your tests using a separate database on a separate machine. If you are interested in using sql_bridge but are not a SQL guru, please contact a sales or consulting at Cyrious.

Note: This feature requires Control 5.75 or higher.

Overview

The stored procedure can be used to add a new contact. You only need to (and are only allowed to) specify one of the following:

@AccountID - The ID of the company in the Account Table

@CompanyName - The exact text name of the company.

You must also provide

@FirstName or @ LastName - One of these fields must be provided to insert a contact.

Not all of the information you can add in Control is included in this standard stored procedure, though someone familiar with SQL could extend this accordingly. All of the records inserted are wrapped in a single transaction. This ensures that the records are either all inserted, or none are inserted.

The stored procedure requires sql_bridge in order to obtain IDs for the inserted records. sql_bridge is a collection of SQL Server stored procedures and functions and external modules that can be called to safely insert or update data into the Control database and notify the CHAPI service that data has been updated. The CHAPI service is a controller program that will then notify the SSLIP and all copies of Control about the changes.

Example Usage

This inserts a basic contact.

EXEC csp_ImportContact
        --
        -- All calls must supply *one* and only one of the following values
        --
        @AccountID = 10445,
        @CompanyName = NULL, -- The company name.  Must match EXACTLY and be the only one
 
         -- Contact Name
        @LastName = 'James',
        @FirstName = 'Sara',
 
        -- Contact Additional Phone #1
        @AddCellPhone = 1, -- Set to 1 to Add a Cell Phone to the contact
        @CellPhoneAC = '318',
        @CellPhoneNumber = '9019392',

This inserts a sample contact with

  • a different office phone number,
  • a different shipping address
EXEC csp_ImportContact
        --
        -- All calls must supply *one* and only one of the following values
        --
        @AccountID = 10445,
        @CompanyName = NULL, -- The company name.  Must match EXACTLY and be the only one
 
         -- Contact Name
        @FirstName = 'Sara',
        @POSITION  = NULL,
        @EmailAddress  = NULL,
        @IsPrimaryContact = 1,
        @IsBillingContact = 1,
 
 
        -- Office Phone
        @UseDefaultPhone = 1,
        @WorkPhoneAC = NULL,
        @WorkPhoneNumber = NULL,
 
        -- Contact Additional Phone #1
        @AddCellPhone = 1, -- Set to 1 to Add a Cell Phone to the contact
        @CellPhoneAC = '318',
        @CellPhoneNumber = '9019392',
 
        -- Company Shipping Address Info
        @UseCompanyShippingAddress = 1,  -- Set to 1 to use the same shipping as the company
        @SStreetAddress1 = NULL,
        @SStreetAddress2 = NULL,
        @SCity           = NULL,
        @SState          = NULL,
        @SPostalCode     = NULL,
 
        @Notes = ''

Stored Procedure

-- =============================================
-- Author:        Cyrious Sofware
-- Create date: May-2016
-- Description:    This stored procedure imports a contact record into Control.
--                Many of the parameters are option, but if not supplied will used
--                The default behavior.
--              
-- Returns:     New ID for Contact (AccountContact.ID)
-- =============================================
ALTER PROCEDURE csp_ImportContact
    @AccountID            INT,
    @Title              VARCHAR(25) = NULL,
    @FirstName          VARCHAR(25) = NULL,
    @LastName           VARCHAR(25) = NULL,
    @POSITION           VARCHAR(50) = NULL,
    @EmailAddress       VARCHAR(50) = NULL,
    @IsPrimaryContact   BIT = 0,
    @IsBillingContact   BIT = 0,
 
 
    -- Office Phone #1
    @UseDefaultPhone  BIT = 1,
    @WorkPhoneAC      VARCHAR(10) = NULL,
    @WorkPhoneNumber  VARCHAR(25) = NULL,
 
    -- Company Billing Address Info
    @UseCompanyBillingAddress bit = 1,  -- Set to 1 to use the same shipping as the company
    @BillingAddress1 VARCHAR(256) = NULL,
    @BillingAddress2 VARCHAR(256) = NULL,
    @BillingCity           VARCHAR(256) = NULL,
    @BillingState          VARCHAR(256) = NULL,
    @BillingPostalCode     VARCHAR(256) = NULL,
 
    -- Company Shipping Address Info
    @UseCompanyShippingAddress bit = 1,  -- Set to 1 to use the same shipping as the company
    @ShippingAddress1 VARCHAR(256) = NULL,
    @ShippingAddress2 VARCHAR(256) = NULL,
    @ShippingCity           VARCHAR(256) = NULL,
    @ShippingState          VARCHAR(256) = NULL,
    @ShippingPostalCode     VARCHAR(256) = NULL,
 
    @Notes        VARCHAR(4096) = '',
 
    -- Contact Additional Phone #1
    @AddCellPhone     BIT = 0,    -- Set to 1 to Add a Cell Phone to the contact
    @CellPhoneAC      VARCHAR(10) = NULL,
    @CellPhoneNumber  VARCHAR(25) = NULL,
 
    -- Some OUTPUT Parameters in case the caller wants any of these value back
    @ContactID          INT     = NULL  OUTPUT,
    @BillingAddressID         INT     = NULL  OUTPUT,
    @ShippingAddressID         INT     = NULL  OUTPUT,
    @JournalID          INT     = NULL  OUTPUT
 
AS
BEGIN
    SET NOCOUNT ON;
 
    --
    -- Step 0. Validate the Input
    --
 
    DECLARE @Logs                               TABLE( ID INT, ClassTypeID INT, ParentID INT, IsError BIT,
                                                       Summary VARCHAR(255),
                                                       Detail VARCHAR(2000)
                                                       );
    DECLARE @ValidationError VARCHAR(MAX) = '';
 
    IF (@AccountID IS NULL) SET @ValidationError = @ValidationError + 'AccountID required.  ';
    IF (COALESCE(@FirstName, '') = '') AND (COALESCE(@LastName, '') = '') SET @ValidationError = @ValidationError + 'Either a First Name or a Last name is required.  ';
 
    IF (@ValidationError <> '')
    BEGIN
        INSERT INTO @Logs (ID, ClassTypeID, ParentID, IsError, Summary, Detail)
        VALUES(
            NULL, 3000, @AccountID, 1,
            'Contact '+@FirstName+' '+@LastName+'for Account.ID '+CONVERT(VARCHAR(12), @AccountID)+' Import FAILED due to Validation Errors.',
            'Validation Errors: '+@ValidationError
        )
 
        SELECT * FROM @Logs;
        RETURN;
    END;
 
 
    -- Company info Pulled from Store or looked up
    DECLARE @PhoneCountryCode   VARCHAR(10);
    DECLARE @DivisionID         INT;
    DECLARE @SalespersonID      INT;
 
    -- Retrieve Defaults Information from  databases
    SELECT  TOP 1
            @PhoneCountryCode = COALESCE(DefaultCountryCode, '1')
    FROM Store
    WHERE ID > 0
    ORDER BY ID;
 
    -- Declare ID fields used in the process;
    DECLARE @WorkPhoneType      INT = 10;  -- Business.  From Element Table, where ClassTypeID = 4101
    DECLARE @CellPhoneType      INT = 12;  -- Mobile.  From Element Table, where ClassTypeID = 4101
 
    -- Load some default information
    SELECT @DivisionID = DivisionID,
           @SalespersonID = SalespersonID1,
           @ShippingAddressID = ShippingAddressID,
           @BillingAddressID = BillingAddressID
    FROM Account
    WHERE ID = @AccountID;
 
    -- Define some error variables in case we need them
    DECLARE @DT              SMALLDATETIME = GetDate();
    DECLARE @ComputerName    VARCHAR(25) = @@ServerName;
    DECLARE @NewLine         CHAR(2) =  CHAR(10)+CHAR(13);
 
 
-- Step 1, Request New IDs
-- 
    SET @ContactID          = (SELECT dbo.csf_chapi_nextid( 3000, 1));
    SET @JournalID          = (SELECT dbo.csf_chapi_nextid( 20510, 1)); -- Company Activity 
 
    DECLARE @AddressLinkID      INT     = (SELECT dbo.csf_chapi_nextid( 4002, 2)); -- Need 2 Address Links
    DECLARE @PhoneNumberID      INT     = (SELECT dbo.csf_chapi_nextid( 4100, 2)); -- Work Phone for Business (and Cell if needed)
 
    IF (@UseCompanyBillingAddress = 0)  SET @BillingAddressID = (SELECT dbo.csf_chapi_nextid( 4001, 1));
    IF (@UseCompanyShippingAddress = 0) SET @ShippingAddressID = (SELECT dbo.csf_chapi_nextid( 4001, 1));
 
-- Step 2, Begin a Transaction so the whole thing succeeds or fails together 
--
 
BEGIN TRANSACTION
 
   BEGIN TRY
 
        --
        -- Step 1, Create the associated CONTACT RECORDS
        --
 
        -- Insert Contact
 
        INSERT INTO [dbo].[AccountContact] ([ID] ,[StoreID] ,[ClassTypeID] ,[ModifiedByUser] ,[ModifiedByComputer] ,[ModifiedDate] ,[SeqID] ,[IsSystem] ,[IsActive] ,[Notes] ,[FirstName] ,[LastName] ,[Title] ,[POSITION], [EmailAddress] ,[MainPhoneNumberID] ,[MainFaxNumberID] ,[AccountID] ,[IsPrimaryContact] ,[IsAccountingContact] ,[BillingAddressID] ,[ShippingAddressID] ,[BirthDateMonth] ,[BirthDateDay] ,[DefaultPaymentExpDate] ,[DefaultPaymentTrackingNumber] ,[DefaultPaymentNameOnCard] ,[DefaultPaymentTypeID] ,[CCBillingAddress] ,[DefaultPaymentVCode] ,[UserID] ,[SalespersonID1] ,[SalespersonID2] ,[SalespersonID3] ,[UseCompanySalespeople] ,[IsCCNumEncrypt] ,[DisplayNumber] ,[BirthDate] ,[IsVCodeEncrypted] ,[PrimaryNumber] ,[PriNumberTypeID] ,[PriNumberTypeText] ,[SecondaryNumber] ,[SecNumberTypeID] ,[SecNumberTypeText] ,[PaymentAddressID] ,[CCSwiped] ,[SendBillingAddress] ,[IDNumber] ,[ImageID] ,[MiddleName] ,[ContactType] ,[GenderType] ,[NumOfMakeups] ,[ThirdNumber] ,[ThirdNumberTypeID] ,[ThirdNumberTypeText] ,[DefaultPaymentBankReference] ,[DefaultPaymentBankCode] ,[DefaultPaymentBranchCode] ,[DefaultPaymentCIN] ,[DefaultPaymentState] ,[DefaultPaymentCCAccount] ,[PaymentAddressLinkID] ,[CCCSCustomerGuid] ,[UseShippingAccountInfo] ,[DefaultShippingAccountNumber] ,[DefaultShippingCarrierID] ,[DefaultShippingCarrierClassTypeID] ,[DefaultShippingAccountPostalCode] ,[ShippingMethodLinksXML] ,[PaymentAddressOV]) 
 
        VALUES
        ( @ContactID  -- <ID, int,>
        , -1     -- ,<StoreID, int,>
        , 3000     -- ,<ClassTypeID, int,>
        , 'SQLBridge'     -- ,<ModifiedByUser, nvarchar(25),>
        , @ComputerName     -- ,<ModifiedByComputer, nvarchar(25),>
        , @DT          -- ,<ModifiedDate, datetime,>
        , 0    -- ,<SeqID, int,>
        , 0    -- ,<IsSystem, bit,>
        , 1    -- ,<IsActive, bit,>
        , NULL  -- <Notes, nvarchar(max),>
        , @FirstName  -- <FirstName, nvarchar(25),>
        , @LastName  -- <LastName, nvarchar(25),>
        , @Title  -- <Title, nvarchar(10),>
        , @POSITION  -- <Position, nvarchar(25),>
        , @EmailAddress  -- <EmailAddress, nvarchar(50),>
        , @PhoneNumberID+0  -- <MainPhoneNumberID, int,>
        , CASE WHEN (@AddCellPhone = 1) THEN @PhoneNumberID+2 ELSE NULL END  -- <MainFaxNumberID, int,>
        , @AccountID  -- <AccountID, int,>
        , @IsPrimaryContact  -- <IsPrimaryContact, bit,>
        , @IsBillingContact  -- <IsAccountingContact, bit,>
        , @BillingAddressID  -- <BillingAddressID, int,>
        , @ShippingAddressID  -- <ShippingAddressID, int,>
        , NULL  -- <BirthDateMonth, int,>
        , NULL  -- <BirthDateDay, int,>
        , NULL  -- <DefaultPaymentExpDate, datetime,>
        , NULL  -- <DefaultPaymentTrackingNumber, varchar(25),>
        , NULL  -- <DefaultPaymentNameOnCard, varchar(25),>
        , NULL  -- <DefaultPaymentTypeID, int,>
        , NULL  -- <CCBillingAddress, varchar(25),>
        , NULL  -- <DefaultPaymentVCode, varchar(50),>
        , NULL  -- <UserID, int,>
        , @SalespersonID  -- <SalespersonID1, int,>
        , NULL  -- <SalespersonID2, int,>
        , NULL  -- <SalespersonID3, int,>
        , 1  -- <UseCompanySalespeople, bit,>
        , 1  -- <IsCCNumEncrypt, bit,>
        , ''  -- <DisplayNumber, nvarchar(50),>
        , NULL  -- <BirthDate, datetime,>
        , 1  -- <IsVCodeEncrypted, bit,>
        , '('+@WorkPhoneAC+') '+@WorkPhoneNumber  -- <PrimaryNumber, varchar(75),>
        , @WorkPhoneType  -- <PriNumberTypeID, int,>
        , (SELECT ElementName FROM Element WHERE ClassTypeID = 4101 AND ID = @WorkPhoneType) -- <PriNumberTypeText, varchar(50),>
        , CASE WHEN (@AddCellPhone = 1) THEN '('+@CellPhoneAC+') '+@CellPhoneNumber ELSE '' END  -- <SecondaryNumber, varchar(75),>
        , @CellPhoneType  -- <SecNumberTypeID, int,>
        , (SELECT ElementName FROM Element WHERE ClassTypeID = 4101 AND ID = @CellPhoneType) -- <SecNumberTypeText, varchar(50),>
        , NULL  -- <PaymentAddressID, int,>
        , 0  -- <CCSwiped, bit,>
        , 1  -- <SendBillingAddress, bit,>
        , NULL  -- <IDNumber, nvarchar(50),>
        , NULL  -- <ImageID, int,>
        , ''  -- <MiddleName, nvarchar(50),>
        , 0  -- <ContactType, int,>
        , 0  -- <GenderType, int,>
        , NULL  -- <NumOfMakeups, int,>
        , NULL  -- <ThirdNumber, nvarchar(75),>
        , NULL  -- <ThirdNumberTypeID, int,>
        , NULL  -- <ThirdNumberTypeText, varchar(50),>
        , NULL  -- <DefaultPaymentBankReference, varchar(50),>
        , NULL  -- <DefaultPaymentBankCode, varchar(50),>
        , NULL  -- <DefaultPaymentBranchCode, varchar(50),>
        , NULL  -- <DefaultPaymentCIN, varchar(50),>
        , NULL  -- <DefaultPaymentState, varchar(50),>
        , NULL  -- <DefaultPaymentCCAccount, varchar(50),>
        , NULL  -- <PaymentAddressLinkID, int,>
        , NULL  -- <CCCSCustomerGuid, varchar(50),>
        , 0  -- <UseShippingAccountInfo, bit,>
        , NULL  -- <DefaultShippingAccountNumber, varbinary(100),>
        , -1  -- <DefaultShippingCarrierID, int,>
        , -1  -- <DefaultShippingCarrierClassTypeID, int,>
        , NULL  -- <DefaultShippingAccountPostalCode, nvarchar(25),>
        , NULL  -- <ShippingMethodLinksXML, nvarchar(max),>
        , 0  -- <PaymentAddressOV, bit,>
        );
 
 
        -- Insert ContactUDF (Nothing by default)
 
        INSERT INTO [dbo].[AccountContactUserField] ([ID] ,[StoreID] ,[ClassTypeID] ,[ModifiedByUser] ,[ModifiedByComputer] ,[ModifiedDate] ,[SeqID] ,[IsSystem] ,[IsActive] ) 
 
        VALUES
        ( @ContactID  -- <ID, int,>
        , -1     -- ,<StoreID, int,>
        , 3001     -- ,<ClassTypeID, int,>
        , 'SQLBridge'     -- ,<ModifiedByUser, nvarchar(25),>
        , @ComputerName     -- ,<ModifiedByComputer, nvarchar(25),>
        , @DT  -- ,<ModifiedDate, datetime,>
        , 0    -- ,<SeqID, int,>
        , 0    -- ,<IsSystem, bit,>
        , 1    -- ,<IsActive, bit,>
        );
 
 
        -- Insert Billing Address if different.
 
        IF (@UseCompanyBillingAddress = 0)
        BEGIN
            INSERT INTO [dbo].[Address] ( [ID], [StoreID], [ClassTypeID], [ModifiedByUser], [ModifiedByComputer], [ModifiedDate], [SeqID], [IsSystem], [IsActive], [StreetAddress1], [StreetAddress2], [City], [State], [County], [PostalCode], [Country], [FormattedText], [TaxClassID], [IsValidated], [ValidatedAddress], [HasValidationError], [ValidationError])
 
            VALUES
            ( @BillingAddressID   -- <ID, int,>
            , -1           -- ,<StoreID, int,>
            , 4001         -- ,<ClassTypeID, int,>
            , 'SQLBridge'  -- ,<ModifiedByUser, nvarchar(25),>
            , @ComputerName -- ,<ModifiedByComputer, nvarchar(25),>
            , @DT    -- ,<ModifiedDate, datetime,>
            , 0            -- ,<SeqID, int,>
            , 0            -- ,<IsSystem, bit,>
            , 1            -- ,<IsActive, bit,>
            , @BillingAddress1   -- <StreetAddress1, varchar(40),>
            , @BillingAddress2   -- <StreetAddress2, varchar(40),>
            , @BillingCity   -- <City, varchar(25),>
            , @BillingState   -- <State, varchar(50),>
            , ''   -- <County, varchar(50),>
            , @ShippingPostalCode   -- <PostalCode, varchar(50),>
            , 'US'   -- <Country, varchar(50),>
            , @BillingAddress1  + @NewLine
            + (CASE WHEN len(COALESCE(@BillingAddress2, '')) > 1 THEN @BillingAddress2 + @NewLine ELSE '' END) 
            + @BillingCity + ', ' + @BillingState + '  ' + @BillingPostalCode -- <FormattedText, varchar(max),>
            , NULL   -- <TaxClassID, int,>
            , 0   -- <IsValidated, bit,>
            , NULL   -- <ValidatedAddress, varchar(max),>
            , 0   -- <HasValidationError, bit,>
            , NULL   -- <ValidationError, varchar(max),>
            );
        END;
 
        -- Insert Shipping Address if different.
 
        IF (@UseCompanyShippingAddress = 0)
        BEGIN
            INSERT INTO [dbo].[Address] ( [ID], [StoreID], [ClassTypeID], [ModifiedByUser], [ModifiedByComputer], [ModifiedDate], [SeqID], [IsSystem], [IsActive], [StreetAddress1], [StreetAddress2], [City], [State], [County], [PostalCode], [Country], [FormattedText], [TaxClassID], [IsValidated], [ValidatedAddress], [HasValidationError], [ValidationError])
 
            VALUES
            ( @ShippingAddressID   -- <ID, int,>
            , -1           -- ,<StoreID, int,>
            , 4001         -- ,<ClassTypeID, int,>
            , 'SQLBridge'  -- ,<ModifiedByUser, nvarchar(25),>
            , @ComputerName -- ,<ModifiedByComputer, nvarchar(25),>
            , @DT    -- ,<ModifiedDate, datetime,>
            , 0            -- ,<SeqID, int,>
            , 0            -- ,<IsSystem, bit,>
            , 1            -- ,<IsActive, bit,>
            , @ShippingAddress1   -- <StreetAddress1, varchar(40),>
            , @ShippingAddress2   -- <StreetAddress2, varchar(40),>
            , @ShippingCity   -- <City, varchar(25),>
            , @ShippingState   -- <State, varchar(50),>
            , ''   -- <County, varchar(50),>
            , @ShippingPostalCode   -- <PostalCode, varchar(50),>
            , 'US'   -- <Country, varchar(50),>
            , @ShippingAddress1  + @NewLine
            + (CASE WHEN len(COALESCE(@ShippingAddress2, '')) > 1 THEN @ShippingAddress2 + @NewLine ELSE '' END) 
            + @ShippingCity + ', ' + @ShippingState + '  ' + @ShippingPostalCode -- <FormattedText, varchar(max),>
            , NULL   -- <TaxClassID, int,>
            , 0   -- <IsValidated, bit,>
            , NULL   -- <ValidatedAddress, varchar(max),>
            , 0   -- <HasValidationError, bit,>
            , NULL   -- <ValidationError, varchar(max),>
            );
        END;
 
        -- Insert Contact Address Links  (Billing & Shipping)
 
        INSERT INTO [dbo].[AddressLink] ( [ID], [StoreID], [ClassTypeID], [ModifiedByUser], [ModifiedByComputer], [ModifiedDate], [SeqID], [IsSystem], [IsActive], [IsMaster], [ParentID], [ParentClassTypeID], [AddressTypeID], [AddressID], [AddressName], [IsOneTimeCompany], [CompanyName], [ContactName])
 
        VALUES
        ( @AddressLinkID+0   -- <ID, int,>
        , -1           -- ,<StoreID, int,>
        , 4002         -- ,<ClassTypeID, int,>
        , 'SQLBridge'  -- ,<ModifiedByUser, nvarchar(25),>
        , @ComputerName -- ,<ModifiedByComputer, nvarchar(25),>
        , @DT          -- ,<ModifiedDate, datetime,>
        , 0            -- ,<SeqID, int,>
        , 0            -- ,<IsSystem, bit,>
        , 1            -- ,<IsActive, bit,>
        , (CASE WHEN @UseCompanyBillingAddress=1 THEN 0 ELSE 1 END)   -- <IsMaster, bit,>
        , @ContactID   -- <ParentID, int,>
        , 3000   -- <ParentClassTypeID, smallint,>
        , 10   -- Shipping Address -- <AddressTypeID, tinyint,>
        , @BillingAddressID   -- <AddressID, int,>
        , 'Billing'   -- <AddressName, varchar(50),>
        , 0   -- <IsOneTimeCompany, bit,>
        , NULL   -- <CompanyName, varchar(100),>
        , NULL   -- <ContactName, varchar(100),>
        );
 
 
        INSERT INTO [dbo].[AddressLink] ( [ID], [StoreID], [ClassTypeID], [ModifiedByUser], [ModifiedByComputer], [ModifiedDate], [SeqID], [IsSystem], [IsActive], [IsMaster], [ParentID], [ParentClassTypeID], [AddressTypeID], [AddressID], [AddressName], [IsOneTimeCompany], [CompanyName], [ContactName])
 
        VALUES
        ( @AddressLinkID+1   -- <ID, int,>
        , -1           -- ,<StoreID, int,>
        , 4002         -- ,<ClassTypeID, int,>
        , 'SQLBridge'  -- ,<ModifiedByUser, nvarchar(25),>
        , @ComputerName -- ,<ModifiedByComputer, nvarchar(25),>
        , @DT          -- ,<ModifiedDate, datetime,>
        , 0            -- ,<SeqID, int,>
        , 0            -- ,<IsSystem, bit,>
        , 1            -- ,<IsActive, bit,>
        , (CASE WHEN @UseCompanyShippingAddress=1 THEN 0 ELSE 1 END )   -- <IsMaster, bit,>
        , @ContactID   -- <ParentID, int,>
        , 3000   -- <ParentClassTypeID, smallint,>
        , 11   -- Shipping Address -- <AddressTypeID, tinyint,>
        , @ShippingAddressID   -- <AddressID, int,>
        , 'Shipping'   -- <AddressName, varchar(50),>
        , 0   -- <IsOneTimeCompany, bit,>
        , NULL   -- <CompanyName, varchar(100),>
        , NULL   -- <ContactName, varchar(100),>
        );
 
        -- Insert Contact Phone Numbers (Work and Cell)
 
        INSERT INTO [dbo].[PhoneNumber]  ( [ID], [StoreID], [ClassTypeID], [ModifiedByUser], [ModifiedByComputer], [ModifiedDate], [SeqID], [IsSystem], [IsActive], [ParentID], [ParentStoreID], [ParentClassTypeID], [PhoneNumberTypeID], [CountryCode], [AreaCode], [PhoneNumber], [Extension], [FormattedText], [PhoneNumberIndex], [PhoneNumberTypeText])
 
        VALUES
        ( @PhoneNumberID+0 -- <ID, int,>
        , -1           -- ,<StoreID, int,>
        , 4100         -- ,<ClassTypeID, int,>
        , 'SQLBridge'  -- ,<ModifiedByUser, nvarchar(25),>
        , @ComputerName -- ,<ModifiedByComputer, nvarchar(25),>
        , @DT          -- ,<ModifiedDate, datetime,>
        , 0            -- ,<SeqID, int,>
        , 0            -- ,<IsSystem, bit,>
        , 1            -- ,<IsActive, bit,>
        , @ContactID   -- <ParentID, int,>
        , -1     -- <ParentStoreID, smallint,>
        , 3000   -- <ParentClassTypeID, smallint,>
        , @WorkPhoneType   -- <PhoneNumberTypeID, int,>
        , @PhoneCountryCode  -- <CountryCode, varchar(20),>
        , @WorkPhoneAC   -- <AreaCode, varchar(20),>
        , @WorkPhoneNumber   -- <PhoneNumber, varchar(50),>
        , ''   -- <Extension, varchar(20),>
        , '('+@WorkPhoneAC+') '+@WorkPhoneNumber   -- <FormattedText, varchar(150),>
        , 0   -- <PhoneNumberIndex, int,>
        , (SELECT ElementName FROM Element WHERE ClassTypeID = 4101 AND ID = @WorkPhoneType) -- <PhoneNumberTypeText, varchar(100),>
        );
 
        IF (@AddCellPhone = 1)
        BEGIN
            INSERT INTO [dbo].[PhoneNumber]  ( [ID], [StoreID], [ClassTypeID], [ModifiedByUser], [ModifiedByComputer], [ModifiedDate], [SeqID], [IsSystem], [IsActive], [ParentID], [ParentStoreID], [ParentClassTypeID], [PhoneNumberTypeID], [CountryCode], [AreaCode], [PhoneNumber], [Extension], [FormattedText], [PhoneNumberIndex], [PhoneNumberTypeText])
 
            VALUES
            ( @PhoneNumberID+1 -- <ID, int,>
            , -1           -- ,<StoreID, int,>
            , 4100         -- ,<ClassTypeID, int,>
            , 'SQLBridge'  -- ,<ModifiedByUser, nvarchar(25),>
            , @ComputerName -- ,<ModifiedByComputer, nvarchar(25),>
            , GetDate()    -- ,<ModifiedDate, datetime,>
            , 0            -- ,<SeqID, int,>
            , 0            -- ,<IsSystem, bit,>
            , 1            -- ,<IsActive, bit,>
            , @ContactID   -- <ParentID, int,>
            , -1     -- <ParentStoreID, smallint,>
            , 3000   -- <ParentClassTypeID, smallint,>
            , @CellPhoneType   -- <PhoneNumberTypeID, int,>
            , @PhoneCountryCode  -- <CountryCode, varchar(20),>
            , @CellPhoneAC   -- <AreaCode, varchar(20),>
            , @CellPhoneNumber   -- <PhoneNumber, varchar(50),>
            , ''   -- <Extension, varchar(20),>
            , '('+@CellPhoneAC+') '+@CellPhoneNumber   -- <FormattedText, varchar(150),>
            , 0   -- <PhoneNumberIndex, int,>
            , (SELECT ElementName FROM Element WHERE ClassTypeID = 4101 AND ID = @CellPhoneType) -- <PhoneNumberTypeText, varchar(100),>
            );
        END; -- of adding cell phone
 
 
        --
        -- Step 4, If they are setting this as the Primary or Billing Contact, we need to adjust the existings ones  
        --
 
        IF (@IsPrimaryContact =1)
        BEGIN
            -- Store the Old Primary
            DECLARE @OldPrimaryContactID INT = (SELECT PrimaryContactID FROM Account WHERE ID = @AccountID);
 
            -- Update the Customer Record
            UPDATE Account
            SET SeqID = SeqID + 1, PrimaryContactID = @ContactID
            WHERE ID = @AccountID;
 
            -- And se thte Old Contact ID so it is not primary
            UPDATE AccountContact
            SET SeqID = SeqID + 1, IsPrimaryContact = 0
            WHERE ID = @OldPrimaryContactID;        
        END;
 
 
        IF (@IsBillingContact =1)
        BEGIN
            -- Store the Old Primary
            DECLARE @OldBillingContactID INT = (SELECT AccountingContactID FROM Account WHERE ID = @AccountID);
 
            -- Update the Customer Record
            UPDATE Account
            SET SeqID = SeqID + 1, AccountingContactID = @ContactID
            WHERE ID = @AccountID;
 
            -- And se thte Old Contact ID so it is not primary
            UPDATE AccountContact
            SET SeqID = SeqID + 1, IsAccountingContact = 0
            WHERE ID = @OldPrimaryContactID;        
        END;
 
        --
        -- Step 5, Create a note in the JOURNAL record
        --
 
        INSERT INTO [Journal] ([ID], [StoreID], [ClassTypeID] ,[ModifiedByUser] ,[ModifiedByComputer] ,[ModifiedDate] ,[SeqID] ,[IsSystem] ,[IsActive] ,[EmployeeID],[JournalActivityType] ,[JournalActivityText] ,[Description] ,[Notes] ,[StartDateTime] ,[EndDateTime] ,[TotalTime] ,[ScheduledDateTime]  ,[CompletedByID] ,[CompletedDateTime] ,[IsSummary] ,[IsDetail] ,[SummaryID] ,[SummaryClassTypeID] ,[SummaryAmount] ,[DetailAmount] ,[StartGLGroupID]  ,[EndGLGroupID]  ,[AccountID] ,[AccountClassTypeID]  ,[ContactID]  ,[ContactClassTypeID]  ,[TransactionID] ,[TransactionClassTypeID]  ,[IsVoided]  ,[VoidedDateTime]  ,[VoidedEntryID] ,[VoidedEntryClassTypeID]  ,[VoidedReason]  ,[QueryStartDateTime] ,[QueryEndDateTime]  ,[ReminderDateTime]  ,[ReminderPrompt]  ,[PartID]  ,[ActivityType]  ,[ActivityTypeText]  ,[IsBillable] ,[BillableDateTime]  ,[UseActualTime]  ,[BillingNotes]  ,[BillingType]  ,[TotalBilledTime]  ,[RecurringActivityID]  ,[LinkID]  ,[LinkStoreID] ,[LinkClassTypeID] ,[SpecialCode] ,[DivisionID] ,[HasCalendarLinks] ,[TipRecipientID] ,[PartClassTypeID] ,[RecurringClassTypeID] ,[StationID] ,[StationClassTypeID] ,[CurrentState] ,[StageID] ,[StageClassTypeID]) 
 
        VALUES
            ( @JournalID     -- (<ID, int,>
            , -1     -- ,<StoreID, int,>
            , 20510     -- ,<ClassTypeID, int,>
            , 'SQLBridge'     -- ,<ModifiedByUser, nvarchar(25),>
            , @ComputerName     -- ,<ModifiedByComputer, nvarchar(25),>
            , @DT    -- ,<ModifiedDate, datetime,>
            ,  0    -- ,<SeqID, int,>
            ,  0    -- ,<IsSystem, bit,>
            ,  1    -- ,<IsActive, bit,>
           , 10  -- <EmployeeID, int,>
           , 6  -- <JournalActivityType, int,>
           , 'Company'  -- <JournalActivityText, nvarchar(25),>
           , 'Contact Created'  -- <Description, nvarchar(50),>
           , 'Contact Inserted by SQLBridge'  -- <Notes, nvarchar(max),>
           , @DT  -- <StartDateTime, datetime,>
           , @DT  -- <EndDateTime, datetime,>
           , NULL  -- <TotalTime, datetime,>
           , NULL  -- <ScheduledDateTime, datetime,>
           , 10  -- <CompletedByID, int,>
           , @DT  -- <CompletedDateTime, datetime,>
           , 1  -- <IsSummary, bit,>
           , 1  -- <IsDetail, bit,>
           , NULL  -- <SummaryID, int,>
           , NULL  -- <SummaryClassTypeID, int,>
           , NULL  -- <SummaryAmount, decimal(18,4),>
           , NULL  -- <DetailAmount, decimal(18,4),>
           , NULL  -- <StartGLGroupID, int,>
           , NULL  -- <EndGLGroupID, int,>
           , @AccountID  -- <AccountID, int,>
           , 2000  -- <AccountClassTypeID, int,>
           , @ContactID  -- <ContactID, int,>
           , 3000  -- <ContactClassTypeID, int,>
           , NULL  -- <TransactionID, int,>
           , NULL  -- <TransactionClassTypeID, int,>
           , 0  -- <IsVoided, bit,>
           , NULL  -- <VoidedDateTime, datetime,>
           , NULL  -- <VoidedEntryID, int,>
           , NULL  -- <VoidedEntryClassTypeID, int,>
           , NULL  -- <VoidedReason, nvarchar(max),>
           , @DT  -- <QueryStartDateTime, datetime,>
           , @DT  -- <QueryEndDateTime, datetime,>
           , NULL  -- <ReminderDateTime, datetime,>
           , 0  -- <ReminderPrompt, bit,>
           , NULL  -- <PartID, int,>
           , 0  -- <ActivityType, int,>
           , NULL  -- <ActivityTypeText, nvarchar(50),>
           , 0  -- <IsBillable, bit,>
           , NULL  -- <BillableDateTime, datetime,>
           , 0  -- <UseActualTime, bit,>
           , NULL  -- <BillingNotes, nvarchar(max),>
           , 0  -- <BillingType, int,>
           , 0  -- <TotalBilledTime, float,>
           , NULL  -- <RecurringActivityID, int,>
           , NULL  -- <LinkID, int,>
           , NULL  -- <LinkStoreID, int,>
           , NULL  -- <LinkClassTypeID, int,>
           , NULL  -- <SpecialCode, nvarchar(25),>
           , @DivisionID  -- <DivisionID, int,>
           , 0  -- <HasCalendarLinks, bit,>
           , NULL  -- <TipRecipientID, int,>
           , NULL  -- <PartClassTypeID, int,>
           , NULL  -- <RecurringClassTypeID, int,>
           , NULL  -- <StationID, int,>
           , NULL  -- <StationClassTypeID, int,>
           , NULL  -- <CurrentState, int,>
           , NULL  -- <StageID, int,>
           , NULL  -- <StageClassTypeID, int,>)
        );
 
 
        --
        -- Step 5, COMMIT the transaction to the database
        --
 
        COMMIT TRANSACTION
    END TRY
 
    --
    -- Step 6, Handle ERRORS by cancelling the transaction and re-raising the error 
    --
 
    BEGIN CATCH
        ROLLBACK TRANSACTION;
 
        INSERT INTO @Logs (ID, ClassTypeID, ParentID, IsError, Summary, Detail)
        VALUES(
            NULL, 3000, @AccountID, 1,
            'Contact '+@FirstName+' '+@LastName+'for Account.ID '+CONVERT(VARCHAR(12), @AccountID)+' Import FAILED due to Unhandled Exception.',
            'Exception: '+ERROR_MESSAGE()
        );
 
        RETURN;
    END CATCH;
 
    --
    -- Step 7, REFRESH the Order Record to let copies of Control konw there is a new company
    --
 
    EXEC dbo.csf_chapi_refresh @AccountId, 2000, 0;
 
     -- Now Return the new Contact
    INSERT INTO @Logs (ID, ClassTypeID, ParentID, IsError, Summary, Detail)
    VALUES(
        @ContactID, 3000, @AccountID, 0,
        'Contact '+@FirstName+' '+@LastName+'for Account.ID '+CONVERT(VARCHAR(12), @AccountID)+' Imported.',
        ''
    );
 
    SELECT * FROM @Logs;
    RETURN;
 
END

Source

Contributor: Cyrious Software
Date: 5/2016
Version: Control 5.7+

You could leave a comment if you were logged in.