create or replace PROCEDURE FCT_CONVERSAO_CLIENTE (
    P_NRPARCNEGOCIO NUMBER,
    P_OPERADOR VARCHAR2,
    P_NRORG NUMBER)
AS

/*NOVOCODIGO*/
V_CDCLIENTE CLIENTE.CDCLIENTE%TYPE;
V_PARCERIA VARCHAR2(20);
V_CDINTECLIE VARCHAR2(20);

/*VARIAVEIS*/
V_CLIENTE NUMBER;
V_TPENDERECO VARCHAR2(10);
V_TELEFONE VARCHAR2(30);
V_EMAIL VARCHAR2(100);
V_INSCRICAO VARCHAR2(5);
V_CONVERSAO VARCHAR2(1);
V_NMRAZSOCCLIE VARCHAR2(50);
V_NMFANTCLIE VARCHAR2(50);
V_COUNTPARC NUMBER;

BEGIN

    /*1 - VERIFICA O PARÿMETRO "Converter Prospect em Cliente no aceite da proposta?" */

    BEGIN
        SELECT IDCONVCLIENTE
          INTO V_CONVERSAO
          FROM FCT_PARAMETROGERAL
         WHERE NRORG = P_NRORG;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
           V_CONVERSAO := NULL;
    END;

    IF V_CONVERSAO = 'S' THEN
        /* 2 - VERIFICA SE EXISTE O CLIENTE */
        SELECT COUNT(*)
         INTO V_CLIENTE
         FROM CLIENTE
        WHERE NRPARCNEGOCIO = P_NRPARCNEGOCIO
          AND NRORG = NRORG;

        IF V_CLIENTE = 0 THEN
            /* 3 - SE NÿO EXISTIR, CRIA O CLIENTE E ATUALIZA O PARCEIRO*/

            FOR C_PARCEIRO IN ( SELECT NRPARCNEGOCIO, CDSEGMER, NMPRINCIPALPARC, NMSECUNDARIPARC, DTNASCIFUNDPARC, NRINSCRICAOPARC,
                                       CDTIPOPARCPRINCIPAL, CDTIPOINSCRICAO, IDPESSOAFISICA, IDINSTITUICAO, DSDEPARTAMENTO, IDIDIOMA,
                                       CDATIVCLI, NRSEQTPATIVCLI, IDPARCFUNDIDO, CDOPERRESPONSAVEL, IDATIVO, NRORG, DTINCLUSAO, DTULTATU,
                                       NRORGINCLUSAO, CDOPERINCLUSAO, NRORGULTATU, CDOPERULTATU
                                  FROM PARCNEGOCIO
                                 WHERE NRPARCNEGOCIO = P_NRPARCNEGOCIO
                                   AND NRORG = P_NRORG
            )LOOP

                /* - INSERE CLIENTE - */


                 SELECT CASE C_PARCEIRO.CDTIPOINSCRICAO
                           WHEN 'CNPJ' THEN 'J'
                           WHEN 'CPF' THEN 'F'
                           WHEN 'LIVRE' THEN 'I'
                           WHEN 'CODIGO' THEN 'O'
                           END AS INSCRICAO
                 INTO V_INSCRICAO
                     FROM DUAL;

                V_CDCLIENTE := V_INSCRICAO||C_PARCEIRO.NRINSCRICAOPARC;
                V_NMRAZSOCCLIE := SUBSTR(C_PARCEIRO.NMPRINCIPALPARC, 0, 49);
                V_NMFANTCLIE := SUBSTR(C_PARCEIRO.NMSECUNDARIPARC, 0, 49);


                INSERT INTO CLIENTE (CDCLIENTE, IDTPIJURCLIE, NRINSJURCLIE, NMRAZSOCCLIE, NMFANTCLIE, CDSEGMER, CDATIVCLI, NRPARCNEGOCIO,
                                     IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, DTULTATU, NRORGULTATU, CDOPERULTATU)
                             VALUES (V_CDCLIENTE, V_INSCRICAO, C_PARCEIRO.NRINSCRICAOPARC, V_NMRAZSOCCLIE,
                                     V_NMFANTCLIE, C_PARCEIRO.CDSEGMER, C_PARCEIRO.CDATIVCLI, C_PARCEIRO.NRPARCNEGOCIO,
                                     'S', P_NRORG, SYSDATE, P_NRORG, P_OPERADOR, NULL, NULL, NULL);


                /* - INSERE PARCERIA - */
                BEGIN
                SELECT COUNT(NRPARCERIA)
                INTO V_COUNTPARC
                FROM PARCERIA
                WHERE NRPARCNEGOCIO = C_PARCEIRO.NRPARCNEGOCIO
                  AND CDTIPOPARCEIRO = 'CLIENTE'
                  AND NRORG = P_NRORG;
                EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    V_COUNTPARC := 0;
                END;

                IF V_COUNTPARC = 0 THEN

                    NOVO_CODIGO_SC('PARCERIA', V_PARCERIA, 1, P_NRORG);

                    INSERT INTO PARCERIA (NRPARCERIA, NRPARCNEGOCIO, CDTIPOPARCEIRO, NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO,
                                 CDOPERINCLUSAO, DTULTATU, NRORGULTATU, CDOPERULTATU)
                         VALUES (V_PARCERIA, C_PARCEIRO.NRPARCNEGOCIO, 'CLIENTE', P_NRORG, 'S', SYSDATE, P_NRORG,
                                 P_OPERADOR, NULL, NULL, NULL);
                END IF;

                /* - ATUALIZA PARCERIA - */

                UPDATE PARCERIA
                   SET IDATIVO = 'N',
                       DTULTATU = SYSDATE,
                       NRORGULTATU = P_NRORG,
                       CDOPERULTATU = P_OPERADOR
                 WHERE CDTIPOPARCEIRO = 'PROSPECT'
                   AND NRPARCNEGOCIO = P_NRPARCNEGOCIO
                   AND NRORG = P_NRORG;


                /* - ATUALIZA PARCNEGOCIO - */

                UPDATE PARCNEGOCIO
                   SET CDTIPOPARCPRINCIPAL = 'CLIENTE',
                       DTULTATU = SYSDATE,
                       NRORGULTATU = P_NRORG,
                       CDOPERULTATU = P_OPERADOR
                 WHERE NRPARCNEGOCIO = P_NRPARCNEGOCIO
                   AND NRORG = P_NRORG;

                /* ENDEREÿO */

                V_TPENDERECO := NULL;

                FOR C_ENDERECO IN (SELECT NRENDERECOPARC, NRPARCNEGOCIO, CDTIPOENDERECO, CDPAIS, SGESTADO, CDMUNICIPIO, CDBAIRRO, NMBAIRROENDERECO,
                                          DSCOMPLEENDERECO, NRCEPENDERECO, DSENDERECO, NRORG, IDATIVO
                                     FROM ENDERECOPARC
                                    WHERE NRPARCNEGOCIO = P_NRPARCNEGOCIO
                                      AND NRORG = P_NRORG) LOOP

                    SELECT CASE C_ENDERECO.CDTIPOENDERECO
                           WHEN 'PRINCIPAL' THEN 'P'
                           WHEN 'ENTREGA' THEN 'T'
                           WHEN 'COBRANCA' THEN 'C'
                           WHEN 'EXTERIOR' THEN 'E'
                           WHEN 'EXPORTACAO' THEN 'X'
                           WHEN 'COMERCIAL' THEN 'M'
                           ELSE 'O'
                           END AS TIPOENDERECO
                     INTO V_TPENDERECO
                     FROM DUAL;

                    INSERT INTO ENDECLIE (CDCLIENTE, IDTPENDECLIE, CDPAIS, SGESTADO, CDMUNICIPIO, DSENDECLIE, DSCOMPENDCLI, CDBAIRRO, NMBAIRCLIE,
                                          NRCEPCLIE, NRENDERECOPARC, IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                    VALUES(V_CDCLIENTE, V_TPENDERECO, C_ENDERECO.CDPAIS, C_ENDERECO.SGESTADO, C_ENDERECO.CDMUNICIPIO, C_ENDERECO.DSENDERECO,
                           C_ENDERECO.DSCOMPLEENDERECO, C_ENDERECO.CDBAIRRO, C_ENDERECO.NMBAIRROENDERECO, C_ENDERECO.NRCEPENDERECO,
                           C_ENDERECO.NRENDERECOPARC, 'S', P_NRORG, SYSDATE, P_NRORG, P_OPERADOR);

                   /* -- RECEBE TELEFONE -- */

                    BEGIN
                        SELECT TELEFONE.CDCOMUNICAPARC
                          INTO V_TELEFONE
                          FROM COMUNICAPARC TELEFONE
                         WHERE TELEFONE.CDFORMACOMU = 01
                           AND TELEFONE.NRENDERECOPARC = C_ENDERECO.NRENDERECOPARC
                           AND TELEFONE.NRPARCNEGOCIO = P_NRPARCNEGOCIO
                           AND TELEFONE.NRORG = P_NRORG
                           AND ROWNUM = 1
                           ORDER BY DTINCLUSAO;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_TELEFONE := NULL;
                    END;


                   /* -- RECEBE EMAIL -- */

                    BEGIN
                        SELECT TELEFONE.CDCOMUNICAPARC
                          INTO V_EMAIL
                          FROM COMUNICAPARC TELEFONE
                         WHERE TELEFONE.CDFORMACOMU = 05
                           AND TELEFONE.NRENDERECOPARC = C_ENDERECO.NRENDERECOPARC
                           AND TELEFONE.NRPARCNEGOCIO = P_NRPARCNEGOCIO
                           AND TELEFONE.NRORG = P_NRORG
                           AND ROWNUM = 1
                           ORDER BY DTINCLUSAO;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_EMAIL := NULL;
                    END;

                   /* - ATUALIZA FORMA DE COMUNICAÿÿO - */

                    UPDATE ENDECLIE
                       SET NRTELECLIE = V_TELEFONE,
                           DSEMAILCLIE = V_EMAIL
                     WHERE CDCLIENTE = V_CDCLIENTE
                       AND IDTPENDECLIE = V_TPENDERECO
                       AND NRENDERECOPARC = C_ENDERECO.NRENDERECOPARC
                       AND NRORG = P_NRORG;

                END LOOP;

                /* INTERLOCUTOR*/
                FOR C_INTERLOC IN (SELECT RELACIONAPARC.NRPARCNEGOCIO, RELACIONAPARC.NRPARCNEGRELAC, RELACIONAPARC.NRRELACIONAPARC, PARCNEGOCIO.NMPRINCIPALPARC,
                                          ENDERECOPARC.NRENDERECOPARC, ENDERECOPARC.CDPAIS, ENDERECOPARC.SGESTADO, ENDERECOPARC.CDMUNICIPIO, PARCNEGOCIO.DTNASCIFUNDPARC,
                                          ENDERECOPARC.DSENDERECO, ENDERECOPARC.NMBAIRROENDERECO, ENDERECOPARC.NRCEPENDERECO
                                     FROM PARCNEGOCIO
                                     INNER JOIN RELACIONAPARC
                                        ON RELACIONAPARC.NRTIPORELACIONA = 25
                                       AND PARCNEGOCIO.NRPARCNEGOCIO = RELACIONAPARC.NRPARCNEGRELAC
                                       AND PARCNEGOCIO.NRORG = RELACIONAPARC.NRORG
                                      LEFT JOIN ENDERECOPARC
                                        ON PARCNEGOCIO.NRPARCNEGOCIO = ENDERECOPARC.NRPARCNEGOCIO
                                       AND PARCNEGOCIO.NRORG = ENDERECOPARC.NRORG
                                     WHERE RELACIONAPARC.NRPARCNEGOCIO = P_NRPARCNEGOCIO
                                       AND RELACIONAPARC.NRORG = P_NRORG) LOOP

                    NOVO_CODIGO_SC('INTECLIE'||V_CDCLIENTE, V_CDINTECLIE, 1, P_NRORG);
                    V_CDINTECLIE := TO_CHAR(TO_NUMBER(V_CDINTECLIE));

                    INSERT INTO INTECLIE (CDCLIENTE, CDINTECLIE, NMINTECLIE, IDTPINTECLIE, NRRELACIONAPARC, CDPAIS, SGESTADO, CDMUNICIPIO,
                                          DTNASCINCLIE, IDENDEINCLIE, DSENDEINCLIE, NMBAIRINCLIE, NRCEPINCLIE, IDATIVO, NRORG,
                                          DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                    VALUES (V_CDCLIENTE, V_CDINTECLIE, C_INTERLOC.NMPRINCIPALPARC, 'F', C_INTERLOC.NRRELACIONAPARC, C_INTERLOC.CDPAIS,
                            C_INTERLOC.SGESTADO, C_INTERLOC.CDMUNICIPIO, C_INTERLOC.DTNASCIFUNDPARC, 'C', C_INTERLOC.DSENDERECO,
                            C_INTERLOC.NMBAIRROENDERECO, C_INTERLOC.NRCEPENDERECO, 'S', P_NRORG, SYSDATE, P_NRORG, P_OPERADOR);

                END LOOP;
            END LOOP;

        END IF;
    END IF;
END;