/*
    **********************************************************************************
    *                                                                                *
    * @package URBEM CNM - Soluções em Gestão Pública                                *
    * @copyright (c) 2013 Confederação Nacional de Municípos                         *
    * @author Confederação Nacional de Municípios                                    *
    *                                                                                *
    * O URBEM CNM é um software livre; você pode redistribuí-lo e/ou modificá-lo sob *
    * os  termos  da Licença Pública Geral GNU conforme  publicada  pela Fundação do *
    * Software Livre (FSF - Free Software Foundation); na versão 2 da Licença.       *
    *                                                                                *
    * Este  programa  é  distribuído  na  expectativa  de  que  seja  útil,   porém, *
    * SEM NENHUMA GARANTIA; nem mesmo a garantia implícita  de  COMERCIABILIDADE  OU *
    * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU *
    * para mais detalhes.                                                            *
    *                                                                                *
    * Você deve ter recebido uma cópia da Licença Pública Geral do GNU "LICENCA.txt" *
    * com  este  programa; se não, escreva para  a  Free  Software Foundation  Inc., *
    * no endereço 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.       *
    *                                                                                *
    **********************************************************************************
*/
/*
* Script de DDL e DML
*
* URBEM Soluções de Gestão Pública Ltda
* www.urbem.cnm.org.br
*
* $Id:$
*
* Versão 1.98.4
*/

-----------------------------------------------------------
-- CORREÇÂO EM TABELAS RENOMEADAS DOS MODULOS != PREFEITURA
-----------------------------------------------------------

CREATE FUNCTION manutencao() RETURNS VOID AS $$
DECLARE
    inCountEnt      INTEGER;
    inCountCol      INTEGER;
    stTesteColuna   VARCHAR;
    stDump          VARCHAR;
    stSqlEnt        VARCHAR;
    reRecord        RECORD;
BEGIN

    SELECT COUNT(DISTINCT cod_entidade)
      INTO inCountEnt
      FROM administracao.entidade_rh
     WHERE cod_entidade <> ( SELECT CAST(valor as integer)
                               FROM administracao.configuracao
                              WHERE exercicio = (
                                                   SELECT MAX(exercicio)
                                                     FROM administracao.configuracao
                                                    WHERE parametro = 'migra_orgao'
                                                )
                                AND parametro = 'cod_entidade_prefeitura'
                           )
         ;

    stSqlEnt := '  SELECT DISTINCT cod_entidade
                     FROM administracao.entidade_rh
                    WHERE cod_entidade <> ( SELECT CAST(valor as integer)
                                              FROM administracao.configuracao
                                             WHERE exercicio = (
                                                                  SELECT MAX(exercicio)
                                                                    FROM administracao.configuracao
                                                                   WHERE parametro = \'migra_orgao\'
                                                               )
                                               AND parametro = \'cod_entidade_prefeitura\'
                                          )
                        ;
                ';

    FOR reRecord IN EXECUTE stSqlEnt LOOP

        stTesteColuna := 'concurso_' || reRecord.cod_entidade;
        SELECT tablename
          INTO stDump
          FROM pg_tables
         WHERE schemaname = stTesteColuna
           AND tablename  = 'edital'
             ;

        IF NOT FOUND THEN 
            EXECUTE 'ALTER TABLE concurso_'  || reRecord.cod_entidade ||'.concurso   RENAME TO edital;';
        END IF;

        stTesteColuna := 'ponto_' || reRecord.cod_entidade;
        SELECT tablename
          INTO stDump
          FROM pg_tables
         WHERE schemaname = stTesteColuna
           AND tablename  = 'calendario_ponto'
             ;

        IF NOT FOUND THEN 
            EXECUTE 'ALTER TABLE ponto_'     || reRecord.cod_entidade ||'.calendario RENAME TO calendario_ponto;';
        END IF;

        stTesteColuna := 'calendario_' || reRecord.cod_entidade;
        SELECT tablename
          INTO stDump
          FROM pg_tables
         WHERE schemaname = stTesteColuna
           AND tablename  = 'calendario_cadastro'
             ;

        IF NOT FOUND THEN 
            EXECUTE 'ALTER TABLE calendario_'|| reRecord.cod_entidade ||'.calendario RENAME TO calendario_cadastro;';
        END IF;

        stTesteColuna := 'beneficio_' || reRecord.cod_entidade;
        SELECT tablename
          INTO stDump
          FROM pg_tables
         WHERE schemaname = stTesteColuna
           AND tablename  = 'beneficio_cadastro'
             ;

        IF NOT FOUND THEN 
            EXECUTE 'ALTER TABLE beneficio_' || reRecord.cod_entidade ||'.beneficio  RENAME TO beneficio_cadastro;';
        END IF;


        SELECT COUNT(*)
          INTO inCountCol
          FROM pg_attribute
         WHERE attname = 'ferias_proporcionais'
             ;

        IF inCountCol <= inCountEnt THEN

            EXECUTE 'ALTER TABLE pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias ADD   COLUMN ferias_proporcionais INTEGER;';
            EXECUTE 'UPDATE      pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias SET          ferias_proporcionais = 12;';
            EXECUTE 'ALTER TABLE pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias ALTER COLUMN ferias_proporcionais SET NOT NULL;';
            EXECUTE 'ALTER TABLE pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias ALTER COLUMN dias_gozo TYPE NUMERIC(3,1);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES ( 6,  0,  5, 27.5, 11);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES ( 7,  6, 14, 22.0, 11);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES ( 8, 15, 23, 16.5, 11);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES ( 9, 24, 32, 11.0, 11);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (10,  0,  5, 25.0, 10);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (11,  6, 14, 20.0, 10);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (12, 15, 23, 15.0, 10);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (13, 24, 32, 10.0, 10);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (14,  0,  5, 22.5,  9);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (15,  6, 14, 18.0,  9);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (16, 15, 23, 13.5,  9);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (17, 24, 32,  9.0,  9);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (18,  0,  5, 20.0,  8);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (19,  6, 14, 16.0,  8);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (20, 15, 23, 12.0,  8);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (21, 24, 32,  8.0,  8);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (22,  0,  5, 17.5,  7);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (23,  6, 14, 14.0,  7);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (24, 15, 23, 10.5,  7);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (25, 24, 32,  7.0,  7);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (26,  0,  5, 15.0,  6);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (27,  6, 14, 12.0,  6);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (28, 15, 23,  9.0,  6);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (29, 24, 32,  6.0,  6);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (30,  0,  5, 12.5,  5);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (31,  6, 14, 10.0,  5);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (32, 15, 23,  7.5,  5);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (33, 24, 32,  5.0,  5);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (34,  0,  5, 10.0,  4);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (35,  6, 14,  8.0,  4);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (36, 15, 23,  6.0,  4);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (37, 24, 32,  4.0,  4);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (38,  0,  5,  7.5,  3);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (39,  6, 14,  6.0,  3);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (40, 15, 23,  4.5,  3);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (41, 24, 32,  3.0,  3);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (42,  0,  5,  5.0,  2);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (43,  6, 14,  4.0,  2);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (44, 15, 23,  3.0,  2);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (45, 24, 32,  2.0,  2);';
    
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (46,  0,  5,  2.5,  1);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (47,  6, 14,  2.0,  1);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (48, 15, 23,  1.5,  1);';
            EXECUTE 'INSERT INTO pessoal_'|| reRecord.cod_entidade ||'.configuracao_ferias VALUES (49, 24, 32,  1.0,  1);';

        END IF;

    END LOOP;

END;
$$ LANGUAGE 'plpgsql';

SELECT        manutencao();
DROP FUNCTION manutencao();

----------------
-- Ticket #16289
----------------

INSERT
  INTO administracao.acao
     ( cod_acao
     , cod_funcionalidade
     , nom_arquivo
     , parametro
     , ordem
     , complemento_acao
     , nom_acao )
VALUES
     ( 2777
     , 354
     , 'FMManterExportacaoHSBC.php'
     , 'incluir'
     , 28
     , ''
     , 'Incluir Exportação HSBC'
     );
INSERT
  INTO administracao.acao
     ( cod_acao
     , cod_funcionalidade
     , nom_arquivo
     , parametro
     , ordem
     , complemento_acao
     , nom_acao )
VALUES
     ( 2778
     , 354
     , 'LSManterExportacaoHSBC.php'
     , 'alterar'
     , 29
     , ''
     , 'Alterar Exportação HSBC'
     );
INSERT
  INTO administracao.acao
     ( cod_acao
     , cod_funcionalidade
     , nom_arquivo
     , parametro
     , ordem
     , complemento_acao
     , nom_acao )
VALUES
     ( 2779
     , 354
     , 'LSManterExportacaoHSBC.php'
     , 'excluir'
     , 30
     , ''
     , 'Excluir Exportação HSBC'
     );

SELECT atualizarbanco('
CREATE TABLE ima.configuracao_convenio_hsbc(
    cod_convenio        INTEGER     NOT NULL,
    cod_banco           INTEGER     NOT NULL,
    cod_convenio_banco  VARCHAR(20) NOT NULL,
    CONSTRAINT [REDACTED]   PRIMARY KEY (cod_convenio, cod_banco),
    CONSTRAINT fk_configuracao_convenio_hsbc_1  FOREIGN KEY               (cod_banco)
                                                REFERENCES monetario.banco(cod_banco)
);
');

SELECT atualizarbanco('
GRANT ALL ON ima.configuracao_convenio_hsbc TO GROUP urbem;
');

SELECT atualizarbanco('
CREATE TABLE ima.configuracao_hsbc_conta(
    cod_convenio        INTEGER     NOT NULL,
    cod_banco           INTEGER     NOT NULL,
    cod_agencia         INTEGER     NOT NULL,
    cod_conta_corrente  INTEGER     NOT NULL,
    timestamp           TIMESTAMP   NOT NULL DEFAULT (\'now\'::text)::timestamp(3) WITH TIME ZONE,
    descricao           VARCHAR(60) NOT NULL,
    vigencia            DATE        NOT NULL,
    CONSTRAINT [REDACTED]      PRIMARY KEY                               (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp),
    CONSTRAINT fk_configuracao_hsbc_conta_1     FOREIGN KEY                               (cod_convenio, cod_banco)
                                                REFERENCES ima.configuracao_convenio_hsbc (cod_convenio, cod_banco),
    CONSTRAINT fk_configuracao_hsbc_conta_2     FOREIGN KEY                               (cod_banco, cod_agencia, cod_conta_corrente)
                                                REFERENCES monetario.conta_corrente       (cod_banco, cod_agencia, cod_conta_corrente)
);
');

SELECT atualizarbanco('
GRANT ALL ON ima.configuracao_hsbc_conta TO GROUP urbem;
');

SELECT atualizarbanco('
CREATE TABLE ima.configuracao_hsbc_orgao(
    cod_convenio        INTEGER     NOT NULL,
    cod_banco           INTEGER     NOT NULL,
    cod_agencia         INTEGER     NOT NULL,
    cod_conta_corrente  INTEGER     NOT NULL,
    timestamp           TIMESTAMP   NOT NULL,
    cod_orgao           INTEGER     NOT NULL,
    CONSTRAINT [REDACTED]      PRIMARY KEY                               (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp, cod_orgao),
    CONSTRAINT fk_configuracao_hsbc_orgao_1     FOREIGN KEY                               (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp)
                                                REFERENCES ima.configuracao_hsbc_conta    (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp),
    CONSTRAINT fk_configuracao_hsbc_orgao_2     FOREIGN KEY                               (cod_orgao)
                                                REFERENCES organograma.orgao              (cod_orgao)
);
');

SELECT atualizarbanco('
GRANT ALL ON ima.configuracao_hsbc_orgao TO GROUP urbem;
');

SELECT atualizarbanco('
CREATE TABLE ima.configuracao_hsbc_local(
    cod_convenio        INTEGER     NOT NULL,
    cod_banco           INTEGER     NOT NULL,
    cod_agencia         INTEGER     NOT NULL,
    cod_conta_corrente  INTEGER     NOT NULL,
    timestamp           TIMESTAMP   NOT NULL,
    cod_local           INTEGER     NOT NULL,
    CONSTRAINT [REDACTED]      PRIMARY KEY                               (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp, cod_local),
    CONSTRAINT fk_configuracao_hsbc_local_1     FOREIGN KEY                               (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp)
                                                REFERENCES ima.configuracao_hsbc_conta    (cod_convenio, cod_banco, cod_agencia, cod_conta_corrente, timestamp),
    CONSTRAINT fk_configuracao_hsbc_local_2     FOREIGN KEY                               (cod_local)
                                                REFERENCES organograma.local              (cod_local)
);
');

SELECT atualizarbanco('
GRANT ALL ON ima.configuracao_hsbc_local TO GROUP urbem;
');

----------------
-- Ticket #16290
----------------

INSERT
  INTO administracao.acao
     ( cod_acao
     , cod_funcionalidade
     , nom_arquivo
     , parametro
     , ordem
     , complemento_acao
     , nom_acao )
VALUES
     ( 2781
     , 353
     , 'FLExportacaoBancoHSBC.php'
     , ''
     , 8
     , ''
     , 'Banco HSBC'
     );

INSERT
  INTO administracao.configuracao
     ( exercicio
     , cod_modulo
     , parametro
     , valor
     )
VALUES
     ( to_char(now(),'YYYY')
     , 40
     , 'num_sequencial_arquivo_hsbc'
     , '1'
     );
INSERT
  INTO administracao.configuracao
     ( exercicio
     , cod_modulo
     , parametro
     , valor
     )
VALUES
     ( to_char(now(),'YYYY')
     , 40
     , 'dt_num_sequencial_arquivo_hsbc'
     , to_char(now(),'YYYY-MM-DD')
     );

