/*
drop procedure if exists AddColumnUnlessExists;
DELIMITER $$

CREATE PROCEDURE AddColumnUnlessExists(IN tabela tinytext, IN coluna tinytext, IN tipo tinytext)
BEGIN
	set @consulta = CONCAT("SELECT * FROM information_schema.COLUMNS
		WHERE column_name='",coluna,"' and table_name='",tabela,"' and table_schema='",DATABASE(),"'");

    IF NOT EXISTS (
		select @consulta
		)
	THEN
		set @ddl=CONCAT('ALTER TABLE ',DATABASE(),'.',tabela,
			' ADD COLUMN ',coluna,' ',tipo);
		prepare stmt from @ddl;
		execute stmt;
	END IF;
END$$
DELIMITER ;
*/

/* Atualização para uso do Crud de Regiões (usado no cadastro de vendedores) */
Alter table erpc_regiao modify column id_municipio int;


/* Inserts e Updates relacionados a funcionalidade de Vendedores */
insert into erpc_operadoras_telefonia (id, ds_operadora, st_ativo) values (1, 'Vivo', 1)
	on duplicate key update ds_operadora = 'Vivo',
					 st_ativo = 1;
insert into erpc_regiao (id, ds_regiao, id_municipio, st_ativo) values (1, 'Alto Tietê', '3612', 1)
	on duplicate key update ds_regiao = 'Alto Tietê',
							id_municipio = '3612',
							st_ativo = 1;
insert into erpc_financeiro_bancos (id, st_ativo) values (1, 0)
	on duplicate key update st_ativo = 0;
insert into erpc_vendedores (id, ds_nome, id_operadora, id_usuario_vendedor, id_supervisor, id_gerente, id_banco, id_regiao, id_usuario, st_ativo, id_municipio)
	values (1, 'Não informado', 1, 1, 1, 1, 1, 1, 1, 0, '3612')
	on duplicate key update  ds_nome = 'Não informado'
							,id_operadora = 1
							,id_usuario_vendedor = 1
							,id_supervisor = 1
							,id_gerente = 1
							,id_banco = 1
							,id_regiao = 1
							,id_usuario = 1
							,st_ativo = 0
							,id_municipio = 3612;


/*  ALTER TABLE erpc_vendedores add column ds_foto varchar(255) DEFAULT NULL; */
CALL AddColumnUnlessExists('erpc_vendedores', 'ds_foto', ' varchar(255) DEFAULT NULL'); 

/* ALTER table para solucionar problema de cálculo na venda por causa de casas decimais	as quantidades estavam com decimal (10,2) o que gerava erros ao trabalhar com quantidades quebradas. */
alter table erpc_pedidos_itens modify column nr_quantidade decimal(10,4);
alter table erpc_pedidos_itens_liberados modify column nr_quantidade decimal(10,4);


CREATE TABLE if not exists instalacao_log (
	 id	int(11) auto_increment primary key
	,ds_passo varchar(255)
	,ts_passo timestamp
);


drop table if exists erpc_financeiro_metas;
CREATE Table erpc_financeiro_metas (
     id int(11) AUTO_INCREMENT PRIMARY KEY
    ,id_unidade int(11)
    ,dt_meta date
    ,vl_meta_receita decimal(14,2)
    ,vl_meta_despesa decimal(14,2)
    ,vl_meta_lucro_prejuizo decimal(14,2)
    ,vl_meta_lucratividade decimal(5,2),
    st_ativo boolean
);

Create table if not exists erpc_vendedores_metas (
	 id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
    ,id_vendedor int(11)
    ,dt_meta date
    ,vl_meta decimal(12,2)
    ,dt_modificacao timestamp
    ,id_usuario int(11)
    ,st_ativo boolean
    ,FOREIGN KEY (id_vendedor) REFERENCES erpc_vendedores(id)
);



/* Criação do Novo Status de Pedidos 'RECIBO EMITIDO' */
insert into erpc_dom_status_pedidos (id, ds_status, ds_path, fl_fatura, st_ativo) values (8, 'Recibo Emitido', 'img/icones/bullet_dark_green.png', 1, 1)
	on duplicate key update  ds_status = 'Recibo Emitido'
							,ds_path = 'img/icones/bullet_dark_green.png'
							,fl_fatura = 1
							,st_ativo = 1; 

/* Atualização da Condição de Pagamento para Lançamento automático de títulos */
update erpc_condicao_pagamento set ds_estrutura = '00' where id = 1;

/* Apenas renomeando nome da coluna. Necessário para funcionamento das funcionalidades do financeiro */
alter table erpc_financeiro_lancamentos change id_documento_saida id_pedido_venda_liberado int(11);


/* Atualização da Procedure para exibir o Endereço+Número do Endereço (campo novo) ao invés de apenas Endereço */
DROP PROCEDURE IF EXISTS pr_recibo_cfe_cliente;
DELIMITER $$

CREATE PROCEDURE `pr_recibo_cfe_cliente`(IN _ID_PED INT)
BEGIN
	/*CORPO DO PROCEDIMENTO*/
select	 cl.ds_cnpj_cpf, 
		 cl.ds_nome, 
         cl.ds_tipo_documento,
		 CASE WHEN cl.ds_numero IS NULL or cl.ds_numero = ''
			THEN cl.ds_endereco
			ELSE CONCAT(cl.ds_endereco, ', ', cl.ds_numero)
	     END,
         cl.ds_bairro,
		 cl.ds_contato
into @documento, @nome, @tipo, @end, @bairro, @contato
  from	erpc_pedidos_venda_liberados  pv
  join	erpc_clientes cl
  	on  pv.id_cliente = cl.id
where   pv.id = _ID_PED;

if @documento='' then
	select @nome  as xNome, @end as xEnd, @bairro as xBairro, @contato as xContato;
elseif @tipo='J' then
	select @documento as CNPJ, @nome as xNome, @end as xEnd, @bairro as xBairro, @contato as xContato;
elseif @tipo='F' then 
	select @documento as CPF, @nome as xNome, @end as xEnd, @bairro as xBairro, @contato as xContato;
end if;    

END$$
DELIMITER ;


/* Correção - Quando havia pontuações no CPF ou CNPJ, não era possível emitir CFe embora fosse possível emitir NFe Apenas removi os caracteres com Replace */
drop procedure if exists pr_nfccode_cfe_cliente;
DELIMITER $$

Create Procedure pr_nfccode_cfe_cliente(IN _ID_DOC INT)
BEGIN
	/*CORPO DO PROCEDIMENTO*/
select	 case when ISNULL(cl.ds_cnpj_cpf) 
			then '' 
			else REPLACE(REPLACE( REPLACE(cl.ds_cnpj_cpf, '.', ''),'-',''),'/','') end , 
		 IF(IFNULL(cl.ds_nome,'')='', 'NAO INFORMADO', ds_nome),
         cl.ds_tipo_documento
into @documento, @nome, @tipo
  from	erpc_pedidos_documentos_saida dp
  join	erpc_pedidos_venda_liberados  pv
    on 	dp.id_pedido_liberados = pv.id
  join	erpc_clientes cl
  	ON pv.id_cliente = cl.id
where   dp.id_documento_saida = _ID_DOC;

if @documento='' then
	select @nome  as xNome;
elseif @tipo='J' then
	select @documento as CNPJ, @nome as xNome;
elseif @tipo='F' then 
	select @documento as CPF, @nome as xNome;
end if;    

END$$
DELIMITER ;



/* Pacote de Atualização do Edival (NFe regime Normal) */

DROP VIEW if exists vw_erpc_nfecode_geraxml_emitente;
DROP VIEW if exists vw_erpc_nfecode_geraxml_cliente;

Create or replace View vw_erpc_nfecode_geraxml_emitente AS
Select  Distinct
        ds.id AS nr_documento,
        ds.ds_numnf AS nr_nota,
        35 AS cUF,
        m.ds_codigo_ibge AS cMunFG,
        u.ds_endereco AS xLgr,
        u.ds_numero AS nro,
        u.ds_complemento AS xCpl,
        u.ds_bairro AS xBairro,
        m.ds_codigo_ibge AS cMun,
        m.ds_municipio AS xMun,
        m.ds_uf AS UF,
        u.ds_cep AS CEP,
        1058 AS cPais,
        p.ds_pais AS xPais,
        NULL AS fone,
        u.ds_logo AS logo,
        un.id_regime AS cRegTrib
, un.ds_cnpj as cnpj
, un.ds_razao_social as razaosocial
, un.ds_fantasia as nomefantasia
, un.ds_ie   as ie
, un.ds_iest as iest
, un.ds_im   as im
, un.ds_cnae_fiscal as cnae
, Case When un.id_regime=4 then 1 else 3 End as regime /* CRT 1 Simples Nacional Else 3 Normal */
    FROM
        erpc_documentos_saida ds
        JOIN erpc_unidades un ON ds.id_unidade = un.id
        JOIN erpc_pedidos_documentos_saida dp ON ds.id = dp.id_documento_saida
        JOIN erpc_pedidos_venda_liberados vl ON dp.id_pedido_liberados = vl.id
        JOIN erpc_pedidos_itens_liberados il ON vl.id = il.id_pedido_venda_liberado
        JOIN erpc_unidades u ON vl.id_unidade = u.id
        JOIN erpc_municipios m ON u.id_municipio = m.id
        JOIN erpc_estados e ON m.ds_uf = e.ds_uf
        JOIN erpc_paises p ON e.id_pais = p.id
;

Create or replace View vw_erpc_nfecode_geraxml_cliente AS
    SELECT DISTINCT
        ds.id AS nr_documento,
        ds.ds_numnf AS nr_nota,
        35 AS cUF,
        m.ds_codigo_ibge AS cMunFG,
        cl.ds_endereco AS xLgr,
        IFNULL(cl.ds_numero, '') AS nro,
        '' AS xCpl,
        cl.ds_bairro AS xBairro,
        m.ds_codigo_ibge AS cMun,
        m.ds_municipio AS xMun,
        m.ds_uf AS UF,
        cl.ds_cep AS CEP,
        1058 AS cPais,
        'Brasil' AS xPais,
        (CASE
            WHEN (cl.ds_tipo_documento = 'J') THEN cl.ds_cnpj_cpf
            ELSE ''
        END) AS CNPJ,
        (CASE
            WHEN (cl.ds_tipo_documento = 'F') THEN cl.ds_cnpj_cpf
            ELSE ''
        END) AS CPF,
        cl.ds_nome AS xNome,
        '9' AS indIEDest,
        cl.ds_ie AS IE,
        cl.ds_suframa AS ISUF,
        '' AS idEstrangeiro,
        cl.ds_im AS IM,
        cl.ds_email_nfe AS email,
        (SELECT 
                CONCAT(ct.ds_ddi, ct.ds_telefone)
            FROM
                erpc_clientes_telefones ct
            WHERE
                (ct.id_cliente = cl.id)
            LIMIT 1) AS fone
    FROM
        (((((erpc_documentos_saida ds
        JOIN erpc_pedidos_documentos_saida dp ON ((ds.id = dp.id_documento_saida)))
        JOIN erpc_pedidos_venda_liberados pv ON ((dp.id_pedido_liberados = pv.id)))
        JOIN erpc_pedidos_itens_liberados pp ON ((pv.id = pp.id_pedido_venda_liberado)))
        JOIN erpc_clientes cl ON ((pv.id_cliente = cl.id)))
        JOIN erpc_municipios m ON ((cl.id_municipio = m.id)))
        ;

insert into erpc_dom_sit_trib_cof(st_ativo, cd_sit_trib_cof, ds_sit_trib_cof)values(1, '99', 'OUTRAS OPERAÇÕES')
	on duplicate key update  st_ativo = 1
							,cd_sit_trib_cof = '99'
							,ds_sit_trib_cof = 'OUTRAS OPERAÇÕES';
insert into erpc_dom_sit_trib_pis(st_ativo, cd_sit_trib_pis, ds_sit_trib_pis)values(1, '99', 'OUTRAS OPERAÇÕES')
	on duplicate key update  st_ativo = 1
							,cd_sit_trib_pis = '99'
							,ds_sit_trib_pis = 'OUTRAS OPERAÇÕES';


/* Inserts das Novas Funcionalidades e exibição nos menus */

set foreign_key_checks = 0;
truncate table erpc_funcionalidades;
truncate table erpc_grupo_funcionalidade;
truncate table erpc_modulos_funcionalidades;
truncate table erpc_modulo_grupo;

INSERT INTO `erpc_funcionalidades` (`id`, `id_tipo_funcionalidade`, `ds_funcionalidade`, `ds_path_video`, `ds_path_funcionalidade`, `ds_label`, `st_menu`, `id_pai`, `st_ativo`) VALUES
(1, 1, 'Administração', NULL, NULL, '', 0, NULL, 0),
(2, 1, 'Faturamento', NULL, NULL, '', 0, NULL, 0),
(3, 1, 'Usuários', NULL, 'erpc_usuarios_list.php', NULL, 1, 1, 1),
(4, 1, 'Unidades', NULL, 'erpc_unidades_list.php', NULL, 1, 1, 1),
(5, 1, 'Clientes', NULL, 'erpc_clientes_list.php', NULL, 1, 1, 1),
(6, 1, 'Tipos Movimentação', NULL, 'erpc_tipos_movimentacao_list.php', NULL, 1, 1, 1),
(7, 1, 'Produtos', NULL, 'erpc_produtos_filter.php', 'Produtos', 1, 2, 1),
(8, 1, 'Cadastrar Pedido', NULL, 'erpc_pedidos_venda_add.php', NULL, 1, 2, 1),
(9, 1, 'Liberar Pedidos', NULL, 'erpc_pedidos_filter.php', NULL, 1, 2, 1),
(10, 1, 'Faturar Pedidos', '', 'erpc_faturar_pedidos_filter.php', '', 1, 2, 1),
(11, 1, 'Venda Rápida', NULL, 'erpc_venda_rapida_add.php', NULL, 1, 2, 1),
(12, 1, 'Fornecedores', NULL, 'erpc_fornecedores_list.php', NULL, 1, 2, 1),
(13, 1, 'Financeiro', '', '', 'FINANCEIRO', 1, 13, 1),
(14, 1, 'Plano Financeiro de Contas', '', 'erpc_financeiro_plano_contas_list.php', 'Plano Fin. Contas', 1, 13, 1),
(15, 1, 'Bancos', '', 'erpc_financeiro_bancos_list.php', 'Bancos', 1, 13, 1),
(16, 1, 'Ordem de Serviço', '', 'erpc_ordem_servico_list.php', 'Ordem de Serviço', 1, 0, 1),
(17, 1, 'Atendimentos', '', 'erpc_atendimentos_tipos_list.php', 'Atendimentos', 1, 0, 1),
(18, 1, 'Contas a Pagar', '', 'erpc_financeiro_contas_pagar_filter.php', 'Contas a Pagar', 1, 13, 1),
(19, 1, 'Contas a Receber', '', 'erpc_financeiro_contas_receber_filter.php', 'Contas a Receber', 1, 13, 1),
(20, 1, 'Tipos de Conta', '', 'erpc_financeiro_tipos_conta_list.php', 'Tipos de Conta', 1, 13, 1),
(21, 1, 'Contas Bancárias', '', 'erpc_financeiro_contas_bancarias_list.php', 'Contas Bancárias', 1, 13, 1),
(22, 1, 'Relatórios', '', '', 'Relatórios', 1, 22, 1),
(23, 1, 'Sintético de Vendas', '', 'erpc_report_filter.php?id=2', 'Sintético de Vendas', 1, 22, 1),
(24, 1, 'Exportar XML', '', 'erpc_report_venda_export_xml_filter.php', 'Exportar XML', 1, 22, 1),
(25, 1, 'Analítico de Vendas', '', 'erpc_report_filter.php?id=1', '', 1, 22, 1),
(26, 1, 'Grupos', NULL, 'erpc_usuarios_grupo_list.php', NULL, 1, 1, 1),
(27, 1, 'Grupos Funcionalidades', NULL, 'erpc_grupo_funcionalidade_edit.php', NULL, 1, 1, 1),
(28, 1, 'Modulos Funcionalidades', NULL, 'erpc_modulo_funcionalidade_edit.php', NULL, 1, 1, 1),
(29, 1, 'Funcionalidades', '', 'erpc_funcionalidades_list.php', '', 1, 0, 1),
(30, 1, 'PDV', '', 'javascript:window.open(\"erpc_codepdv.php\", \"ERP Code\", \"fullscreen=yes,titlebar=no,toolbar=no,menubar=no,location=no,top=0,left=0,width=1366,height=768\");', '', 1, 0, 1),
(31, 1, 'CFOP', '', 'erpc_cfop_list.php', '', 1, 0, 1),
(33, 1, 'Usuarios/Unidades', '', 'erpc_usuarios_unidades_list.php', '', 0, 0, 1),
(34, 1, 'Modulo Grupo', '', 'erpc_modulo_grupo_edit.php', '', 1, 0, 1),
(35, 1, 'Análise de Contas', NULL, 'erpc_financeiro_analise_contas_filter.php', 'Análise de Contas', 1, 22, 1),
(36, 1, 'Dashboard Financeiro', NULL, 'erpc_financeiro_dashboard.php', 'Dashboard Financeiro', 1, 22, 1),
(37, 1, 'Fluxo de Caixa', NULL, 'erpc_financeiro_fluxo_caixa_filter.php', '', 1, 22, 1),
(38, 1, 'Fluxo de Caixa Diário', NULL, 'erpc_financeiro_fluxo_diario_filter.php', '', 1, 22, 1),
(39, 1, 'Dashboard', NULL, 'erpc_dashboard.php', 'Dashboard', 1, 22, 1),
(40, 1, 'Vendedores', NULL, 'erpc_vendedores_list.php', 'Vendedores', 1, 0, 1),
(41, 1, 'Metas Vendedores', NULL, 'erpc_vendedores_metas_filter.php', 'Metas Vendedores', 1, 0, 1),
(42, 1, 'Metas Financeiras', NULL, 'erpc_financeiro_metas_filter.php', 'Metas Financeiras', 1, 0, 1);


INSERT INTO `erpc_grupo_funcionalidade` (`id_grupo`, `id_funcionalidade`, `st_ativo`) VALUES
(1, 3, 1),
(1, 4, 1),
(1, 5, 1),
(1, 6, 1),
(1, 7, 1),
(1, 8, 1),
(1, 9, 1),
(1, 10, 1),
(1, 11, 1),
(1, 12, 1),
(1, 13, 1),
(1, 14, 1),
(1, 15, 1),
(1, 16, 1),
(1, 18, 1),
(1, 19, 1),
(1, 20, 1),
(1, 21, 1),
(1, 22, 1),
(1, 23, 1),
(1, 24, 1),
(1, 25, 1),
(1, 26, 1),
(1, 27, 1),
(1, 28, 1),
(1, 29, 1),
(1, 30, 1),
(1, 31, 1),
(1, 33, 1),
(1, 34, 1),
(1, 35, 1),
(1, 36, 1),
(1, 37, 1),
(1, 38, 1),
(1, 39, 1),
(1, 40, 1),
(1, 41, 1),
(1, 42, 1),
(2, 5, 1),
(2, 7, 1),
(2, 8, 1),
(2, 9, 1),
(2, 10, 1),
(2, 11, 1),
(2, 22, 1),
(2, 23, 1),
(2, 24, 1),
(2, 25, 1),
(3, 5, 1),
(3, 7, 1),
(3, 8, 1),
(3, 9, 1),
(3, 10, 1),
(3, 11, 1),
(4, 23, 1),
(4, 24, 1),
(4, 25, 1);

INSERT INTO `erpc_modulos_funcionalidades` (`id_modulo`, `id_funcionalidade`, `st_ativo`) VALUES
(6, 5, 1),
(6, 7, 1),
(6, 8, 1),
(6, 9, 1),
(6, 10, 1),
(6, 11, 1),
(6, 22, 1),
(6, 23, 1),
(6, 24, 1),
(6, 25, 1),
(6, 30, 1),
(8, 5, 1),
(8, 13, 1),
(8, 14, 1),
(8, 15, 1),
(8, 18, 1),
(8, 19, 1),
(8, 20, 1),
(8, 21, 1),
(8, 22, 1),
(8, 23, 1),
(8, 24, 1),
(8, 25, 1),
(8, 35, 1),
(8, 36, 1),
(8, 37, 1),
(8, 38, 1),
(8, 39, 1),
(8, 40, 1),
(8, 41, 1),
(8, 42, 1),
(13, 3, 1),
(13, 4, 1),
(13, 6, 1),
(13, 26, 1),
(13, 27, 1),
(13, 28, 1),
(13, 29, 1),
(13, 31, 1),
(13, 33, 1),
(13, 34, 1);

INSERT INTO `erpc_modulo_grupo` (`id_modulo`, `id_grupo`, `st_ativo`) VALUES
(6, 1, 1),
(6, 2, 1),
(6, 3, 1),
(6, 4, 1),
(8, 1, 1),
(13, 1, 1);
set foreign_key_checks = 1;
/* FIM do ajuste das Novas Funcionalidades */



/* Criação da Tabela e campo de categoria de cliente */

Create table if not exists erpc_clientes_categorias (
     id int(11) not null primary key auto_increment
    ,ds_categoria varchar(100)
    ,st_ativo boolean
);

/* ALTER table erpc_clientes ADD COLUMN id_categoria_cliente int(11); */
CALL AddColumnUnlessExists('erpc_clientes', 'id_categoria_cliente', ' int(11)');


INSERT INTO erpc_clientes_categorias (id, ds_categoria, st_ativo) VALUES (
		 1, 'Cliente', 1)
  ON DUPLICATE KEY UPDATE ds_categoria = 'Cliente'
  						  ,st_ativo = 1;

INSERT INTO erpc_clientes_categorias (id, ds_categoria, st_ativo) VALUES (
	    2, 'Prospect', 1)
  ON DUPLICATE KEY UPDATE ds_categoria = 'Prospect'
  							,st_ativo = 1;

INSERT INTO erpc_clientes_categorias (id, ds_categoria, st_ativo) VALUES (
	    3, 'Inadimplente', 1)  
  ON DUPLICATE KEY UPDATE ds_categoria = 'Inadimplente'
  							,st_ativo = 1;
/*
insert into erpc_clientes_categorias (id, ds_categoria, st_ativo) values
     (1, 'Cliente', 1)
    ,(2, 'Prospect', 1)
    ,(3, 'Inadimplente', 1);  
*/


/* Criação de Campo para Data e Hora da criação dos pedidos em clientes que ainda não possuem a coluna. É necessário para fazer a filtragem dos PEDIDOS LIBERADOS */

CALL AddColumnUnlessExists('erpc_pedidos_venda', 'dh_criacao', ' datetime');


SET SQL_SAFE_UPDATES = 0;
UPDATE erpc_pedidos_venda 
inner join erpc_pedidos_venda_liberados
	on erpc_pedidos_venda.id = erpc_pedidos_venda_liberados.id_pedido_original
set erpc_pedidos_venda.dh_criacao = erpc_pedidos_venda_liberados.dh_liberacao;


 update erpc_funcionalidades 
 set ds_path_funcionalidade = 'erpc_pedidos_filter.php' 
 where ds_path_funcionalidade = 'erpc_pedidos_venda_list.php';
SET SQL_SAFE_UPDATES = 1;

/* Tabela com Dados da Contabilidade para envio do XML por email */

CREATE TABLE if not exists erpc_contabilidades (
	 id int auto_increment primary key
    ,ds_contabilidade varchar(255)
    ,ds_telefone varchar(19)
    ,ds_email varchar(255)
    ,ds_msg_email_xml varchar(255)
    ,st_ativo boolean
);

/* Campo do e-mail usado como remetente nos envios de e-mails. */

/* ALTER table erpc_unidades add column ds_email varchar(255); */
CALL AddColumnUnlessExists('erpc_unidades', 'ds_email', ' varchar(255)');

/* Atualização para uso do Crud de Regiões (usado no cadastro de vendedores) */
Alter table erpc_regiao modify column id_municipio int; 


/* MISCELANEA */

CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto1', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto2', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto3', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto4', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto5', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto6', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto7', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto8', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto9', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_texto10', ' varchar(255)');

CALL AddColumnUnlessExists('erpc_clientes', 'ds_data1', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data2', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data3', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data4', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data5', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data6', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data7', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data8', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data9', ' datetime');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_data10', ' datetime');

CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor1', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor2', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor3', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor4', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor5', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor6', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor7', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor8', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor9', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_clientes', 'ds_valor10', ' decimal(10,2)');


CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto1', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto2', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto3', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto4', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto5', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto6', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto7', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto8', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto9', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_texto10', ' varchar(255)');

CALL AddColumnUnlessExists('erpc_produtos', 'ds_data1', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data2', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data3', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data4', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data5', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data6', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data7', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data8', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data9', ' datetime');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_data10', ' datetime');

CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor1', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor2', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor3', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor4', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor5', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor6', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor7', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor8', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor9', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_valor10', ' decimal(10,2)');


CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto1', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto2', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto3', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto4', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto5', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto6', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto7', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto8', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto9', ' varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_texto10', ' varchar(255)');

CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data1', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data2', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data3', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data4', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data5', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data6', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data7', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data8', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data9', ' datetime');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_data10', ' datetime');

CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor1', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor2', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor3', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor4', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor5', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor6', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor7', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor8', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor9', ' decimal(10,2)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_valor10', ' decimal(10,2)');
    
/* MERGE do ESTOQUE */

/* alter table erpc_local_estoque add column st_bloq tinyint(1) DEFAULT NULL; */
CALL AddColumnUnlessExists('erpc_local_estoque', 'st_bloq', ' tinyint(1) DEFAULT NULL');

/*
alter table erpc_saldos_enderecar 	add column id_local_estoque int(11) DEFAULT NULL,
									add column `dt_entrada` date DEFAULT NULL,
									add column `id_usuario` int(11) DEFAULT NULL,
									add column `st_bloq` tinyint(1) DEFAULT NULL;
*/		
							
CALL AddColumnUnlessExists('erpc_saldos_enderecar', 'id_local_estoque', ' int(11) DEFAULT NULL');
CALL AddColumnUnlessExists('erpc_saldos_enderecar', 'dt_entrada', ' date DEFAULT NULL');
CALL AddColumnUnlessExists('erpc_saldos_enderecar', 'id_usuario', ' int(11) DEFAULT NULL');
CALL AddColumnUnlessExists('erpc_saldos_enderecar', 'st_bloq', ' tinyint(1) DEFAULT NULL');
									
CALL AddColumnUnlessExists('erpc_saldos_enderecar', 'id_tipo_movimentacao', ' int(11) NOT NULL');	
								
/* alter table erpc_produtos_saldos add column st_bloq tinyint(1) DEFAULT NULL; */
CALL AddColumnUnlessExists('erpc_produtos_saldos', 'st_bloq', ' tinyint(1) DEFAULT NULL');	

CREATE UNIQUE INDEX index_saldos_enderecar
ON erpc_saldos_enderecar(ds_documento,id_produto);

/* ATENÇÃO */
/* Estes inserts devem corresponder aos valores das variáveis contidas no arquivo inc/parametros_sat.php de cada cliente */



alter table erpc_parametros modify ds_valor varchar(510);
insert into erpc_parametros (ds_parametro, ds_valor, st_ativo) values
	 ('url', 'http://localhost:91/printXml.php', 1)
    ,('nm_printer', 'smb://localhost/epson', 1)
    ,('cnpjSW', '07494091000108', 1)
    ,('signAC', 'SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT', 1)
    ,('p_sat_web', '1', 1)
    ,('p_url_nuvem', 'http://validacao.codetecnologia.com.br', 1)
    ,('p_url_local_venda', 'http://localhost:91/local/erpc_nfccode_satlocal_enviar.php', 1)
    ,('p_url_local_cancela', 'http://localhost:91/local/erpc_nfccode_satlocal_enviar.php', 1);


/* Colunas Faltantes da tabela fornecedores */
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_bairro', 'varchar(255)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_numero', 'varchar(20)');
CALL AddColumnUnlessExists('erpc_fornecedores', 'ds_uf', 'varchar(2)');
CALL AddColumnUnlessExists('erpc_vendedores', 'ds_cep', 'varchar(10)');

alter table erpc_fornecedores modify column id_municipio int(11);


/* GLP */

/*
alter table erpc_produtos add cd_produto_anp  varchar(09) null;
alter table erpc_produtos add ds_produto_anp  varchar(95) null;
alter table erpc_produtos add nr_perc_derivado_glp	  decimal(4,2) null;
alter table erpc_produtos add nr_perc_derivado_gnn	  decimal(4,2) null;
alter table erpc_produtos add nr_perc_derivado_gni	  decimal(4,2) null;
*/

CALL AddColumnUnlessExists('erpc_produtos', 'cd_produto_anp', ' varchar(09) null');
CALL AddColumnUnlessExists('erpc_produtos', 'ds_produto_anp', 'varchar(95) null');
CALL AddColumnUnlessExists('erpc_produtos', 'nr_perc_derivado_glp', 'decimal(4,2) null');
CALL AddColumnUnlessExists('erpc_produtos', 'nr_perc_derivado_gnn', 'decimal(4,2) null');
CALL AddColumnUnlessExists('erpc_produtos', 'nr_perc_derivado_gni', 'decimal(4,2) null');



drop view if exists vw_erpc_nfecode_geraxml_produtos;

/* Inclusão dos campos de rastreamento de produtos */
Create or replace View vw_erpc_nfecode_geraxml_produtos as
Select
        ds.id AS nr_documento,
        ds.ds_numnf AS nr_nota,
        '' AS nItem,
        ped.id_pedido_venda_liberado AS nr_pedido,
        pro.cd_produto AS cProd,
        pro.ds_ean AS cEAN,
        pro.ds_produto AS xProd,
        pro.ds_ncm AS NCM,
        NULL AS EXTIPI,
        mov.ds_cfop AS CFOP,
        ped.id_unidade_medida AS uCom,
        ped.nr_quantidade AS qCom,
		Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2) / ped.nr_quantidade AS vUnCom,
        Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2)  AS vProd,
        pro.ds_ean            AS cEANTrib,
        ped.id_unidade_medida AS uTrib,
        ped.nr_quantidade     AS qTrib,
        Round(ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2) / ped.nr_quantidade AS vUnTrib,
        /* Realizar o Rateio do Frete para os produtos */
        Case When IFNULL(ven.vl_frete,0)=0 Then 0 Else
		  Round(
          Round( ped.vl_unitario * ped.nr_quantidade - ped.vl_desconto_produto, 2)  /  -- valor unitário
          (ven.vl_total_produtos - ven.vl_desconto) * ven.vl_frete                     -- valor total produtos - desconto geral - frete
          , 2)
          End AS vFrete,
          ven.vl_frete , -- Utilizado para calcular a diferença no último item para o frete
        0 AS vSeg,
        0 AS vDesc,
        0 AS vOutro,
        1 AS indTot,
        ped.id_pedido_venda_liberado AS xPed,
        '' AS nFCI,
        org.cd_origem AS orig,
        tri.cd_tributacao AS trib,
        (ped.vl_unitario * ped.nr_quantidade) AS vBC,
        pro.nr_perc_aliq_icms AS pICMS,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_aliq_icms) / 100),
                2) AS vICMS,
        0 AS vBCST,
        0 AS pICMSST,
        0 AS vICMSST,
        pis.cd_sit_trib_pis AS cst,
        pro.nr_perc_pis AS pPIS,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_pis) / 100),
                2) AS vPIS,
        pro.nr_perc_cofins AS pCof,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_cofins) / 100),
                2) AS vCof,
        pro.nr_perc_aliq_ipi AS pIPI,
        ROUND((((ped.vl_unitario * ped.nr_quantidade) * pro.nr_perc_aliq_ipi) / 100),
                2) AS vIPI,
        pro.vl_perc_mva AS pIVA,
        exc.nr_aliq_externa AS pInter,
        exc.nr_aliq_interna AS pIntra
		, IFNULL(pro.tp_rastro, '0') AS tp_rastro
		, IFNULL(pro.ds_controle_lote ,'') AS nLote
		, IFNULL(pro.qt_produto_lote  ,'') AS qLote
		, IFNULL(pro.dt_fabrica_lote  ,'') AS dFab
		, IFNULL(pro.dt_validae_lote  ,'') AS dVal	
		, IFNULL(pro.cd_produto_ANVISA,'') AS cProdANVISA
		
		/* FUNDO DE COMBATE A POBREZA FCP */
		, IF(
		  IFNULL(pro.nr_perc_aliq_icms,0)=0, 0,     ped.vl_unitario * ped.nr_quantidade) as vBCFCP
		, ROUND(   IFNULL(pro.nr_perc_fcp, 0)  , 2) AS pFCP
		, ROUND(IF(IFNULL(pro.nr_perc_fcp, 0)=0, 0, ped.vl_unitario * ped.nr_quantidade * pro.nr_perc_fcp / 100)
			, 2) as vFCP
            
		/* GLP PRODUTOS */
        , IFNULL(pro.cd_produto_anp , '') as cProdANP
        , IFNULL(pro.ds_produto_anp , '') as descANP
        , IFNULL(pro.nr_perc_derivado_glp	, '') as pGLP
        , IFNULL(pro.nr_perc_derivado_gnn	, '') as pGNn
        , IFNULL(pro.nr_perc_derivado_gni	, '') as pGNi
        , pro.nr_peso_liquido as qPesoLiq
        /* INFORMAR A CSOSN DO PRODUTO conforme TES */
        , ope.cd_csosn as csosn
    FROM erpc_pedidos_itens_liberados ped
	join erpc_pedidos_venda_liberados ven on ped.id_pedido_venda_liberado = ven.id
        JOIN erpc_pedidos_documentos_saida dp ON dp.id_pedido_liberados = ped.id_pedido_venda_liberado
        JOIN erpc_documentos_saida ds ON ds.id = dp.id_documento_saida
        JOIN erpc_produtos pro ON ped.id_produto = pro.id
        JOIN erpc_origem_produto org ON pro.id_origem_produto = org.id
        LEFT JOIN erpc_grupo_tributacao grp ON pro.id_grupo_tributacao = grp.id
        LEFT JOIN erpc_excecao_fiscal exc ON grp.id = exc.id_grupo_tributacao
        LEFT JOIN erpc_tipos_movimentacao mov ON ped.id_tipo_movimentacao = mov.id
        LEFT JOIN erpc_dom_situacao_tributaria tri ON mov.id_situacao_tributaria = tri.id
		LEFT JOIN erpc_dom_sit_trib_cof cof on mov.erpc_dom_sit_trib_cof_id = cof.id
		LEFT JOIN erpc_dom_sit_trib_pis pis on mov.erpc_dom_sit_trib_pis_id = pis.id
		LEFT JOIN erpc_dom_csosn 		ope on mov.id_dom_csosn = ope.id
;

insert into erpc_dom_csosn ( cd_csosn, ds_csosn, st_ativo)
values
( 101, 'Tributada pelo Simples Nacional com permissão de crédito', 1),
( 102, 'Tributada pelo Simples Nacional sem permissão de crédito', 1),
( 103, 'Isenção do ICMS no Simples Nacional para faixa de receita bruta', 1),
( 201, 'Tributada pelo Simples Nacional com permissão de crédito e com cobrança do ICMS por substituição tributária', 1),
( 202, 'Tributada pelo Simples Nacional sem permissão de crédito e com cobrança do ICMS por substituição tributária', 1),
( 203, 'Isenção do ICMS no Simples Nacional para faixa de receita bruta e com cobrança do ICMS por substituição tributária', 1),
( 300, 'Imune : Classificam-se neste código as operações praticadas por optantes pelo Simples Nacional contempladas com imunidade do ICMS', 1),
( 400, 'Não tributada pelo Simples Nacional', 1),
( 500, 'ICMS cobrado anteriormente por substituição tributária (substituído) ou por antecipação', 1),
( 900, 'Outros', 1);

-- update erpc_tipos_movimentacao set id_dom_csosn = 9 where id = 5656;
ALTER TABLE erpc_tipos_movimentacao
MODIFY COLUMN fl_gera_duplicata tinyint(1) COMMENT '0-Não | 1-Entrada | 2-Saida';



-- Criação de tabelas do módulo de compras
/*
drop table if exists erpc_solicitacao_compra_itens;

drop table if exists erpc_solicitacao_compra;

drop table if exists erpc_grupo_alcada;

drop table if exists erpc_cotacao_compra_itens;

drop table if exists erpc_cotacao_compra;

drop table if exists erpc_pedidos_compra_itens;

drop table if exists erpc_pedidos_compra;
*/

CREATE TABLE if not exists erpc_solicitacao_compra (
  id int NOT NULL AUTO_INCREMENT,
  id_solicitante int NOT NULL,
  id_status_solicitacao int NOT NULL,
  id_responsavel_aprov int NULL,
  dt_emissao date DEFAULT NULL,
  vl_total decimal(10,2) DEFAULT NULL,
  ds_observacao varchar(255) DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id),
  KEY fk_erpc_solicitacao_compra_erpc_usuario_solicitante (id_solicitante),
  KEY fk_erpc_solicitacao_compra_erpc_dom_status_solicitacao_compra (id_status_solicitacao),
  KEY fk_erpc_solicitacao_compra_erpc_usuario_responsavel (id_responsavel_aprov),
  CONSTRAINT fk_erpc_solicitacao_compra_erpc_dom_status_solicitacao_compra FOREIGN KEY (id_status_solicitacao) REFERENCES erpc_dom_status_solicitacao_compra (id),
  CONSTRAINT fk_erpc_solicitacao_compra_erpc_usuario_solicitante FOREIGN KEY (id_solicitante) REFERENCES erpc_usuarios (id),
  CONSTRAINT fk_erpc_solicitacao_compra_erpc_usuario_responsavel_aprov FOREIGN KEY (id_responsavel_aprov) REFERENCES erpc_usuarios (id)
);

CREATE TABLE if not exists erpc_solicitacao_compra_itens (
  id int NOT NULL AUTO_INCREMENT,
  id_solicitacao_compra int NOT NULL,
  id_produto int NOT NULL,
  nr_quantidade decimal(10,2) DEFAULT NULL,
  id_unidade_medida varchar(2) NOT NULL,
  vl_unit_estimado decimal(10,2) DEFAULT NULL,
  vl_unit_cotado decimal(10,2) DEFAULT NULL,
  dt_necessidade date DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id),
  KEY fk_erpc_solicitacao_compra_itens_erpc_solicitacao_compra (id_solicitacao_compra),
  KEY fk_erpc_solicitacao_compra_itens_erpc_unidade_medida (id_unidade_medida),
  KEY fk_erpc_solicitacao_compra_itens_erpc_produtos (id_produto),
  CONSTRAINT fk_erpc_solicitacao_compra_itens_erpc_solicitacao_compra FOREIGN KEY (id_solicitacao_compra) REFERENCES erpc_solicitacao_compra (id),
  CONSTRAINT fk_erpc_solicitacao_compra_itens_erpc_unidade_medida FOREIGN KEY (id_unidade_medida) REFERENCES erpc_unidade_medida (id),
  CONSTRAINT fk_erpc_solicitacao_compra_itens_erpc_produtos FOREIGN KEY (id_produto) REFERENCES erpc_produtos (id)
);

CREATE TABLE if not exists erpc_dom_status_solicitacao_compra (
  id int NOT NULL AUTO_INCREMENT,
  ds_status varchar(255) DEFAULT NULL,
  ds_path varchar(255) DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id)
);

/*
1 - aguardando aprovação
2 - aprovada
3 - cancelada
*/

insert into erpc_dom_status_solicitacao_compra (ds_status,ds_path,st_ativo) values 
('AGUARDANDO APROVAÇÃO','img/icones/bullet_yellow.png',1),
('APROVADA','img/icones/bullet_green.png',1),
('CANCELADA','img/icones/bullet_red.png',1);

CREATE TABLE if not exists erpc_grupo_alcada (
  id int(11) PRIMARY KEY AUTO_INCREMENT,
  ds_grupo varchar(255) DEFAULT NULL,
  vl_maximo decimal(10,2) DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL
);

INSERT INTO erpc_grupo_alcada ( ds_grupo, vl_maximo, st_ativo) VALUES ('TESTE1', '200,00', '1');
;

/* ALTER TABLE if not exists erpc_usuarios ADD id_grupo_alcada int NULL; */

/* Henrique - Está gerando erro
*/
CALL AddColumnUnlessExists('erpc_usuarios', 'id_grupo_alcada', ' int DEFAULT NULL'); 

/*
Henrique - O campo id_grupo_alcada em usuarios está Default Null. Mas ele é chave primaria not null na table erpc_grupo_alcada.
É preciso mesmo essa constraint? 
 
ALTER TABLE erpc_usuarios
ADD CONSTRAINT fk_erpc_usuarios_erpc_grupo_alcada
FOREIGN KEY (id_grupo_alcada) REFERENCES erpc_grupo_alcada(id);
*/

CREATE TABLE if not exists erpc_centro_custo (
  id int NOT NULL AUTO_INCREMENT,
  ds_centro_custo varchar(255) DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE if not exists erpc_departamentos (
  id int NOT NULL AUTO_INCREMENT,
  ds_departamento varchar(255) DEFAULT NULL,
  id_centro_custo int NOT NULL,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id),
  KEY fk_erpc_departamentos_erpc_centro_custo (id_centro_custo),
  CONSTRAINT fk_erpc_departamentos_erpc_centro_custo FOREIGN KEY (id_centro_custo) REFERENCES erpc_centro_custo (id)
);


/* ALTER TABLE erpc_usuarios ADD id_departamento int NULL; */
CALL AddColumnUnlessExists('erpc_usuarios', 'id_departamento', ' int DEFAULT NULL');

/* Henrique - Erro Cannot add foreign key constraint 
	Também é necessário esta constraint? a coluna id_departamento está atualmente Default Null, oq impede a criação da constraint

ALTER TABLE erpc_usuarios
ADD CONSTRAINT fk_erpc_usuarios_erpc_departamentos
FOREIGN KEY (id_departamento) REFERENCES erpc_departamentos(id);
*/

CREATE TABLE if not exists erpc_cotacao_compra (
  id int NOT NULL AUTO_INCREMENT,
  id_solicitacao int NOT NULL,
  id_comprador int NULL,
  id_responsavel_aprov int DEFAULT NULL,
  dt_cotacao timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id),
  KEY fk_erpc_cotacao_compra_erpc_solicitacao (id_solicitacao),
  KEY fk_erpc_cotacao_compra_erpc_comprador (id_comprador),
  KEY fk_erpc_cotacao_compra_erpc_responsavel_aprov (id_responsavel_aprov),
  CONSTRAINT fk_erpc_cotacao_compra_erpc_solicitacao_compra FOREIGN KEY (id_solicitacao) REFERENCES erpc_solicitacao_compra (id),
  CONSTRAINT fk_erpc_cotacao_compra_erpc_usuarios_comprador FOREIGN KEY (id_comprador) REFERENCES erpc_usuarios (id),
  CONSTRAINT fk_erpc_cotacao_compra_erpc_usuarios_responsavel_aprov FOREIGN KEY (id_responsavel_aprov) REFERENCES erpc_usuarios (id)
);

alter table erpc_cotacao_compra modify id_comprador int null; 

CREATE TABLE if not exists erpc_cotacao_compra_itens (
  id int NOT NULL AUTO_INCREMENT,
  id_cotacao_compra int DEFAULT NULL,
  id_solicitacao_compra_item int DEFAULT NULL,
  id_fornecedor int DEFAULT NULL,
  vl_produto decimal(10,2) DEFAULT NULL,
  vl_negociado decimal(10,2) DEFAULT NULL,
  dt_disponibilidade date DEFAULT NULL,
  st_aprovada tinyint(4) DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL,
  PRIMARY KEY (id),
  KEY fk_erpc_cotacao_compra_erpc_fornecedores (id_fornecedor),
  KEY fk_erpc_cotacao_compra_erpc_solicitacao_compra_itens (id_solicitacao_compra_item),
  KEY fk_erpc_cotacao_compra_erpc_cotacao_compra (id_cotacao_compra),
  CONSTRAINT fk_erpc_cotacao_compra_erpc_cotacao_compra FOREIGN KEY (id_cotacao_compra) REFERENCES erpc_cotacao_compra (id),
  CONSTRAINT fk_erpc_cotacao_compra_erpc_fornecedores FOREIGN KEY (id_fornecedor) REFERENCES erpc_fornecedores (id),
  CONSTRAINT fk_erpc_cotacao_compra_erpc_solicitacao_compra_itens FOREIGN KEY (id_solicitacao_compra_item) REFERENCES erpc_solicitacao_compra_itens (id)
) ;
/*
1 - em aberto
2 - cancelado
3 - fechado
*/

CREATE TABLE if not exists erpc_dom_status_pedidos_compra (
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  ds_status_pedido varchar(255) DEFAULT NULL,
  ds_path varchar(255) DEFAULT NULL,
  st_ativo tinyint(4) DEFAULT NULL
);

insert into erpc_dom_status_pedidos_compra (ds_status_pedido,ds_path,st_ativo) values 
('EM ABERTO','img/icones/bullet_yellow.png',1),
('CANCELADO','img/icones/bullet_red.png',1),
('FECHADO','img/icones/bullet_green.png',1);

CREATE TABLE if not exists erpc_pedidos_compra (
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  id_solicitacao_compra int DEFAULT NULL,
  dt_lancamento timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  id_fornecedor int NOT NULL,
  id_forma_pagamento int NOT NULL,
  id_condicao_pagamento int NOT NULL,
  id_status_pedido int NOT NULL,
  id_usuario int not null,
  fl_tipo    bit not null,
  vl_total decimal(10,2) NOT NULL,
  st_ativo tinyint(4) DEFAULT NULL);

ALTER TABLE `erpc_pedidos_compra`
	DROP FOREIGN KEY `fk_erpc_pedidos_compra_erpc_solicitacao_compra`;


ALTER TABLE `erpc_pedidos_compra`
	DROP FOREIGN KEY `fk_erpc_pedidos_compra_erpc_condicao_pagamento`;


ALTER TABLE `erpc_pedidos_compra`
	DROP FOREIGN KEY `fk_erpc_pedidos_compra_erpc_dom_forma_pagamento`;


ALTER TABLE `erpc_pedidos_compra`
	DROP FOREIGN KEY `fk_erpc_pedidos_compra_erpc_fornecedores`;


ALTER TABLE erpc_pedidos_compra ADD CONSTRAINT fk_erpc_pedidos_compra_erpc_solicitacao_compra FOREIGN KEY (id_solicitacao_compra) REFERENCES erpc_solicitacao_compra (id);
ALTER TABLE erpc_pedidos_compra ADD CONSTRAINT fk_erpc_pedidos_compra_erpc_condicao_pagamento FOREIGN KEY (id_condicao_pagamento) REFERENCES erpc_condicao_pagamento (id);
ALTER TABLE erpc_pedidos_compra ADD CONSTRAINT fk_erpc_pedidos_compra_erpc_dom_forma_pagamento FOREIGN KEY (id_forma_pagamento) REFERENCES erpc_dom_forma_pagamento (id);
ALTER TABLE erpc_pedidos_compra ADD CONSTRAINT fk_erpc_pedidos_compra_erpc_fornecedores FOREIGN KEY (id_fornecedor) REFERENCES erpc_fornecedores (id);

ALTER TABLE erpc_pedidos_compra ADD CONSTRAINT fk_erpc_pedidos_compra_erpc_dom_status_pedido_compra1 FOREIGN KEY (id_status_pedido) REFERENCES erpc_dom_status_pedidos_compra(id);


CREATE TABLE erpc_pedidos_compra_itens (
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  id_solicitacao_compra_item int null,
  id_pedido int NOT NULL,
  id_produto int NOT NULL,
  nr_quantidade int NOT NULL,
  vl_unitario decimal(10,2) NOT NULL,
  id_unidade_medida varchar(2) NOT NULL,
  st_ativo tinyint(4) DEFAULT NULL);


ALTER TABLE `erpc_pedidos_compra_itens`
	DROP FOREIGN KEY `fk_erpc_pedido_compra_itens_erpc_solicitacao_compra_itens`;

ALTER TABLE `erpc_pedidos_compra_itens`
	DROP FOREIGN KEY `fk_erpc_pedido_compra_itens_erpc_pedidos_compra`;

ALTER TABLE `erpc_pedidos_compra_itens`
	DROP FOREIGN KEY `fk_erpc_pedido_compra_itens_erpc_produtos`;
	
ALTER TABLE `erpc_pedidos_compra_itens`
	DROP FOREIGN KEY `fk_erpc_pedido_compra_itens_erpc_unidade_medida`;

ALTER TABLE erpc_pedidos_compra_itens ADD CONSTRAINT fk_erpc_pedido_compra_itens_erpc_solicitacao_compra_itens FOREIGN KEY(id_solicitacao_compra_item) references erpc_solicitacao_compra_itens(id); 
ALTER TABLE erpc_pedidos_compra_itens ADD CONSTRAINT fk_erpc_pedido_compra_itens_erpc_pedidos_compra FOREIGN KEY (id_pedido) REFERENCES erpc_pedidos_compra (id);
ALTER TABLE erpc_pedidos_compra_itens ADD CONSTRAINT fk_erpc_pedido_compra_itens_erpc_produtos FOREIGN KEY (id_produto) REFERENCES erpc_produtos (id);
ALTER TABLE erpc_pedidos_compra_itens ADD CONSTRAINT fk_erpc_pedido_compra_itens_erpc_unidade_medida FOREIGN KEY (id_unidade_medida) REFERENCES erpc_unidade_medida (id);

insert into erpc_centro_custo( ds_centro_custo, st_ativo) values( 'TESTE', 1);

insert into erpc_departamentos ( ds_departamento, id_centro_custo, st_ativo) VALUES ('TESTE1', 1, '1');

SET SQL_SAFE_UPDATES = 0;
update erpc_usuarios set id_departamento  = 1, id_grupo_alcada = 1;
SET SQL_SAFE_UPDATES = 1;
drop view if exists vw_erpc_nfecode_geraxml_emitente;



create or replace VIEW  `vw_erpc_nfecode_geraxml_emitente` AS
    SELECT DISTINCT
        `ds`.`id` AS `nr_documento`,
        `ds`.`ds_numnf` AS `nr_nota`,
        35 AS `cUF`,
        `m`.`ds_codigo_ibge` AS `cMunFG`,
        `u`.`ds_endereco` AS `xLgr`,
        `u`.`ds_numero` AS `nro`,
        `u`.`ds_complemento` AS `xCpl`,
        `u`.`ds_bairro` AS `xBairro`,
        `m`.`ds_codigo_ibge` AS `cMun`,
        `m`.`ds_municipio` AS `xMun`,
        `m`.`ds_uf` AS `UF`,
        `u`.`ds_cep` AS `CEP`,
        1058 AS `cPais`,
        `p`.`ds_pais` AS `xPais`,
        NULL AS `fone`,
        `u`.`ds_logo` AS `logo`,
        `un`.`id_regime` AS `cRegTrib`,
        `un`.`ds_cnpj` AS `cnpj`,
        `un`.`ds_razao_social` AS `razaosocial`,
        `un`.`ds_fantasia` AS `nomefantasia`,
        `un`.`ds_ie` AS `ie`,
        `un`.`ds_iest` AS `iest`,
        `un`.`ds_im` AS `im`,
        `un`.`ds_cnae_fiscal` AS `cnae`,
        (CASE
            WHEN (`un`.`id_regime` = 4) THEN 1
            ELSE 3
        END) AS `regime`
    FROM
        ((((((((`erpc_documentos_saida` `ds`
        JOIN `erpc_unidades` `un` ON ((`ds`.`id_unidade` = `un`.`id`)))
        JOIN `erpc_pedidos_documentos_saida` `dp` ON ((`ds`.`id` = `dp`.`id_documento_saida`)))
        JOIN `erpc_pedidos_venda_liberados` `vl` ON ((`dp`.`id_pedido_liberados` = `vl`.`id`)))
        JOIN `erpc_pedidos_itens_liberados` `il` ON ((`vl`.`id` = `il`.`id_pedido_venda_liberado`)))
        JOIN `erpc_unidades` `u` ON ((`vl`.`id_unidade` = `u`.`id`)))
        JOIN `erpc_municipios` `m` ON ((`u`.`id_municipio` = `m`.`id`)))
        JOIN `erpc_estados` `e` ON ((`m`.`ds_uf` = `e`.`ds_uf`)))
        JOIN `erpc_paises` `p` ON ((`e`.`id_pais` = `p`.`id`)));

        
 -- Funcionalidades de Compras
 INSERT INTO `erpc_funcionalidades` (`id_tipo_funcionalidade`, `ds_funcionalidade`, `ds_path_video`, `ds_path_funcionalidade`, `ds_label`, `st_menu`, `id_pai`, `st_ativo`) VALUES
 (1, 'Solicitação de Compra', NULL, 'erpc_solicitacao_compra_list.php', NULL, 1, 1, 1)
,(1, 'Cotação de Compra', NULL, 'erpc_cotacao_compra_list.php', NULL, 1, 1, 1)
,(1, 'Pedido de Compra', NULL, 'erpc_pedidos_compra_list.php', NULL, 1, 1, 1)
,(1, 'Importação XML', NULL, 'erpc_nfecode_importacao_painel.php', NULL, 1, 1, 1);


INSERT INTO `erpc_funcionalidades` (`id_tipo_funcionalidade`, `ds_funcionalidade`, `ds_path_video`, `ds_path_funcionalidade`, `ds_label`, `st_menu`, `id_pai`, `st_ativo`) VALUES
( 1, 'Locais de Estoque', '', 'erpc_armazens_locais_list.php', '', 1, 0, 1),
( 1, 'Bloqueio', '', 'erpc_armazens_locais_bloqueio_inventario_list.php', '', 1, 37, 1),
( 1, 'Inventário', '', '', '', 1, 37, 1),
( 1, 'Grupo de Produtos', '', 'erpc_produtos_grupo_list.php', '', 1, 0, 1),
( 1, 'Tabela de Preços', '', 'erpc_tabela_precos_list.php', '', 1, 0, 1),
( 1, 'Regiões', '', 'erpc_regiao_list.php', '', 1, 0, 1),
( 1, 'Ramo de Atividades', '', 'erpc_ramo_atividades_list.php', '', 1, 0, 1),
( 1, 'Endereçar Saldos', '', 'erpc_saldos_enderecar_list.php', '', 1, 0, 1),
( 1, 'Comissionamento', '', 'erpc_regras_comissionamento_list.php', '', 1, 0, 1),
( 1, 'Lançar Inventário', '', 'erpc_armazens_locais_lancar_inventario_list.php', '', 1, 37, 1);


/* CRM Campanhas e Eventos */

create table if not exists erpc_crm_campanhas (
     id int primary key auto_increment
    ,ds_campanha varchar(255)
    ,dh_inicio datetime
    ,dh_fim datetime
    ,id_status int
    ,ds_parametros varchar(255)
    ,id_script int
);

insert into erpc_crm_campanhas (ds_campanha, dh_inicio) values ("Campanha Padrão", now());

create table if not exists erpc_crm_status_atendimento (
   id int primary key auto_increment
  ,ds_documento varchar(20)
  ,ds_status varchar(255)
  ,ts_tempo_redial datetime
  ,nr_prioridade int
  ,st_finalizador boolean
  ,st_ativo boolean
);

insert into erpc_crm_status_atendimento (id, ds_status) values (1, 'Concluido');

create table if not exists erpc_crm_atendimentos (
     id int primary key auto_increment
    ,ds_titulo varchar(255) NULL
    ,id_campanha int NULL
    ,id_cliente int
    ,ds_atendimento text
    ,dh_inicio_atendimento datetime
    ,dh_fim_atendimento datetime
    ,dh_agendamento datetime
    ,id_status_atendimento  int(2) NOT NULL
    ,id_script int NULL
    ,id_canal_marketing int NULL
    ,id_usuario int
    ,FOREIGN KEY (id_cliente) REFERENCES erpc_clientes(id)
    ,FOREIGN KEY (id_campanha) REFERENCES  erpc_crm_campanhas(id)
    ,FOREIGN KEY (id_status_atendimento) REFERENCES erpc_crm_status_atendimento(id)
);

CREATE TABLE if not exists `erpc_crm_atendimento_itens` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_atendimento` int(11) NOT NULL,
  `id_produto` int(11) NOT NULL,
  `nr_quantidade` decimal(10,4) DEFAULT NULL,
  `id_unidade_medida` varchar(2) NOT NULL,
  `vl_unitario` decimal(10,2) DEFAULT NULL,
  `vl_desconto_produto` decimal(10,2) DEFAULT NULL,
  `id_tipo_movimentacao` varchar(10) NOT NULL,
  `st_ativo` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`,`id_atendimento`,`id_produto`,`id_unidade_medida`,`id_tipo_movimentacao`),
  KEY `fk_erpc_atendimento_itens_erpc_produtos1_idx` (`id_produto`),
  KEY `fk_erpc_atendimento_itens_erpc_unidade_medida1_idx` (`id_unidade_medida`),
  KEY `fk_erpc_atendimento_itens_erpc_tipos_movimentacao1_idx` (`id_tipo_movimentacao`),
  KEY `fk_erpc_atendimento_itens_erpc_crm_atendimentos1_idx` (`id_atendimento`)
  
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*
HENRIQUE - Estas constraint não pode ser criada

ALTER TABLE erpc_crm_atendimento_itens add 
CONSTRAINT `fk_erpc_atendimento_itens_erpc_crm_atendimentos1` FOREIGN KEY (`id_atendimento`) REFERENCES `erpc_crm_atendimentos` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
*/

ALTER TABLE erpc_crm_atendimento_itens add
CONSTRAINT `fk_erpc_atendimento_itens_erpc_produtos10` FOREIGN KEY (`id_produto`) REFERENCES `erpc_produtos` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE erpc_crm_atendimento_itens add
CONSTRAINT `fk_erpc_atendimento_itens_erpc_tipos_movimentacao10` FOREIGN KEY (`id_tipo_movimentacao`) REFERENCES `erpc_tipos_movimentacao` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE erpc_crm_atendimento_itens add
CONSTRAINT `fk_erpc_atendimento_itens_erpc_unidade_medida10` FOREIGN KEY (`id_unidade_medida`) REFERENCES `erpc_unidade_medida` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;



/* Campo para ser preenchido pela triger quando uma venda for realizada. Um atendimento será gerado para cada venda. */
/*
alter table erpc_crm_atendimentos add column id_pedido_liberado int(11) after id;
alter table erpc_crm_atendimentos add column st_ativo boolean;
*/

CALL AddColumnUnlessExists('erpc_crm_atendimentos', 'id_pedido_liberado', ' int(11) after id');
CALL AddColumnUnlessExists('erpc_crm_atendimentos', 'st_ativo', ' boolean');

drop trigger if exists geraAtendimentoVenda;
DELIMITER $$
CREATE TRIGGER geraAtendimentoVenda 
	AFTER INSERT ON erpc_pedidos_venda_liberados
    FOR EACH ROW
BEGIN
	Insert into erpc_crm_atendimentos 
    SET  id_pedido_liberado = new.id_pedido_original
		,ds_titulo = "Venda de Produtos"
		,id_cliente = new.id_cliente
        ,dh_inicio_atendimento = NOW()
        ,dh_fim_atendimento = NOW()
        ,id_usuario = new.id_usuario
        ,st_ativo = 1
		,id_status_atendimento = (Select id from erpc_crm_status_atendimento where ds_status like lower('%conclu%'));
END $$
DELIMITER ;

drop trigger if exists baixaAtendimentoVenda;
DELIMITER $$
CREATE TRIGGER baixaAtendimentoVenda 
	AFTER UPDATE ON erpc_pedidos_venda_liberados
    FOR EACH ROW
BEGIN
	update erpc_crm_atendimentos 
    SET  st_ativo = new.st_ativo
    where id_pedido_liberado = old.id;
END $$
DELIMITER ;

/* ESTOQUE */
insert into erpc_parametros (ds_parametro, ds_valor, st_ativo) values ('enderecamento', '0', 1);


/* Importacao NFE Entrada */
CREATE TABLE if not exists `erpc_dom_status_xml_importado` (
  `id` int(11) NOT NULL,
  `ds_status_xml` varchar(255) DEFAULT NULL,
  `ds_path` varchar(255) DEFAULT NULL,
  `st_ativo` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `erpc_dom_status_xml_importado` (`id`, `ds_status_xml`, `ds_path`, `st_ativo`) VALUES
(1, 'Aguard. Validação', 'img/icones/bullet_gold.png', '1'),
(2, 'NF-e Válida', 'img/icones/bullet_blue.png', '1'),
(3, 'NF-e Inválida', 'img/icones/bullet_red.png', '1'),
(4, 'NF-e Cancelada', 'img/icones/bullet_yellow.png', '1'),
(5, 'Pré-Nota Gerada', 'img/icones/bullet_green.png', '1'),
(6, 'Arq. Desconsiderado', 'img/icones/bullet_grey.png', '1');

ALTER TABLE `erpc_dom_status_xml_importado`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `erpc_dom_status_xml_importado`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
COMMIT;

CREATE TABLE if not exists  `erpc_dom_status_xml_interno` (
  `id` int(11) PRIMARY KEY NOT NULL,
  `ds_status_xml` varchar(255) DEFAULT NULL,
  `st_ativo` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



drop table if exists erpc_produtos_saldos;

CREATE TABLE `erpc_produtos_saldos` (
  `id_produto` int(11) NOT NULL,
  `id_endereco` varchar(20) NOT NULL,
  `id_local` varchar(20) NOT NULL,
  `vl_saldo` decimal(10,2) DEFAULT NULL,
  `st_ativo` tinyint(1) DEFAULT NULL,
  `st_bloq` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id_produto`,`id_endereco`,`id_local`),
  KEY `fk_erpc_produtos_has_erpc_local_enderecos_erpc_produtos1_idx` (`id_produto`),
  CONSTRAINT `fk_erpc_produtos_has_erpc_local_enderecos_erpc_produtos1` FOREIGN KEY (`id_produto`) REFERENCES `erpc_produtos` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE if not exists  `erpc_documentos_entrada` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_unidade` int(11) NOT NULL,
  `ds_chave` varchar(255) DEFAULT NULL,
  `ds_numnf` varchar(100) DEFAULT NULL,
  `ds_numnsu` int(11) DEFAULT NULL,
  `ds_serie` varchar(45) DEFAULT NULL,
  `dh_emissao` datetime DEFAULT NULL,
  `id_finalidade_nfe` int(11) DEFAULT NULL,
  `cd_status_nfe` varchar(45) DEFAULT NULL,
  `ds_status_nfe` varchar(255) DEFAULT NULL,
  `ds_recibo_sefaz` varchar(100) DEFAULT NULL,
  `vl_total_nfe` decimal(15,2) NOT NULL,
  `ds_xml` text,
  `ds_infCpl` text,
  `ds_xml_cnpj` varchar(14) NOT NULL,
  `ds_xml_razao` varchar(255) NOT NULL,
  `id_fornecedor` int(11) DEFAULT NULL,
  `id_status_xml_importado` int(11) NOT NULL,
  `id_tipo_ambiente` int(11) DEFAULT NULL COMMENT '1=producao Sefaz 2=homolog\n',
  `id_usuario` int(11) NOT NULL,
  `st_ativo` tinyint(1) DEFAULT NULL,
  `st_tipo_entrada` int(11) NOT NULL,
  `dh_alteracao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `erpc_dom_status_xml_importado1_idx` (`id_status_xml_importado`),
  KEY `fk_erpc_documentos_entrada_erpc_unidades1` (`id_unidade`),
  CONSTRAINT `fk_erpc_documentos_entrada_erpc_dom_status_xml_importado1` FOREIGN KEY (`id_status_xml_importado`) REFERENCES `erpc_dom_status_xml_importado` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_erpc_documentos_entrada_erpc_unidades1` FOREIGN KEY (`id_unidade`) REFERENCES `erpc_unidades` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;


CREATE TABLE if not exists `erpc_documentos_entrada_itens` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_documento_entrada` int(11) NOT NULL,
  `id_tipo_movimentacao` varchar(10) NOT NULL,
  `id_produto` int(11) NOT NULL,
  `item` int(11) DEFAULT NULL,
  `cd_produto_fornecedor` varchar(60) NOT NULL,
  `ds_produto_fornecedor` varchar(120) NOT NULL,
  `ds_cfop` varchar(50) NOT NULL,
  `cd_ean_produto` varchar(14) DEFAULT NULL,
  `cd_ncm_produto` varchar(8) DEFAULT NULL,
  `id_unidade_medida` varchar(6) NOT NULL,
  `nr_quantidade` decimal(15,4) NOT NULL,
  `vl_unitario` decimal(21,10) DEFAULT NULL,
  `vl_desconto` decimal(15,2) DEFAULT NULL,
  `vl_prod` decimal(15,2) DEFAULT NULL,
  `vl_ipi` decimal(15,2) DEFAULT NULL,
  `vl_icms` decimal(15,2) DEFAULT NULL,
  `nr_perc_ipi` decimal(5,2) DEFAULT NULL,
  `nr_perc_icms` decimal(5,2) DEFAULT NULL,
  `nr_pedido_compra` decimal(15,0) DEFAULT NULL,
  `nr_item_pedido_compra` decimal(6,0) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_erpc_documentos_entrada_itens_erpc_documentos_entrada1` (`id_documento_entrada`),
  CONSTRAINT `fk_erpc_documentos_entrada_itens_erpc_documentos_entrada1` FOREIGN KEY (`id_documento_entrada`) REFERENCES `erpc_documentos_entrada` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=latin1;



CREATE TABLE if not exists  `erpc_pedidos_compra_documento_entrada` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_documento_entrada` int(11) NOT NULL,
  `id_pedido_compra` int(11) NOT NULL,
  `dt_inclusao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

drop table erpc_fornecedores_produtos;

CREATE TABLE if not exists `erpc_fornecedores_produtos` (
  `id_fornecedor` int(11) NOT NULL,
  `id_produto` int(11) NOT NULL,
  `st_ativo` tinyint(1) NOT NULL,
  `ds_cod_produto_fornecedor` varchar(60) NOT NULL,
  PRIMARY KEY (`st_ativo`,`id_fornecedor`,`id_produto`,`ds_cod_produto_fornecedor`),
  KEY `fk_erpc_fornecedores_has_erpc_produtos_erpc_produtos1_idx` (`id_produto`),
  KEY `fk_erpc_fornecedores_has_erpc_produtos_erpc_fornecedores1_idx` (`id_fornecedor`),
  CONSTRAINT `fk_erpc_fornecedores_has_erpc_produtos_erpc_fornecedores1` FOREIGN KEY (`id_fornecedor`) REFERENCES `erpc_fornecedores` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_erpc_fornecedores_has_erpc_produtos_erpc_produtos1` FOREIGN KEY (`id_produto`) REFERENCES `erpc_produtos` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DELIMITER $$
CREATE PROCEDURE `pr_incluir_xml_entrada_sefaz`(
	in _st_ativo int,  
	in _id_unidade int, 
	in _id_usuario int, 
	in _id_status_xml_importado int, 
	in _id_tipo_ambiente int, 
    in _st_tipo_entrada int, 
    in _ds_chave varchar(255), 
    in _ds_numnf varchar(100), 
    in _dh_emissao varchar(20), 
    in _vl_total_nfe decimal(15,2), 
    in _ds_xml_cnpj varchar(14), 
    in _ds_xml_razao varchar(255), 
    in _ds_numnsu int, 
    in _ds_recibo_sefaz varchar(100),
    in _ds_xml text, 
    in _ds_infcpl text,
    in _cd_status_nfe varchar(45),
    in _ds_status_nfe varchar(255)
    )
BEGIN
	/*CORPO DO PROCEDIMENTO*/
select	 COUNT(*)
into    @xml_existe
  from	erpc_documentos_entrada
where   ds_chave = _DS_CHAVE;

if @xml_existe=0 then
	insert into erpc_documentos_entrada(
    st_ativo, id_unidade, id_usuario, id_status_xml_importado, 
            	id_tipo_ambiente, st_tipo_entrada, 
                ds_chave, ds_numnf, dh_emissao, vl_total_nfe, 
                ds_xml_cnpj, ds_xml_razao, ds_numnsu, ds_recibo_sefaz,
            	ds_xml, ds_infcpl, cd_status_nfe, ds_status_nfe)
    values(
	_st_ativo,  _id_unidade, _id_usuario, _id_status_xml_importado, 
            	_id_tipo_ambiente, _st_tipo_entrada, 
                _ds_chave, _ds_numnf, _dh_emissao, _vl_total_nfe, 
                _ds_xml_cnpj, _ds_xml_razao, _ds_numnsu, _ds_recibo_sefaz,
            	_ds_xml, _ds_infcpl, _cd_status_nfe, _ds_status_nfe);
end if;

select @xml_existe;

END
$$

DELIMITER $$

CREATE PROCEDURE `pr_incluir_xml_entrada_fornecedor`(
	in _id_entrada int,
	in _id_usuario int, 
    in _ds_razao 		varchar(255), 
    in _ds_fantasia 	varchar(255), 
    in _ds_cpf_cnpj 	varchar( 45), 
    in _ds_cep 			varchar( 10), 
    in _ds_endereco 	varchar(255), 
    in _id_municipio 	int, 
    in _tp_tipo 		varchar( 01),
    in _ds_cod_cnae 	varchar( 45), 
    in _ds_ddi 			varchar( 45),
    in _ds_ddd 			varchar( 45),
    in _ds_telefone 	varchar( 45),
    in _ds_ie 			varchar( 45),
    in _ds_im 			varchar( 45)
    )
BEGIN
	/*CORPO DO PROCEDIMENTO*/
    declare _id_fornecedor int default 0;
    
select  id 
into    _id_fornecedor
  from	erpc_fornecedores
where   ds_cpf_cnpj = _ds_cpf_cnpj and st_ativo = 1 order by id limit 1;

if _id_fornecedor = 0 then
	insert into erpc_fornecedores(
		st_ativo, ds_codigo, id_usuario
				, ds_razao
				, ds_fantasia
				, ds_cpf_cnpj
				, ds_cep
				, ds_endereco
				, id_municipio
				, tp_tipo
				, ds_cod_cnae
				, ds_ddi
				, ds_ddd
				, ds_telefone
				, ds_ie
				, ds_im)
    values(	1, '00000000', _id_usuario
				, _ds_razao
				, _ds_fantasia
				, _ds_cpf_cnpj
				, _ds_cep
				, _ds_endereco
				, _id_municipio
				, _tp_tipo
				, _ds_cod_cnae
				, _ds_ddi
				, _ds_ddd
				, _ds_telefone
				, _ds_ie
				, _ds_im);
                
	SELECT LAST_INSERT_ID() into _id_fornecedor;
else
	update erpc_fornecedores 
    set ds_razao = _ds_razao,
		ds_fantasia = _ds_fantasia,
		ds_cep = _ds_cep,
		ds_endereco = _ds_endereco,
		id_municipio = _id_municipio,
		tp_tipo = _tp_tipo,
		ds_cod_cnae = _ds_cod_cnae,
		ds_ddi = _ds_ddi,
		ds_ddd = _ds_ddd,
		ds_telefone = _ds_telefone,
		ds_ie = _ds_ie,
		ds_im = _ds_im
	where id = _id_fornecedor;
end if;

update erpc_documentos_entrada set id_fornecedor = _id_fornecedor
where  id = _id_entrada;

select _id_fornecedor as ID;

END
$$

alter table erpc_saldos_enderecar add column dt_processado datetime;
CREATE TABLE if not exists erpc_documentos_saldo_enderecar (
   id int(11) auto_increment primary key not null
  ,ds_documento varchar(45)
  ,ds_documento_descricao varchar(255)
  ,dt_documento date COMMENT 'Data da criação do Documento'
  ,dh_alteracao timestamp
  ,id_tipo_movimentacao varchar(10) not null
  ,id_local_estoque int(11) not null
  ,dh_processamento datetime COMMENT 'Data em que é feito o processamento dos itens'
  ,id_usuario int(11)
  ,st_bloq boolean 
  ,st_ativo boolean 
  ,foreign key (id_tipo_movimentacao) references erpc_tipos_movimentacao(id)ON DELETE NO ACTION ON UPDATE NO ACTION
  ,foreign key (id_local_estoque) references erpc_local_estoque(id) ON DELETE NO ACTION ON UPDATE NO ACTION
  ,foreign key (id_usuario) references erpc_usuarios(id) ON DELETE NO ACTION ON UPDATE NO ACTION
);

create table if not exists erpc_documentos_saldo_enderecar_itens (
   id int auto_increment primary key
  ,id_documento_saldo int not null
  ,id_produto int not null
  ,id_unidade_medida varchar(2) not null
  ,vl_saldo_original decimal(10,2)
  ,vl_saldo_enderecar decimal(10,2)
  ,st_bloq boolean
  ,st_ativo boolean
  ,foreign key (id_documento_saldo) references erpc_documentos_saldo_enderecar(id)
  ,foreign key (id_produto) references erpc_produtos(id)
  ,foreign key (id_unidade_medida) references erpc_unidade_medida(id)
);

CREATE TABLE if not exists `erpc_documento_manual` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `id_local` int(11) NOT NULL,
   `id_unidade` int(11) NOT NULL,
   `id_tipo_movimentacao` varchar(10) NOT NULL,
   `id_tipo_documento` int(2) NOT NULL COMMENT '0-Entrada | 1-Saida',
   `ds_documento` varchar(100) DEFAULT NULL,
   `dh_criacao` datetime DEFAULT NULL,
   `vl_total_doc` decimal(15,2) NOT NULL,
   `ds_infCpl` text,
   `id_fornecedor` int(11) DEFAULT NULL,
   `id_usuario` int(11) NOT NULL,
   `st_ativo` tinyint(1) DEFAULT NULL,
   `dh_processamento` datetime,
   `dh_alteracao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (`id`),
   FOREIGN KEY (`id_local`) REFERENCES `erpc_local_estoque` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
   FOREIGN KEY (`id_unidade`) REFERENCES `erpc_unidades` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
   FOREIGN KEY (`id_tipo_movimentacao`) REFERENCES `erpc_tipos_movimentacao` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 CREATE TABLE if not exists `erpc_documento_manual_itens` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_documento_entrada` int(11) NOT NULL,
  `id_tipo_movimentacao` varchar(10) NOT NULL,
  `id_produto` int(11) NOT NULL,
  `id_unidade_medida` varchar(6) NOT NULL,
  `nr_quantidade` decimal(15,4) NOT NULL,
  `vl_unitario` decimal(15,2) DEFAULT NULL,
  `vl_desconto` decimal(15,2) DEFAULT NULL,
  `vl_ipi` decimal(15,2) DEFAULT NULL,
  `vl_icms` decimal(15,2) DEFAULT NULL,
  `nr_perc_ipi` decimal(5,2) DEFAULT NULL,
  `nr_perc_icms` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`id_documento_entrada`) REFERENCES `erpc_documento_manual` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/* Menu de FUncionalidades */
set foreign_key_checks = 0;
truncate table erpc_funcionalidades;
truncate table erpc_grupo_funcionalidade;
truncate table erpc_modulos_funcionalidades;
truncate table erpc_modulo_grupo;


INSERT INTO `erpc_funcionalidades` (`id`, `id_tipo_funcionalidade`, `ds_funcionalidade`, `ds_path_video`, `ds_path_funcionalidade`, `ds_label`, `st_menu`, `id_pai`, `st_ativo`) VALUES
(1, 1, 'Administração', NULL, NULL, '', 0, NULL, 0),
(2, 1, 'Faturamento', NULL, NULL, '', 0, NULL, 0),
(3, 1, 'Usuários', NULL, 'erpc_usuarios_list.php', NULL, 1, 1, 1),
(4, 1, 'Unidades', NULL, 'erpc_unidades_list.php', NULL, 1, 1, 1),
(5, 1, 'Clientes', NULL, 'erpc_clientes_list.php', NULL, 1, 1, 1),
(6, 1, 'Tipos Movimentação', NULL, 'erpc_tipos_movimentacao_list.php', NULL, 1, 1, 1),
(7, 1, 'Produtos', NULL, 'erpc_produtos_filter.php', 'Produtos', 1, 2, 1),
(8, 1, 'Cadastrar Pedido', NULL, 'erpc_pedidos_venda_add.php', NULL, 1, 2, 1),
(9, 1, 'Liberar Pedidos', NULL, 'erpc_pedidos_filter.php', NULL, 1, 2, 1),
(10, 1, 'Faturar Pedidos', '', 'erpc_faturar_pedidos_filter.php', '', 1, 2, 1),
(11, 1, 'Venda Rápida', NULL, 'erpc_venda_rapida_add.php', NULL, 1, 2, 1),
(12, 1, 'Fornecedores', NULL, 'erpc_fornecedores_list.php', NULL, 1, 2, 1),
(13, 1, 'Financeiro', '', '', 'FINANCEIRO', 1, 13, 1),
(14, 1, 'Plano Financeiro de Contas', '', 'erpc_financeiro_plano_contas_list.php', 'Plano Fin. Contas', 1, 13, 1),
(15, 1, 'Bancos', '', 'erpc_financeiro_bancos_list.php', 'Bancos', 1, 13, 1),
(16, 1, 'Ordem de Serviço', '', 'erpc_ordem_servico_list.php', 'Ordem de Serviço', 1, 0, 1),
(17, 1, 'Atendimentos', '', 'erpc_atendimentos_tipos_list.php', 'Atendimentos', 1, 0, 1),
(18, 1, 'Contas a Pagar', '', 'erpc_financeiro_contas_pagar_filter.php', 'Contas a Pagar', 1, 13, 1),
(19, 1, 'Contas a Receber', '', 'erpc_financeiro_contas_receber_filter.php', 'Contas a Receber', 1, 13, 1),
(20, 1, 'Tipos de Conta', '', 'erpc_financeiro_tipos_conta_list.php', 'Tipos de Conta', 1, 13, 1),
(21, 1, 'Contas Bancárias', '', 'erpc_financeiro_contas_bancarias_list.php', 'Contas Bancárias', 1, 13, 1),
(22, 1, 'Relatórios', '', '', 'Relatórios', 1, 22, 1),
(23, 1, 'Sintético de Vendas', '', 'erpc_report_filter.php?id=2', 'Sintético de Vendas', 1, 22, 1),
(24, 1, 'Exportar XML', '', 'erpc_report_venda_export_xml_filter.php', 'Exportar XML', 1, 22, 1),
(25, 1, 'Analítico de Vendas', '', 'erpc_report_filter.php?id=1', '', 1, 22, 1),
(26, 1, 'Grupos', NULL, 'erpc_usuarios_grupo_list.php', NULL, 1, 1, 1),
(27, 1, 'Grupos Funcionalidades', NULL, 'erpc_grupo_funcionalidade_edit.php', NULL, 1, 1, 1),
(28, 1, 'Modulos Funcionalidades', NULL, 'erpc_modulo_funcionalidade_edit.php', NULL, 1, 1, 1),
(29, 1, 'Funcionalidades', '', 'erpc_funcionalidades_list.php', '', 1, 0, 1),
(30, 1, 'PDV', '', 'javascript:window.open(\"erpc_codepdv.php\", \"ERP Code\", \"fullscreen=yes,titlebar=no,toolbar=no,menubar=no,location=no,top=0,left=0,width=1366,height=768\");', '', 1, 0, 1),
(31, 1, 'CFOP', '', 'erpc_cfop_list.php', '', 1, 0, 1),
(33, 1, 'Usuarios/Unidades', '', 'erpc_usuarios_unidades_list.php', '', 0, 0, 1),
(34, 1, 'Modulo Grupo', '', 'erpc_modulo_grupo_edit.php', '', 1, 0, 1),
(35, 1, 'Análise de Contas', NULL, 'erpc_financeiro_analise_contas_filter.php', 'Análise de Contas', 1, 22, 1),
(36, 1, 'Dashboard Financeiro', NULL, 'erpc_financeiro_dashboard.php', 'Dashboard Financeiro', 1, 22, 1),
(37, 1, 'Fluxo de Caixa', NULL, 'erpc_financeiro_fluxo_caixa_filter.php', '', 1, 22, 1),
(38, 1, 'Fluxo de Caixa Diário', NULL, 'erpc_financeiro_fluxo_diario_filter.php', '', 1, 22, 1),
(39, 1, 'Dashboard', NULL, 'erpc_dashboard.php', 'Dashboard', 1, 22, 1),
(40, 1, 'Vendedores', NULL, 'erpc_vendedores_list.php', 'Vendedores', 1, 0, 1),
(41, 1, 'Metas Vendedores', NULL, 'erpc_vendedores_metas_filter.php', 'Metas Vendedores', 1, 0, 1),
(42, 1, 'Metas Financeiras', NULL, 'erpc_financeiro_metas_filter.php', 'Metas Financeiras', 1, 0, 1),
(43, 1, 'Solicitação de Compra', NULL, 'erpc_solicitacao_compra_list.php', NULL, 1, 1, 1),
(44, 1, 'Cotação de Compra', NULL, 'erpc_cotacao_compra_list.php', NULL, 1, 1, 1),
(45, 1, 'Pedido de Compra', NULL, 'erpc_pedidos_compra_list.php', NULL, 1, 1, 1),
(46, 1, 'Importação XML', NULL, 'erpc_nfecode_importacao_painel.php', NULL, 1, 1, 1),
(47, 1, 'Locais de Estoque', '', 'erpc_armazens_locais_list.php', '', 1, 0, 1),
(48, 1, 'Bloqueio', '', 'erpc_armazens_locais_bloqueio_inventario_list.php', '', 1, 37, 1),
(49, 1, 'Inventário', '', '', '', 1, 37, 1),
(50, 1, 'Grupo de Produtos', '', 'erpc_produtos_grupo_list.php', '', 1, 0, 1),
(51, 1, 'Tabela de Preços', '', 'erpc_tabela_precos_list.php', '', 1, 0, 1),
(52, 1, 'Regiões', '', 'erpc_regiao_list.php', '', 1, 0, 1),
(53, 1, 'Ramo de Atividades', '', 'erpc_ramo_atividades_list.php', '', 1, 0, 1),
(54, 1, 'Endereçar Saldos', '', 'erpc_saldos_enderecar_list.php', '', 1, 0, 1),
(55, 1, 'Comissionamento', '', 'erpc_regras_comissionamento_list.php', '', 1, 0, 1),
(56, 1, 'Lançar Inventário', '', 'erpc_armazens_locais_lancar_inventario_list.php', '', 1, 0, 1),
(57, 1, 'Ponto de Pedido', '', 'erpc_report_filter_ptpedido.php', '', 1, 22, 1),
(58, 1, 'Documento Manual Entrada', '', 'erpc_documento_manual_entrada_filter.php', '', 1, 0, 1),
(59, 1, 'Documento Manual Saída', '', 'erpc_documento_manual_saida_filter.php', '', 1, 0, 1),
(60, 1, 'Bloq. / Desbloq. Produtos', '', 'erpc_armazens_locais_bloqueio_inventario_list.php', '', 1, 0, 1);


INSERT INTO `erpc_grupo_funcionalidade` (`id_grupo`, `id_funcionalidade`, `st_ativo`) VALUES
(1, 3, 1),
(1, 4, 1),
(1, 5, 1),
(1, 6, 1),
(1, 7, 1),
(1, 8, 1),
(1, 9, 1),
(1, 10, 1),
(1, 11, 1),
(1, 12, 1),
(1, 13, 1),
(1, 14, 1),
(1, 15, 1),
(1, 16, 1),
(1, 18, 1),
(1, 19, 1),
(1, 20, 1),
(1, 21, 1),
(1, 22, 1),
(1, 23, 1),
(1, 24, 1),
(1, 25, 1),
(1, 26, 1),
(1, 27, 1),
(1, 28, 1),
(1, 29, 1),
(1, 30, 1),
(1, 31, 1),
(1, 33, 1),
(1, 34, 1),
(1, 35, 1),
(1, 36, 1),
(1, 37, 1),
(1, 38, 1),
(1, 39, 1),
(1, 40, 1),
(1, 41, 1),
(1, 42, 1),
(1, 47, 1),
(1, 50, 1),
(1, 52, 1),
(1, 53, 1),
(1, 55, 1),
(1, 56, 1),
(1, 57, 1),
(1, 58, 1),
(1, 59, 1),
(1, 60, 1),
(2, 5, 1),
(2, 7, 1),
(2, 8, 1),
(2, 9, 1),
(2, 10, 1),
(2, 11, 1),
(2, 22, 1),
(2, 23, 1),
(2, 24, 1),
(2, 25, 1),
(2, 57, 1),
(3, 5, 1),
(3, 7, 1),
(3, 8, 1),
(3, 9, 1),
(3, 10, 1),
(3, 11, 1),
(4, 23, 1),
(4, 24, 1),
(4, 25, 1);

INSERT INTO `erpc_modulos_funcionalidades` (`id_modulo`, `id_funcionalidade`, `st_ativo`) VALUES
(1, 7, 1),
(1, 12, 1),
(1, 22, 1),
(1, 40, 1),
(1, 47, 1),
(1, 50, 1),
(1, 51, 1),
(1, 52, 1),
(1, 53, 1),
(1, 56, 1),
(1, 57, 1),
(1, 58, 1),
(1, 59, 1),
(6, 5, 1),
(6, 7, 1),
(6, 8, 1),
(6, 9, 1),
(6, 10, 1),
(6, 11, 1),
(6, 22, 1),
(6, 23, 1),
(6, 24, 1),
(6, 25, 1),
(6, 30, 1),
(8, 5, 1),
(8, 13, 1),
(8, 14, 1),
(8, 15, 1),
(8, 18, 1),
(8, 19, 1),
(8, 20, 1),
(8, 21, 1),
(8, 22, 1),
(8, 23, 1),
(8, 24, 1),
(8, 25, 1),
(8, 35, 1),
(8, 36, 1),
(8, 37, 1),
(8, 38, 1),
(8, 39, 1),
(8, 40, 1),
(8, 41, 1),
(8, 42, 1),
(13, 3, 1),
(13, 4, 1),
(13, 6, 1),
(13, 26, 1),
(13, 27, 1),
(13, 28, 1),
(13, 29, 1),
(13, 31, 1),
(13, 33, 1),
(13, 34, 1);


INSERT INTO `erpc_modulo_grupo` (`id_modulo`, `id_grupo`, `st_ativo`) VALUES
(1, 1, 1),
(3, 1, 1),
(6, 1, 1),
(6, 2, 1),
(6, 3, 1),
(6, 4, 1),
(8, 1, 1),
(13, 1, 1),
(15, 1, 1);

set foreign_key_checks = 1;

alter table erpc_documentos_saida modify column dt_emissao datetime;

INSERT INTO `erpc_parametros` (`ds_parametro`, `ds_valor`, `st_ativo`) VALUES
('vid_produtos', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_clientes', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_pedidovenda', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_liberarpedidovenda', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_vendanfe', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_entradamanual', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_saidamanual', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_pedidocompra', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_cotacao', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_vendarapida', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1),
('vid_pdv', 'https://youtu.be/gRYS9Zggp9I?list=PLf7vZ02bgXGW0fOSUwWxRxwW6xI2cFuOG', 1);


create table if not exists erpc_adquirentes (
	 id int(11) primary key auto_increment
    ,ds_adquirente varchar(50)
    ,vl_pr_taxa_debito decimal(4,2)
    ,vl_pr_taxa_credito_a_vista decimal(4,2)
    ,vl_pr_taxa_credito_parcelado decimal(4,2)
    ,st_ativo boolean
);

create table if not exists erpc_pedido_forma_pagamento (
	 id_pedido int(11)
    ,id_forma_pagamento int(11)
    ,vl_pagamento decimal(10,2)
    ,primary key(id_pedido, id_forma_pagamento)
    ,foreign key (id_pedido) references erpc_pedidos_venda(id)
    ,foreign key (id_forma_pagamento) references erpc_dom_forma_pagamento (id)
);

create table if not exists erpc_pedido_liberado_forma_pagamento (
	 id_pedido_liberado int(11)
    ,id_forma_pagamento int(11)
    ,vl_pagamento decimal(10,2)
    ,primary key(id_pedido_liberado, id_forma_pagamento)
    ,foreign key (id_pedido_liberado) references erpc_pedidos_venda_liberados(id)
    ,foreign key (id_forma_pagamento) references erpc_dom_forma_pagamento (id)
);




/* MULTIPLAS FORMAS DE PAGAMENTO */

-- alter table erpc_condicao_pagamento add column fl_gera_titulo_receber boolean;
CALL AddColumnUnlessExists('erpc_condicao_pagamento', 'fl_gera_titulo_receber', 'boolean');

delimiter ;

create table if not exists erpc_adquirentes (
	 id int(11) primary key auto_increment
    ,ds_adquirente varchar(50)
    ,vl_pr_taxa_debito decimal(4,2)
    ,vl_pr_taxa_credito_a_vista decimal(4,2)
    ,vl_pr_taxa_credito_parcelado decimal(4,2)
    ,st_ativo boolean
);

create table if not exists erpc_pedido_forma_pagamento (
	 id_pedido int(11)
    ,id_forma_pagamento int(11)
    ,vl_pagamento decimal(10,2)
    ,primary key(id_pedido, id_forma_pagamento)
    ,foreign key (id_pedido) references erpc_pedidos_venda(id)
    ,foreign key (id_forma_pagamento) references erpc_dom_forma_pagamento (id)
);

create table if not exists erpc_pedido_liberado_forma_pagamento (
	 id_pedido_liberado int(11)
    ,id_forma_pagamento int(11)
    ,vl_pagamento decimal(10,2)
    ,primary key(id_pedido_liberado, id_forma_pagamento)
    ,foreign key (id_pedido_liberado) references erpc_pedidos_venda_liberados(id)
    ,foreign key (id_forma_pagamento) references erpc_dom_forma_pagamento (id)
);


-- alter table erpc_adquirentes	add cd_adquirente 	varchar(03) not null;
-- alter table erpc_adquirentes	add ds_cnpj 		varchar(50);
-- alter table erpc_adquirentes	add cd_bandeira		varchar(03) not null default '99';
CALL AddColumnUnlessExists('erpc_adquirentes', 'cd_adquirente', ' varchar(03) not null');
CALL AddColumnUnlessExists('erpc_adquirentes', 'ds_cnpj', ' varchar(50)');
CALL AddColumnUnlessExists('erpc_adquirentes', 'cd_bandeira', ' varchar(03) not null default "99"');


-- alter table erpc_pedido_forma_pagamento 		 add id_adquirente int null;
-- alter table erpc_pedido_liberado_forma_pagamento add id_adquirente int null;
CALL AddColumnUnlessExists('erpc_pedido_forma_pagamento', 'id_adquirente', ' int null');
CALL AddColumnUnlessExists('erpc_pedido_liberado_forma_pagamento', 'id_adquirente', ' int null');

drop view  if exists vw_erpc_nfccode_geraxml_totais;

CREATE VIEW vw_erpc_nfccode_geraxml_totais AS
    SELECT 
        ds.id AS nr_documento,
        ds.ds_numnf AS ds_numnf,
        pv.vl_total_pedido AS vl_total_pedido,
        fp.cd_forma AS cMP,
        IF((IFNULL(pg.vl_pagamento, 0) = 0),
            pv.vl_total_pedido,
            pg.vl_pagamento) AS vMP
    FROM erpc_documentos_saida ds
        JOIN erpc_pedidos_documentos_saida 			dp ON ds.id = dp.id_documento_saida
        JOIN erpc_pedidos_venda_liberados 			pv  ON dp.id_pedido_liberados = pv.id
        JOIN erpc_pedidos_itens_liberados 			pp  ON  pv.id = pp.id_pedido_venda_liberado
        JOIN erpc_pedido_liberado_forma_pagamento	pg	ON  pv.id = pg.id_pedido_liberado
        JOIN erpc_dom_forma_pagamento   fp	ON pg.id_forma_pagamento = fp.id
    GROUP BY ds.id , ds.ds_numnf , pv.vl_total_pedido, fp.cd_forma
    ;
    
drop view  if exists vw_erpc_recibo_geraxml_totais;
    
CREATE VIEW vw_erpc_recibo_geraxml_totais AS
    SELECT 
        pv.id AS nr_documento,
        NULL AS ds_numnf,
        pv.vl_total_pedido AS vl_total_pedido,
        fp.cd_forma AS cMP,
        IF((IFNULL(pg.vl_pagamento, 0) = 0),
            pv.vl_total_pedido,
            pg.vl_pagamento) AS vMP
    FROM erpc_pedidos_venda_liberados pv
        JOIN erpc_pedidos_itens_liberados 			pp	ON pv.id = pp.id_pedido_venda_liberado
        JOIN erpc_pedido_liberado_forma_pagamento	pg	ON  pv.id = pg.id_pedido_liberado
        JOIN erpc_dom_forma_pagamento   			fp	ON pg.id_forma_pagamento = fp.id
    GROUP BY pv.id , fp.cd_forma
;

drop view  if exists vw_erpc_nfecode_geraxml_pagamentos;
/*
CREATE VIEW vw_erpc_nfecode_geraxml_pagamentos AS
    SELECT 
        ds.id AS nr_documento,
        ds.ds_numnf AS ds_numnf,
        fp.cd_forma AS tPag,
        IF((IFNULL(pf.vl_pagamento, 0) = 0),
            pv.vl_total_pedido,
            pf.vl_pagamento) AS vPag,
        ROUND(IF((IFNULL(pf.vl_pagamento, 0) > pv.vl_total_pedido),
                    (pf.vl_pagamento - pv.vl_total_pedido),
                    0),
                2) AS vTroco,
        '2' AS tpIntegra,
        IFNULL(ad.ds_cnpj	 , ''  ) AS CNPJ,
        IFNULL(ad.cd_bandeira, '99') AS tBand,
        '' AS cAut
    FROM erpc_documentos_saida ds
    JOIN erpc_pedidos_documentos_saida 			dp ON ds.id = dp.id_documento_saida
    JOIN erpc_pedidos_venda_liberados 			pv ON dp.id_pedido_liberados = pv.id
    JOIN erpc_pedidos_itens_liberados 			pp ON pv.id = pp.id_pedido_venda_liberado
    JOIN erpc_pedido_liberado_forma_pagamento 	pf ON pv.id = pf.id_pedido_liberado
    JOIN erpc_dom_forma_pagamento 				fp ON pf.id_forma_pagamento = fp.id
    LEFT JOIN erpc_adquirentes					ad ON pf.id_adquirente = ad.id
    GROUP BY ds.id , ds.ds_numnf , pv.vl_total_pedido , fp.cd_forma
    ;
*/

CREATE VIEW vw_erpc_nfecode_geraxml_pagamentos AS
    SELECT 
        ds.id AS nr_documento,
        ds.ds_numnf AS ds_numnf,
        fp.cd_forma AS tPag,
        IF((IFNULL(pf.vl_pagamento, 0) = 0),
            pv.vl_total_pedido,
            pf.vl_pagamento) AS vPag,
        ROUND(IF((IFNULL(pf.vl_pagamento, 0) > pv.vl_total_pedido),
                    (pf.vl_pagamento - pv.vl_total_pedido),
                    0),
                2) AS vTroco,
        '2' AS tpIntegra,
        '' AS CNPJ,
        IFNULL(bc.id, '99') AS tBand,
        '' AS cAut
    FROM erpc_documentos_saida ds
    JOIN erpc_pedidos_documentos_saida 			dp ON ds.id = dp.id_documento_saida
    JOIN erpc_pedidos_venda_liberados 			pv ON dp.id_pedido_liberados = pv.id
    JOIN erpc_pedidos_itens_liberados 			pp ON pv.id = pp.id_pedido_venda_liberado
    JOIN erpc_pedido_liberado_forma_pagamento 	pf ON pv.id = pf.id_pedido_liberado
    JOIN erpc_dom_forma_pagamento 				fp ON pf.id_forma_pagamento = fp.id
    LEFT JOIN erpc_bandeiras_cartoes			bc ON pf.id_bandeira = bc.id
    GROUP BY ds.id , ds.ds_numnf , pv.vl_total_pedido , fp.cd_forma
    ;
	
insert into erpc_adquirentes(st_ativo,  cd_adquirente, ds_adquirente, ds_cnpj)values
(1, '001','ADMINISTRADORA DE CARTÕES SICREDI LTDA. 03.106.213/0001-90','03106213000190'),
(1, '002','ADMINISTRADORA DE CARTÕES SICREDI LTDA.(FILIAL RS) 03.106.213/0002-71','03106213000271'),
(1, '003','BANCO AMERICAN EXPRESS S/A - AMEX 60.419.645/0001-95','60419645000195'),
(1, '004','BANCO GE - CAPITAL 62.421.979/0001-29','62421979000129'),
(1, '005','BANCO SAFRA S/A 58.160.789/0001-28','58160789000128'),
(1, '006','BANCO TOPÁZIO S/A 07.679.404/0001-00','07679404000100'),
(1, '007','BANCO TRIANGULO S/A 17.351.180/0001-59','17351180000159'),
(1, '008','BIGCARD ADM. DE CONVENIOS E SERV. 04.627.085/0001-93','04627085000193'),
(1, '009','BOURBON ADM. DE CARTÕES DE CRÉDITO 01.418.852/0001-66','01418852000166'),
(1, '010','CABAL BRASIL LTDA. 03.766.873/0001-06','03766873000106'),
(1, '011','CETELEM BRASIL S/A - CFI 03.722.919/0001-87','03722919000187'),
(1, '012','CIELO S/A 01.027.058/0001-91','01027058000191'),
(1, '013','CREDI 21 PARTICIPAÇÕES LTDA. 03.529.067/0001-06','03529067000106'),
(1, '014','ECX CARD ADM. E PROCESSADORA DE CARTÕES S/A 71.225.700/0001-22','71225700000122'),
(1, '015','EMPRESA BRAS. TEC. ADM. CONV. HOM. LTDA. - EMB RATEC 03.506.307/0001-57','03506307000157'),
(1, '016','EMPÓRIO CARD LTDA 04.432.048/0001-20','04432048000120'),
(1, '017','FREEDDOM E TECNOLOGIA E SERVIÇOS S/A 07.953.674/0001-50','07953674000150'),
(1, '018','FUNCIONAL CARD LTDA. 03.322.366/0001-75','03322366000175'),
(1, '019','HIPERCARD BANCO MULTIPLO S/A 03.012.230/0001-69','03012230000169'),
(1, '020','MAPA ADMIN. CONV. E CARTÕES LTDA. 03.966.317/0001-75','03966317000175'),
(1, '021','NOVO PAG ADM. E PROC. DE MEIOS ELETRÔNICOS DE PAGTO. LTDA. 00.163.051/0001-34','00163051000134'),
(1, '022','PERNAMBUCANAS FINANCIADORA S/A CRÉDITO, FIN.E INVEST. 43.180.355/0001-12','43180355000112'),
(1, '023','POLICARD SYSTEMS E SERVIÇOS LTDA. 00.904.951/0001-95','00904951000195'),
(1, '024','PROVAR NEGÓCIOS DE VAREJO LTDA. 33.098.658/0001-37','33098658000137'),
(1, '025','REDECARD S/A 01.425.787/0001-04','01425787000104'),
(1, '026','RENNER ADM. CARTÕES DE CRÉDITO LTDA. 90.055.609/0001-50','90055609000150'),
(1, '027','RP ADMINISTRAÇÃO DE CONVÊNIOS LTDA. 03.007.699/0001-00','03007699000100'),
(1, '028','SANTINVEST S/A CRÉDITO, FINANCIAMENTO E INVESTIMENTOS 00.122.327/0001-36','00122327000136'),
(1, '029','SODEXHO PASS DO BRASIL SERVIÇOS E COMÉRCIO S/A 69.034.668/0001-56','69034668000156'),
(1, '030','SOROCRED MEIOS DE PAGAMENTOS LTDA. 60.114.865/0001-00','60114865000100'),
(1, '031','TECNOLOGIA BANCÁRIA S/A - TECBAN 51.427.102/0004-71','51427102000471'),
(1, '032','TICKET SERVIÇOS S/A 47.866.934/0001-74','47866934000174'),
(1, '033','TRIVALE ADMINISTRAÇÃO LTDA. 00.604.122/0001-97','00604122000197'),
(1, '034','UNICARD BANCO MÚLTIPLO S/A - TRICARD 61.071.387/0001-61','61071387000161'),
(1, '999','OUTROS','');

-- consistir credito atrelado a forma de pagamento tb
CALL AddColumnUnlessExists('erpc_condicao_pagamento', 'fl_consiste_credito', 'boolean default 0');

drop table if exists erpc_bandeiras_cartoes;
create table if not exists erpc_bandeiras_cartoes (
	 id varchar(2) primary key
    ,ds_bandeira varchar(30)
    ,st_ativo boolean    
);

insert into erpc_bandeiras_cartoes (id, ds_bandeira, st_ativo) values 
('01', 'Visa', 1),
('02', 'Mastercard', 1),
('03', 'American Express', 1),
('04', 'Sorocred', 1),
('05', 'Diners Club', 1),
('06', 'Elo', 1),
('07', 'Hipercard', 1),
('08', 'Aura', 1),
('09', 'Cabal', 1),
('99', 'Outros', 1);

alter table erpc_pedido_forma_pagamento change id_adquirente id_bandeira varchar(2);
alter table erpc_pedido_liberado_forma_pagamento change id_adquirente id_bandeira varchar(2);

alter table erpc_pedidos_venda add column id_adquirente int;
alter table erpc_pedidos_venda_liberados add column id_adquirente int;

-- GESTAO DE PESSOAS
alter table erpc_gp_escalas  add column dt_inicio datetime
							,add column dt_fim datetime;
							
-- alter table erpc_gp_escala_colaborador add column id_funcao int after id_setor;							
CALL AddColumnUnlessExists('erpc_gp_escala_colaborador', 'id_funcao', ' int after id_setor');
							
alter table erpc_gp_escala_colaborador add primary key (id_escala, id_colaborador);

alter table erpc_gp_colaboradores change column ds_cidade id_municipio int(11);
alter table erpc_gp_colaboradores add column ds_numero varchar(15) after ds_endereco;							
alter table erpc_gp_colaboradores modify column vl_valor_hora decimal(10,2);
							
create table erpc_gp_tipos_contrato (
	 id int auto_increment primary key
    ,ds_tipo_contrato varchar(255)
    ,st_ativo boolean
);						
							
create table erpc_gp_parametros (
	 id int primary key auto_increment
    ,ds_chave varchar(255)
    ,ds_valor varchar(255)
    ,id_tipocontrato int
    ,st_ativo boolean
);							
							
							
							
							
							
							
							
							
							