-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Host: sql202.infinityfree.com:3306
-- Generation Time: Sep 05, 2025 at 07:58 PM
-- Server version: 8.0.30
-- PHP Version: 8.1.10

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `tracestock`
--

DELIMITER $$
--
-- Procedures
--
CREATE PROCEDURE `inserir_empresa_retorno` (IN `p_id_type_empresa` INT, IN `p_nome` VARCHAR(150), IN `p_razao_social` VARCHAR(200), IN `p_nif_cnpj` VARCHAR(20), IN `p_email_contato` VARCHAR(150), IN `p_telefone` VARCHAR(20), IN `p_website` VARCHAR(150), IN `p_endereco_rua` VARCHAR(150), IN `p_endereco_numero` VARCHAR(10), IN `p_endereco_complemento` VARCHAR(50), IN `p_endereco_bairro` VARCHAR(100), IN `p_endereco_cidade` VARCHAR(100), IN `p_endereco_estado` VARCHAR(50), IN `p_endereco_cep` VARCHAR(20), IN `p_endereco_pais` VARCHAR(50), IN `p_active` TINYINT, OUT `p_id_empresa` INT)   BEGIN
    INSERT INTO empresas (
        id_type_empresa,
        nome,
        razao_social,
        nif_cnpj,
        email_contato,
        telefone,
        website,
        endereco_rua,
        endereco_numero,
        endereco_complemento,
        endereco_bairro,
        endereco_cidade,
        endereco_estado,
        endereco_cep,
        endereco_pais,
        active
    ) VALUES (
        p_id_type_empresa,
        p_nome,
        p_razao_social,
        p_nif_cnpj,
        p_email_contato,
        p_telefone,
        p_website,
        p_endereco_rua,
        p_endereco_numero,
        p_endereco_complemento,
        p_endereco_bairro,
        p_endereco_cidade,
        p_endereco_estado,
        p_endereco_cep,
        p_endereco_pais,
        p_active
    );

    -- Retorna o id gerado
    SET p_id_empresa = LAST_INSERT_ID();
END$$

CREATE PROCEDURE `inserir_utilizador` (IN `p_id_empresa` INT, IN `p_telefone` VARCHAR(20), IN `p_foto` VARCHAR(255), IN `p_nome` VARCHAR(100), IN `p_apelido` VARCHAR(100), IN `p_email` VARCHAR(150), IN `p_pass` VARCHAR(255), IN `p_perms` VARCHAR(50), IN `p_active` TINYINT, OUT `p_id_user` INT)  DETERMINISTIC BEGIN
    INSERT INTO utilizadores (
        id_empresa,
        telefone,
        foto,
        nome,
        apelido,
        email,
        pass,
        perms,
        active
    ) VALUES (
        p_id_empresa,
        p_telefone,
        p_foto,
        p_nome,
        p_apelido,
        p_email,
        p_pass,
        p_perms,
        p_active
    );

    -- Retorna o ID gerado
    SET p_id_user = LAST_INSERT_ID();
END$$

DELIMITER ;

-- --------------------------------------------------------

--
-- Table structure for table `categorias_produtos`
--

CREATE TABLE `categorias_produtos` (
  `id_categoria` int UNSIGNED NOT NULL,
  `nome_categoria` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
  `type_categoria` enum('restaurant','construct') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `clientes`
--

CREATE TABLE `clientes` (
  `id_cliente` int UNSIGNED NOT NULL,
  `desconto_id` int UNSIGNED NOT NULL,
  `nome` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `data_nascimento` date DEFAULT NULL,
  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `nif` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereço` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `cod_postal` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `telefone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `telefone_comercial` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `desconto`
--

CREATE TABLE `desconto` (
  `id_desconto` int UNSIGNED NOT NULL,
  `tipo_desconto` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `nome_desconto` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `valor` float UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `empresas`
--

CREATE TABLE `empresas` (
  `id_empresa` int UNSIGNED NOT NULL,
  `id_type_empresa` int UNSIGNED NOT NULL,
  `nome` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `razao_social` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `nif_cnpj` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `email_contato` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `telefone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `website` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_rua` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_numero` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_complemento` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_bairro` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_cidade` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_estado` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_cep` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `endereco_pais` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'Portugal',
  `active` tinyint UNSIGNED NOT NULL DEFAULT '1',
  `criado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `atualizado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Dumping data for table `empresas`
--

INSERT INTO `empresas` (`id_empresa`, `id_type_empresa`, `nome`, `razao_social`, `nif_cnpj`, `email_contato`, `telefone`, `website`, `endereco_rua`, `endereco_numero`, `endereco_complemento`, `endereco_bairro`, `endereco_cidade`, `endereco_estado`, `endereco_cep`, `endereco_pais`, `active`, `criado_em`, `atualizado_em`) VALUES
(1, 1, 'System', 'System', '000000000000', 'system@system.com', '91000000', 'www.tracestock.page.pd', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 'sql202.infinityfree.com', 1, '2025-09-05 09:36:48', '2025-09-05 19:55:04');

-- --------------------------------------------------------

--
-- Table structure for table `empresa_contactos`
--

CREATE TABLE `empresa_contactos` (
  `id` int UNSIGNED NOT NULL,
  `telefone` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0',
  `email` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `estoque_produtos`
--

CREATE TABLE `estoque_produtos` (
  `id_produto_stock` int UNSIGNED NOT NULL,
  `quantidade` int UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `logs_estoque`
--

CREATE TABLE `logs_estoque` (
  `id_logs_estoque` int UNSIGNED NOT NULL,
  `id_user` int UNSIGNED NOT NULL,
  `produto_id` int UNSIGNED NOT NULL,
  `tipo_acao` enum('ENTRADA','SAIDA','AJUSTE','VENDA','COMPRA') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `quantidade` int UNSIGNED NOT NULL,
  `quantidade_anterior` int UNSIGNED DEFAULT NULL,
  `usuario` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `observacao` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
  `criado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `logs_sistema`
--

CREATE TABLE `logs_sistema` (
  `id_logs_stock` int UNSIGNED NOT NULL,
  `id_user_logs` int UNSIGNED NOT NULL,
  `acao` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `descricao` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  `ip` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `sucesso` tinyint(1) DEFAULT '1',
  `criado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `permissoes`
--

CREATE TABLE `permissoes` (
  `id_perm` int UNSIGNED NOT NULL,
  `id_user` int UNSIGNED NOT NULL,
  `dkey` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'user',
  `dvalue` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `produtos`
--

CREATE TABLE `produtos` (
  `id_produto` int UNSIGNED NOT NULL,
  `isbn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
  `id_categoria_produto` int UNSIGNED NOT NULL,
  `id_empresa` int UNSIGNED NOT NULL DEFAULT '0',
  `nome` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `descricao` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
  `preco` decimal(10,2) UNSIGNED NOT NULL,
  `criado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `atualizado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Table structure for table `server_data`
--

CREATE TABLE `server_data` (
  `id_type_empresa` int UNSIGNED NOT NULL,
  `type_empresa` enum('restaurant','construct') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Dumping data for table `server_data`
--

INSERT INTO `server_data` (`id_type_empresa`, `type_empresa`) VALUES
(1, 'restaurant'),
(2, 'construct');

-- --------------------------------------------------------

--
-- Table structure for table `utilizadores`
--

CREATE TABLE `utilizadores` (
  `id_user` int UNSIGNED NOT NULL,
  `id_empresa` int UNSIGNED NOT NULL DEFAULT '0',
  `telefone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `foto` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `nome` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `apelido` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `email` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `pass` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `perms` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `active` int NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Dumping data for table `utilizadores`
--

INSERT INTO `utilizadores` (`id_user`, `id_empresa`, `telefone`, `foto`, `nome`, `apelido`, `email`, `pass`, `perms`, `active`) VALUES
(1, 1, '+351910000000', NULL, 'Administrador', 'de Sistema', '%2Tracestock2%', '961b92eb7db10fabbcd25d6a9f1fd650f149fb48362e010683670b5140f65222', '{}', 1);

--
-- Triggers `utilizadores`
--
DELIMITER $$
CREATE TRIGGER `proteger_usuarios_delete` BEFORE DELETE ON `utilizadores` FOR EACH ROW BEGIN
    IF EXISTS (SELECT 1 FROM utilizadores_protegidos WHERE id_user = OLD.id_user) THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Este usuário está protegido e não pode ser deletado!';
    END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `proteger_usuarios_insert` BEFORE UPDATE ON `utilizadores` FOR EACH ROW BEGIN
    IF EXISTS (SELECT 1 FROM utilizadores_protegidos WHERE id_user = OLD.id_user) THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Este usuário está protegido e não pode ser inserido!';
    END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `proteger_usuarios_update` BEFORE UPDATE ON `utilizadores` FOR EACH ROW BEGIN
    IF EXISTS (SELECT 1 FROM utilizadores_protegidos WHERE id_user = OLD.id_user) THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Este usuário está protegido e não pode ser atualizado!';
    END IF;
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Table structure for table `utilizadores_protegidos`
--

CREATE TABLE `utilizadores_protegidos` (
  `id_user` int UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Dumping data for table `utilizadores_protegidos`
--

INSERT INTO `utilizadores_protegidos` (`id_user`) VALUES
(1);

-- --------------------------------------------------------

--
-- Table structure for table `vendas`
--

CREATE TABLE `vendas` (
  `id_venda` int UNSIGNED NOT NULL,
  `produto_id` int UNSIGNED NOT NULL,
  `utilizador_id` int UNSIGNED NOT NULL,
  `quantidade` int UNSIGNED NOT NULL,
  `preco_unitario` decimal(10,2) UNSIGNED NOT NULL,
  `desconto` decimal(10,2) UNSIGNED DEFAULT '0.00',
  `total` decimal(12,2) DEFAULT NULL,
  `metodo_pagamento` enum('DINHEIRO','CARTAO','PIX','TRANSFERENCIA') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `status` enum('CONCLUIDA','PENDENTE','CANCELADA') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'CONCLUIDA',
  `criado_em` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_all_empresas`
-- (See below for the actual view)
--
CREATE TABLE `view_all_empresas` (
`active` varchar(5)
,`dados_empresa` json
,`id` int unsigned
,`nome_empresa` varchar(150)
,`type_empresa` enum('restaurant','construct')
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_all_users`
-- (See below for the actual view)
--
CREATE TABLE `view_all_users` (
`active` varchar(5)
,`apelido` varchar(200)
,`email` varchar(200)
,`id` int unsigned
,`nome` varchar(200)
,`nome_empresa` varchar(150)
,`perms` json
,`telefone` varchar(50)
,`tipo` varchar(10)
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_clientes_desconto`
-- (See below for the actual view)
--
CREATE TABLE `view_clientes_desconto` (
`desconto` varchar(50)
,`desconto_id` int unsigned
,`id_cliente` int unsigned
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_logs_estoque`
-- (See below for the actual view)
--
CREATE TABLE `view_logs_estoque` (
`description` text
,`diferenca` bigint unsigned
,`id` int unsigned
,`nome` varchar(401)
,`produto_nome` varchar(100)
,`quantidade_atual` int unsigned
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_logs_system`
-- (See below for the actual view)
--
CREATE TABLE `view_logs_system` (
`descricao` text
,`id` int unsigned
,`nome` varchar(401)
,`sucesso` varchar(5)
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_produtos_empresa`
-- (See below for the actual view)
--
CREATE TABLE `view_produtos_empresa` (
`id` int unsigned
,`nome_empresa` varchar(150)
,`produtos` json
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_table_descontos`
-- (See below for the actual view)
--
CREATE TABLE `view_table_descontos` (
`id` int unsigned
,`type` varchar(50)
,`valor` float unsigned
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_type_empresa`
-- (See below for the actual view)
--
CREATE TABLE `view_type_empresa` (
`active` varchar(5)
,`id` int unsigned
,`nome_empresa` varchar(150)
,`tipo_empresa` enum('restaurant','construct')
);

-- --------------------------------------------------------

--
-- Stand-in structure for view `view_user_permissions`
-- (See below for the actual view)
--
CREATE TABLE `view_user_permissions` (
`active` varchar(5)
,`id` int unsigned
,`perm` varchar(50)
);

-- --------------------------------------------------------

--
-- Structure for view `view_all_empresas`
--
DROP TABLE IF EXISTS `view_all_empresas`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_all_empresas`  AS SELECT `e`.`id_empresa` AS `id`, `e`.`nome` AS `nome_empresa`, json_object('morada',json_object('rua',`e`.`endereco_rua`,'numero',`e`.`endereco_numero`,'localidade',`e`.`endereco_complemento`,'freguesia',`e`.`endereco_bairro`,'concelho',`e`.`endereco_cidade`,'distrito',`e`.`endereco_estado`,'codPost',`e`.`endereco_cep`,'nacionalidade',`e`.`endereco_pais`),'identificacao',json_object('razao',`e`.`razao_social`,'nif',`e`.`nif_cnpj`),'contactos',json_object('email',`e`.`email_contato`,'telefone',`e`.`telefone`,'website',`e`.`website`)) AS `dados_empresa`, `srv`.`type_empresa` AS `type_empresa`, (case when `e`.`active` then 'true' else 'false' end) AS `active` FROM (`empresas` `e` join `server_data` `srv` on((`srv`.`id_type_empresa` = `e`.`id_type_empresa`))) WHERE (`e`.`id_empresa` <> 1)  ;

-- --------------------------------------------------------

--
-- Structure for view `view_all_users`
--
DROP TABLE IF EXISTS `view_all_users`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_all_users`  AS SELECT `u`.`id_user` AS `id`, (`u`.`nome` collate utf8mb4_general_ci) AS `nome`, (`u`.`apelido` collate utf8mb4_general_ci) AS `apelido`, (`e`.`nome` collate utf8mb4_general_ci) AS `nome_empresa`, (`u`.`email` collate utf8mb4_general_ci) AS `email`, (`u`.`telefone` collate utf8mb4_general_ci) AS `telefone`, 'utilizador' AS `tipo`, coalesce(json_objectagg(`perms`.`dkey`,(case when (`perms`.`dvalue` = 1) then 'true' else 'false' end)),json_object()) AS `perms`, (case when (`u`.`active` = 1) then 'true' else 'false' end) AS `active` FROM ((`utilizadores` `u` join `empresas` `e` on((`e`.`id_empresa` = `u`.`id_empresa`))) left join `permissoes` `perms` on((`perms`.`id_user` = `u`.`id_user`))) GROUP BY `u`.`id_user``id_user`  ;

-- --------------------------------------------------------

--
-- Structure for view `view_clientes_desconto`
--
DROP TABLE IF EXISTS `view_clientes_desconto`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_clientes_desconto`  AS SELECT `c`.`id_cliente` AS `id_cliente`, `c`.`desconto_id` AS `desconto_id`, `d`.`nome_desconto` AS `desconto` FROM (`clientes` `c` join `desconto` `d` on((`c`.`desconto_id` = `d`.`id_desconto`)))  ;

-- --------------------------------------------------------

--
-- Structure for view `view_logs_estoque`
--
DROP TABLE IF EXISTS `view_logs_estoque`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_logs_estoque`  AS SELECT `le`.`id_logs_estoque` AS `id`, `p`.`nome` AS `produto_nome`, concat(`u`.`nome`,' ',`u`.`apelido`) AS `nome`, `le`.`quantidade` AS `quantidade_atual`, (`le`.`quantidade_anterior` - `le`.`quantidade`) AS `diferenca`, `le`.`observacao` AS `description` FROM ((`logs_estoque` `le` join `utilizadores` `u` on((`le`.`id_user` = `u`.`id_user`))) join `produtos` `p` on((`le`.`produto_id` = `p`.`id_produto`)))  ;

-- --------------------------------------------------------

--
-- Structure for view `view_logs_system`
--
DROP TABLE IF EXISTS `view_logs_system`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_logs_system`  AS SELECT `l`.`id_logs_stock` AS `id`, `l`.`descricao` AS `descricao`, (case when (`l`.`sucesso` = 1) then 'true' else 'false' end) AS `sucesso`, concat(`u`.`nome`,' ',`u`.`apelido`) AS `nome` FROM (`logs_sistema` `l` join `utilizadores` `u` on((`l`.`id_user_logs` = `u`.`id_user`))) ORDER BY `l`.`id_logs_stock` ASC LIMIT 0, 100100  ;

-- --------------------------------------------------------

--
-- Structure for view `view_produtos_empresa`
--
DROP TABLE IF EXISTS `view_produtos_empresa`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_produtos_empresa`  AS SELECT `e`.`id_empresa` AS `id`, `e`.`nome` AS `nome_empresa`, json_objectagg(`p`.`id_produto`,json_object('nome_produto',`p`.`nome`,'isbn_produto',`p`.`isbn`,'preco_produto',`p`.`preco`,'categoria_produto',`p`.`id_categoria_produto`,'quantidade_produto',`ep`.`quantidade`)) AS `produtos` FROM ((`empresas` `e` left join `produtos` `p` on((`p`.`id_empresa` = `e`.`id_empresa`))) left join `estoque_produtos` `ep` on((`ep`.`id_produto_stock` = `p`.`id_produto`))) GROUP BY `e`.`id_empresa`, `e`.`nome``nome`  ;

-- --------------------------------------------------------

--
-- Structure for view `view_table_descontos`
--
DROP TABLE IF EXISTS `view_table_descontos`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_table_descontos`  AS SELECT `desconto`.`id_desconto` AS `id`, `desconto`.`tipo_desconto` AS `type`, `desconto`.`valor` AS `valor` FROM `desconto``desconto`  ;

-- --------------------------------------------------------

--
-- Structure for view `view_type_empresa`
--
DROP TABLE IF EXISTS `view_type_empresa`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_type_empresa`  AS SELECT `emp`.`id_empresa` AS `id`, `emp`.`nome` AS `nome_empresa`, `srv`.`type_empresa` AS `tipo_empresa`, (case when (`emp`.`active` = 1) then 'true' else 'false' end) AS `active` FROM (`empresas` `emp` join `server_data` `srv` on((`srv`.`id_type_empresa` = `emp`.`id_type_empresa`)))  ;

-- --------------------------------------------------------

--
-- Structure for view `view_user_permissions`
--
DROP TABLE IF EXISTS `view_user_permissions`;

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_user_permissions`  AS SELECT `permissoes`.`id_user` AS `id`, `permissoes`.`dkey` AS `perm`, (case when (`permissoes`.`dvalue` = 1) then 'true' else 'false' end) AS `active` FROM `permissoes``permissoes`  ;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `categorias_produtos`
--
ALTER TABLE `categorias_produtos`
  ADD PRIMARY KEY (`id_categoria`),
  ADD KEY `FK_categorias_produtos_server_data` (`type_categoria`);

--
-- Indexes for table `clientes`
--
ALTER TABLE `clientes`
  ADD PRIMARY KEY (`id_cliente`) USING BTREE,
  ADD UNIQUE KEY `nif` (`nif`),
  ADD KEY `fk_get_desconto_id_by_table_desconto` (`desconto_id`);

--
-- Indexes for table `desconto`
--
ALTER TABLE `desconto`
  ADD PRIMARY KEY (`id_desconto`);

--
-- Indexes for table `empresas`
--
ALTER TABLE `empresas`
  ADD PRIMARY KEY (`id_empresa`) USING BTREE,
  ADD UNIQUE KEY `nif_cnpj` (`nif_cnpj`),
  ADD UNIQUE KEY `nome` (`nome`),
  ADD KEY `fk_id_type_empresa` (`id_type_empresa`);

--
-- Indexes for table `empresa_contactos`
--
ALTER TABLE `empresa_contactos`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `estoque_produtos`
--
ALTER TABLE `estoque_produtos`
  ADD PRIMARY KEY (`id_produto_stock`),
  ADD UNIQUE KEY `id_produto_stock` (`id_produto_stock`);

--
-- Indexes for table `logs_estoque`
--
ALTER TABLE `logs_estoque`
  ADD PRIMARY KEY (`id_logs_estoque`) USING BTREE,
  ADD KEY `fk_produto_log` (`produto_id`),
  ADD KEY `fk_get_log_stock_user_id_by_table_utilizadores` (`id_user`);

--
-- Indexes for table `logs_sistema`
--
ALTER TABLE `logs_sistema`
  ADD PRIMARY KEY (`id_logs_stock`) USING BTREE,
  ADD KEY `fk_get_user_id_logs_by_table_utilizadores` (`id_user_logs`);

--
-- Indexes for table `permissoes`
--
ALTER TABLE `permissoes`
  ADD PRIMARY KEY (`id_perm`) USING BTREE,
  ADD KEY `fk_get_user_id_by_table_admin` (`id_user`);

--
-- Indexes for table `produtos`
--
ALTER TABLE `produtos`
  ADD PRIMARY KEY (`id_produto`) USING BTREE,
  ADD UNIQUE KEY `isbn` (`isbn`),
  ADD KEY `fk_get_categoria_produto_id_by_table_categorias` (`id_categoria_produto`),
  ADD KEY `fk_get_produto_empresa_id_by_table_empresas` (`id_empresa`);

--
-- Indexes for table `server_data`
--
ALTER TABLE `server_data`
  ADD PRIMARY KEY (`id_type_empresa`) USING BTREE,
  ADD KEY `type_empresa` (`type_empresa`);

--
-- Indexes for table `utilizadores`
--
ALTER TABLE `utilizadores`
  ADD PRIMARY KEY (`id_user`) USING BTREE,
  ADD KEY `fk_get_empresa_id_by_table_empresas` (`id_empresa`);

--
-- Indexes for table `utilizadores_protegidos`
--
ALTER TABLE `utilizadores_protegidos`
  ADD PRIMARY KEY (`id_user`);

--
-- Indexes for table `vendas`
--
ALTER TABLE `vendas`
  ADD PRIMARY KEY (`id_venda`) USING BTREE,
  ADD KEY `fk_get_produto_by_table_produtos` (`produto_id`),
  ADD KEY `fk_get_user_by_table_utilizadores` (`utilizador_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `categorias_produtos`
--
ALTER TABLE `categorias_produtos`
  MODIFY `id_categoria` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `clientes`
--
ALTER TABLE `clientes`
  MODIFY `id_cliente` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `desconto`
--
ALTER TABLE `desconto`
  MODIFY `id_desconto` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `empresas`
--
ALTER TABLE `empresas`
  MODIFY `id_empresa` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT for table `empresa_contactos`
--
ALTER TABLE `empresa_contactos`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `logs_estoque`
--
ALTER TABLE `logs_estoque`
  MODIFY `id_logs_estoque` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `logs_sistema`
--
ALTER TABLE `logs_sistema`
  MODIFY `id_logs_stock` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `permissoes`
--
ALTER TABLE `permissoes`
  MODIFY `id_perm` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `produtos`
--
ALTER TABLE `produtos`
  MODIFY `id_produto` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `server_data`
--
ALTER TABLE `server_data`
  MODIFY `id_type_empresa` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

--
-- AUTO_INCREMENT for table `utilizadores`
--
ALTER TABLE `utilizadores`
  MODIFY `id_user` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT for table `vendas`
--
ALTER TABLE `vendas`
  MODIFY `id_venda` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `categorias_produtos`
--
ALTER TABLE `categorias_produtos`
  ADD CONSTRAINT `FK_categorias_produtos_server_data` FOREIGN KEY (`type_categoria`) REFERENCES `server_data` (`type_empresa`) ON DELETE CASCADE;

--
-- Constraints for table `clientes`
--
ALTER TABLE `clientes`
  ADD CONSTRAINT `fk_get_desconto_id_by_table_desconto` FOREIGN KEY (`desconto_id`) REFERENCES `desconto` (`id_desconto`);

--
-- Constraints for table `empresas`
--
ALTER TABLE `empresas`
  ADD CONSTRAINT `fk_id_type_empresa` FOREIGN KEY (`id_type_empresa`) REFERENCES `server_data` (`id_type_empresa`);

--
-- Constraints for table `estoque_produtos`
--
ALTER TABLE `estoque_produtos`
  ADD CONSTRAINT `fk_get_id_produto_by_table_produtos` FOREIGN KEY (`id_produto_stock`) REFERENCES `produtos` (`id_produto`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Constraints for table `logs_estoque`
--
ALTER TABLE `logs_estoque`
  ADD CONSTRAINT `fk_get_log_stock_user_id_by_table_utilizadores` FOREIGN KEY (`id_user`) REFERENCES `utilizadores` (`id_user`),
  ADD CONSTRAINT `fk_produto_log` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`id_produto`) ON DELETE CASCADE;

--
-- Constraints for table `logs_sistema`
--
ALTER TABLE `logs_sistema`
  ADD CONSTRAINT `fk_get_user_id_logs_by_table_utilizadores` FOREIGN KEY (`id_user_logs`) REFERENCES `utilizadores` (`id_user`) ON DELETE CASCADE;

--
-- Constraints for table `permissoes`
--
ALTER TABLE `permissoes`
  ADD CONSTRAINT `fk_get_user_id_by_table_utilizadores` FOREIGN KEY (`id_user`) REFERENCES `utilizadores` (`id_user`) ON DELETE CASCADE;

--
-- Constraints for table `produtos`
--
ALTER TABLE `produtos`
  ADD CONSTRAINT `fk_get_categoria_produto_id_by_table_categorias` FOREIGN KEY (`id_categoria_produto`) REFERENCES `categorias_produtos` (`id_categoria`),
  ADD CONSTRAINT `fk_get_produto_empresa_id_by_table_empresas` FOREIGN KEY (`id_empresa`) REFERENCES `empresas` (`id_empresa`) ON DELETE CASCADE;

--
-- Constraints for table `utilizadores`
--
ALTER TABLE `utilizadores`
  ADD CONSTRAINT `fk_get_empresa_id_by_table_empresas` FOREIGN KEY (`id_empresa`) REFERENCES `empresas` (`id_empresa`) ON DELETE CASCADE;

--
-- Constraints for table `utilizadores_protegidos`
--
ALTER TABLE `utilizadores_protegidos`
  ADD CONSTRAINT `fk_get_utilizadores_protegidos` FOREIGN KEY (`id_user`) REFERENCES `utilizadores` (`id_user`);

--
-- Constraints for table `vendas`
--
ALTER TABLE `vendas`
  ADD CONSTRAINT `fk_get_produto_by_table_produtos` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`id_produto`),
  ADD CONSTRAINT `fk_get_user_by_table_utilizadores` FOREIGN KEY (`utilizador_id`) REFERENCES `utilizadores` (`id_user`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
