  SELECT colaborador.id, colaborador.nome_completo, colaborador.cpf, colaborador.dt_nascimento,
           colaborador.celular, colaborador.email, status_colaborador.status, recusado.motivo as recusado_motivo
    FROM colaborador
    INNER JOIN departamento ON departamento.usuarios_id = ? AND colaborador.departamento_id = departamento.id
    INNER JOIN status_colaborador ON colaborador.status_idstatus = status_colaborador.idstatus
    LEFT JOIN recusado ON recusado.colaborador_id = colaborador.id AND colaborador.status_idstatus = 3
    WHERE colaborador.status_idstatus IN (1, 3) AND colaborador.cliente_id = ?



responder:pt-br

Stack: PHP & Mysql
TaiwInd cnd
Moderno e colorido com bordas arrendondadas
PHP Puro sem componentes externos (composer)
Criar: CRUD somente das tabelas (pedido e colaborador)

1. Observe duas imagens anexas: (Pedido e Colaborador)

2. Criar tela de login (Usuario e senha) capturar empresa_id
Observações: Senha configurada:  JWT com HS256 
Chave: $2y$15$Hvsfvtir5Y8BCPWfVgEc8Otp86waax.9X/V7BeGTglCqztyTP.Yjy
Permitir troca de senha a partir senha Atual


3. Criar formulario: Colaborador
Campos:
Cliente: Tipo: Select 
<SELECT
    `cliente`.`id`
    , `cliente`.`razao_social`
    , `usuarios`.`id`
FROM
    `cardix`.`cliente`
    INNER JOIN `cardix`.`usuarios` 
        ON (`cliente`.`usuarios_id` = usuarios.`usuarios`.`id`)
WHERE (`usuarios`.`id` =1)
ORDER BY `cliente`.`razao_social` ASC; >
Exibir apenas: razao_social

estado: Tipo: Radio 
<SELECT
    `id`
    , `sigla`
FROM
    `cardix`.`estado`
ORDER BY `sigla` ASC;>
Exibir: sigla
Default = 1

departamento: Tipo Radio 
<SELECT
    `id`
    , `departamento`
    , `usuarios_id`
FROM
    `cardix`.`departamento`
WHERE (`usuarios_id` =usuarios.`usuarios`.`id`)
ORDER BY `departamento` ASC;>

cpf: 
Preenchimento com mascara: Exemplo: 009.386.058-79
Criar validação (digito vericador, impedir sequencias)


4. Criar Formulario de Pedido
Campos:
Cliente: Tipo: Radio ja True (Pois select abaixo ja captura cliente_id) armazenar: cliente_id
<SELECT
    `cliente`.`id`
    , `cliente`.`razao_social`
    , `usuarios`.`id`
FROM
    `cardix`.`cliente`
    INNER JOIN `cardix`.`usuarios` 
        ON (`cliente`.`usuarios_id` = usuarios.`usuarios`.`id`)
WHERE (`usuarios`.`id` =1)
ORDER BY `cliente`.`razao_social` ASC; >
Exibir apenas: razao_social

produto: Tipo Radio
<SELECT
    `idproduto_empresa`
    , `cliente_id`
    , `produto_id`
    , `razao_social`
    , `produto`
FROM
    `cardix`.`view_produto_empresa`
WHERE (`cliente_id` = formulario.pedido.cliente_id) -- campo armazenado no formulario pedido campo cliente
ORDER BY `produto` ASC;>

colaborador: tipo select (modal, ajax)
<SELECT
    `id`
    , `nome_completo`
    , `status_idstatus`
    , `cliente_id`
FROM
    `cardix`.`colaborador`
WHERE (`status_idstatus` =2
    AND (`cliente_id` = formulario.pedido.cliente_id)) -- campo armazenado no formulario pedido campo cliente
ORDER BY `nome_completo` ASC;>
Exibir: nome_completo

valor: tipo: decimal (10,2) moeda default = 0,00

observacao: vchar(60)


<conexao>
Serever: 31.97.64.165
Bd: cardix
Password: DIpIYIp25O
User: wander
</conexao>

/*
SQLyog Ultimate v12.5.1 (64 bit)
MySQL - 11.8.5-MariaDB-ubu2404-log : Database - cardix
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`cardix` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;

USE `cardix`;

/*Table structure for table `UserLevelPermissions` */

DROP TABLE IF EXISTS `UserLevelPermissions`;

CREATE TABLE `UserLevelPermissions` (
  `UserLevelID` int(11) NOT NULL,
  `TableName` varchar(255) NOT NULL,
  `Permission` int(11) NOT NULL,
  PRIMARY KEY (`UserLevelID`,`TableName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `UserLevels` */

DROP TABLE IF EXISTS `UserLevels`;

CREATE TABLE `UserLevels` (
  `ID` int(11) NOT NULL,
  `Name` varchar(255) NOT NULL,
  `Hierarchy` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `cliente` */

DROP TABLE IF EXISTS `cliente`;

CREATE TABLE `cliente` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `razao_social` varchar(200) NOT NULL,
  `cnpj` char(18) NOT NULL,
  `ativo` tinyint(1) NOT NULL DEFAULT 1,
  `endereco` varchar(150) NOT NULL,
  `bairro` varchar(100) NOT NULL,
  `cidade` varchar(100) NOT NULL,
  `cep` varchar(9) NOT NULL,
  `email` varchar(150) DEFAULT NULL,
  `telefone` varchar(20) NOT NULL,
  `estado_id` int(11) NOT NULL DEFAULT 1,
  `site` varchar(150) DEFAULT NULL,
  `consultor_idconsultor` int(3) unsigned zerofill NOT NULL DEFAULT 001,
  `usuarios_id` int(3) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_cnpj` (`cnpj`),
  KEY `fk_tenant_estado1_idx` (`estado_id`),
  KEY `fk_cliente_consultor1_idx` (`consultor_idconsultor`),
  KEY `fk_cliente_usuarios1_idx` (`usuarios_id`),
  CONSTRAINT `fk_cliente_consultor1` FOREIGN KEY (`consultor_idconsultor`) REFERENCES `consultor` (`idconsultor`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_cliente_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_tenant_estado1` FOREIGN KEY (`estado_id`) REFERENCES `estado` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `colaborador` */

DROP TABLE IF EXISTS `colaborador`;

CREATE TABLE `colaborador` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `cpf` char(14) NOT NULL,
  `email` varchar(150) NOT NULL,
  `nome_completo` varchar(200) NOT NULL,
  `celular` varchar(20) NOT NULL,
  `departamento_id` int(2) NOT NULL DEFAULT 1,
  `endereco` varchar(150) NOT NULL,
  `nr` varchar(10) NOT NULL,
  `bairro` varchar(45) NOT NULL,
  `cidade` varchar(60) NOT NULL,
  `estado_id` int(11) NOT NULL DEFAULT 1,
  `dt_nascimento` date NOT NULL,
  `nome_mae` varchar(100) NOT NULL,
  `cep` varchar(10) NOT NULL,
  `complemento` varchar(20) DEFAULT NULL,
  `status_idstatus` int(1) unsigned zerofill NOT NULL DEFAULT 1,
  `cliente_id` int(5) NOT NULL,
  `usuarios_id` int(3) NOT NULL,
  `id_envia_colaborador` int(5) unsigned zerofill NOT NULL DEFAULT 00000,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_colab_tenant_cpf` (`cpf`),
  UNIQUE KEY `uk_colab_tenant_id` (`id`),
  KEY `fk_colaborador_estado1_idx` (`estado_id`),
  KEY `fk_colab_departamento` (`departamento_id`),
  KEY `fk_colaborador_status1_idx` (`status_idstatus`),
  KEY `fk_colaborador_cliente1_idx` (`cliente_id`),
  KEY `fk_colaborador_usuarios1_idx` (`usuarios_id`),
  CONSTRAINT `fk_colab_departamento` FOREIGN KEY (`departamento_id`) REFERENCES `departamento` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `fk_colaborador_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_colaborador_estado1` FOREIGN KEY (`estado_id`) REFERENCES `estado` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_colaborador_status1` FOREIGN KEY (`status_idstatus`) REFERENCES `status_colaborador` (`idstatus`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_colaborador_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=225 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `consultor` */

DROP TABLE IF EXISTS `consultor`;

CREATE TABLE `consultor` (
  `idconsultor` int(3) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `consultor` varchar(100) NOT NULL,
  `email` varchar(120) DEFAULT NULL,
  `celular` varchar(60) NOT NULL,
  `obs` varchar(100) DEFAULT NULL,
  `tipo_consultor_idtipo_consultor` int(3) unsigned zerofill NOT NULL,
  PRIMARY KEY (`idconsultor`),
  KEY `fk_consultor_tipo_consultor1_idx` (`tipo_consultor_idtipo_consultor`),
  CONSTRAINT `fk_consultor_tipo_consultor1` FOREIGN KEY (`tipo_consultor_idtipo_consultor`) REFERENCES `tipo_consultor` (`idtipo_consultor`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `contato` */

DROP TABLE IF EXISTS `contato`;

CREATE TABLE `contato` (
  `idcontato` int(3) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `contato` varchar(100) NOT NULL,
  `celular` varchar(30) NOT NULL,
  `whatsaap` tinyint(1) NOT NULL DEFAULT 1,
  `obs` varchar(60) DEFAULT NULL,
  `cliente_id1` int(5) NOT NULL,
  PRIMARY KEY (`idcontato`),
  KEY `fk_contato_cliente1_idx1` (`cliente_id1`),
  CONSTRAINT `fk_contato_cliente1` FOREIGN KEY (`cliente_id1`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `departamento` */

DROP TABLE IF EXISTS `departamento`;

CREATE TABLE `departamento` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `departamento` varchar(100) NOT NULL,
  `usuarios_id` int(3) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_departamento_usuarios1_idx` (`usuarios_id`),
  CONSTRAINT `fk_departamento_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `envia_colaborador` */

DROP TABLE IF EXISTS `envia_colaborador`;

CREATE TABLE `envia_colaborador` (
  `idenvia_colaborador` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `cliente_id` int(5) NOT NULL,
  `usuarios_id` int(3) NOT NULL,
  `obs` varchar(100) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`idenvia_colaborador`),
  KEY `fk_envia_colaborador_cliente1_idx` (`cliente_id`),
  KEY `fk_envia_colaborador_usuarios1_idx` (`usuarios_id`),
  CONSTRAINT `fk_envia_colaborador_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_envia_colaborador_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `envia_pedido` */

DROP TABLE IF EXISTS `envia_pedido`;

CREATE TABLE `envia_pedido` (
  `idenvia_pedido` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `cliente_id` int(5) NOT NULL,
  `usuarios_id` int(3) NOT NULL,
  `dt_liberacao` date NOT NULL,
  `total_pedido` decimal(10,2) NOT NULL DEFAULT 0.00,
  `obs` varchar(100) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `produto_id` int(5) NOT NULL,
  PRIMARY KEY (`idenvia_pedido`),
  KEY `fk_envia_pedido_cliente1_idx` (`cliente_id`),
  KEY `fk_envia_pedido_usuarios1_idx` (`usuarios_id`),
  KEY `fk_envia_pedido_produto1_idx` (`produto_id`),
  CONSTRAINT `fk_envia_pedido_produto1` FOREIGN KEY (`produto_id`) REFERENCES `produto` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_envia_pedido_usuarios` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_envia_pedidor_cliente` FOREIGN KEY (`cliente_id`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `estado` */

DROP TABLE IF EXISTS `estado`;

CREATE TABLE `estado` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `sigla` char(2) NOT NULL,
  `estado` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_estado_sigla` (`sigla`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `exporta_colaborador` */

DROP TABLE IF EXISTS `exporta_colaborador`;

CREATE TABLE `exporta_colaborador` (
  `id_exporta_colaborador` int(5) NOT NULL AUTO_INCREMENT,
  `cpf` char(11) NOT NULL,
  `email` varchar(150) NOT NULL,
  `primeiro_segundo_nome` varchar(100) NOT NULL,
  `sobrenome` varchar(60) NOT NULL,
  `dt_nascimento` date NOT NULL,
  `nome_mae` varchar(100) NOT NULL,
  `cep` varchar(10) NOT NULL,
  `endereco` varchar(150) NOT NULL,
  `nr` varchar(10) NOT NULL,
  `bairro` varchar(45) NOT NULL,
  `cidade` varchar(60) NOT NULL,
  `uf` char(2) NOT NULL,
  `complemento` varchar(20) DEFAULT NULL,
  `celular` varchar(20) NOT NULL,
  `departamento` varchar(100) NOT NULL,
  `cliente_id` int(5) NOT NULL,
  `idstatus` int(1) NOT NULL DEFAULT 1,
  `usuarios_id` int(3) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `envia_colaborador_idenvia_colaborador` int(5) unsigned zerofill NOT NULL,
  PRIMARY KEY (`id_exporta_colaborador`),
  KEY `fk_exporta_colaborador_envia_colaborador1_idx` (`envia_colaborador_idenvia_colaborador`),
  CONSTRAINT `fk_exporta_colaborador_envia_colaborador1` FOREIGN KEY (`envia_colaborador_idenvia_colaborador`) REFERENCES `envia_colaborador` (`idenvia_colaborador`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=301 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `exporta_pedido` */

DROP TABLE IF EXISTS `exporta_pedido`;

CREATE TABLE `exporta_pedido` (
  `idexporta_pedido` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `cpf` varchar(11) NOT NULL,
  `valor` decimal(10,2) NOT NULL DEFAULT 0.00,
  `idenvia_pedido` int(5) unsigned zerofill NOT NULL DEFAULT 00000,
  `usuarios_id` int(3) NOT NULL,
  `cliente_id` int(5) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `produto_id` int(5) NOT NULL,
  PRIMARY KEY (`idexporta_pedido`),
  KEY `fk_exporta_pedido_envia_pedido1_idx` (`idenvia_pedido`),
  KEY `fk_exporta_pedido_usuarios1_idx` (`usuarios_id`),
  KEY `fk_exporta_pedido_cliente1_idx` (`cliente_id`),
  KEY `fk_exporta_pedido_produto1_idx` (`produto_id`),
  CONSTRAINT `fk_exporta_pedido_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_exporta_pedido_envia_pedido1` FOREIGN KEY (`idenvia_pedido`) REFERENCES `envia_pedido` (`idenvia_pedido`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_exporta_pedido_produto1` FOREIGN KEY (`produto_id`) REFERENCES `produto` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_exporta_pedido_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `pedido` */

DROP TABLE IF EXISTS `pedido`;

CREATE TABLE `pedido` (
  `id` int(5) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `cliente_id` int(5) NOT NULL,
  `colaborador_id` int(5) NOT NULL,
  `valor` decimal(10,2) NOT NULL DEFAULT 0.00,
  `obs` varchar(60) DEFAULT NULL,
  `usuarios_id` int(3) NOT NULL,
  `idenvia_pedido` int(5) unsigned zerofill NOT NULL DEFAULT 00000,
  `idstatus_pedido` int(1) unsigned zerofill NOT NULL DEFAULT 1,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `update_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `produto_id` int(5) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unico` (`colaborador_id`,`idenvia_pedido`,`cliente_id`,`produto_id`) COMMENT 'Colaborador Unico',
  KEY `fk_pedido_item_usuarios1_idx` (`usuarios_id`),
  KEY `fk_pedido_item_colaborador1_idx` (`colaborador_id`),
  KEY `fk_pedido_item_cliente1_idx` (`cliente_id`),
  KEY `fk_pedido_status_pedido1_idx` (`idstatus_pedido`),
  KEY `fk_pedido_produto1_idx` (`produto_id`),
  CONSTRAINT `fk_pedido_item_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_pedido_item_colaborador1` FOREIGN KEY (`colaborador_id`) REFERENCES `colaborador` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_pedido_item_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_pedido_produto1` FOREIGN KEY (`produto_id`) REFERENCES `produto` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_pedido_status_pedido1` FOREIGN KEY (`idstatus_pedido`) REFERENCES `status_pedido` (`idstatus_pedido`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `produto` */

DROP TABLE IF EXISTS `produto`;

CREATE TABLE `produto` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `produto` varchar(150) NOT NULL,
  `ativo` tinyint(1) NOT NULL DEFAULT 1,
  `usuarios_id` int(3) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_produto_tenant_nome` (`produto`),
  UNIQUE KEY `uk_produto_tenant_id` (`id`),
  KEY `fk_produto_usuarios1_idx` (`usuarios_id`),
  CONSTRAINT `fk_produto_usuarios1` FOREIGN KEY (`usuarios_id`) REFERENCES `usuarios` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `produto_empresa` */

DROP TABLE IF EXISTS `produto_empresa`;

CREATE TABLE `produto_empresa` (
  `idproduto_empresa` int(3) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `obs` varchar(150) DEFAULT NULL,
  `cliente_id` int(5) NOT NULL,
  `produto_id` int(5) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`idproduto_empresa`),
  KEY `fk_produto_empresa_cliente1_idx` (`cliente_id`),
  KEY `fk_produto_empresa_produto1_idx` (`produto_id`),
  CONSTRAINT `fk_produto_empresa_cliente1` FOREIGN KEY (`cliente_id`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_produto_empresa_produto1` FOREIGN KEY (`produto_id`) REFERENCES `produto` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `status_colaborador` */

DROP TABLE IF EXISTS `status_colaborador`;

CREATE TABLE `status_colaborador` (
  `idstatus` int(1) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `status` varchar(20) NOT NULL,
  PRIMARY KEY (`idstatus`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `status_pedido` */

DROP TABLE IF EXISTS `status_pedido`;

CREATE TABLE `status_pedido` (
  `idstatus_pedido` int(1) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `status` varchar(30) NOT NULL,
  PRIMARY KEY (`idstatus_pedido`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `tipo_consultor` */

DROP TABLE IF EXISTS `tipo_consultor`;

CREATE TABLE `tipo_consultor` (
  `idtipo_consultor` int(3) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `tipo` varchar(25) NOT NULL,
  PRIMARY KEY (`idtipo_consultor`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Table structure for table `usuarios` */

DROP TABLE IF EXISTS `usuarios`;

CREATE TABLE `usuarios` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `nome` varchar(150) NOT NULL,
  `email` varchar(150) NOT NULL,
  `senha` varchar(255) NOT NULL,
  `ativo` tinyint(1) NOT NULL DEFAULT 1,
  `UserLevels_ID` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_usuario_email` (`email`),
  KEY `fk_usuarios_UserLevels1_idx` (`UserLevels_ID`),
  CONSTRAINT `fk_usuarios_UserLevels1` FOREIGN KEY (`UserLevels_ID`) REFERENCES `UserLevels` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/* Trigger structure for table `envia_colaborador` */

DELIMITER $$

/*!50003 DROP TRIGGER*//*!50032 IF EXISTS */ /*!50003 `tr_insert_envia_colaborador` */$$

/*!50003 CREATE */ /*!50003 TRIGGER `tr_insert_envia_colaborador` AFTER INSERT ON `envia_colaborador` FOR EACH ROW 
    BEGIN
	CALL sp_insert_envia_colaborador(NEW.idenvia_colaborador,NEW.usuarios_id,NEW.cliente_id);
    END */$$


DELIMITER ;

/* Trigger structure for table `envia_colaborador` */

DELIMITER $$

/*!50003 DROP TRIGGER*//*!50032 IF EXISTS */ /*!50003 `tr_delete_envia_colaborador` */$$

/*!50003 CREATE */ /*!50003 TRIGGER `tr_delete_envia_colaborador` BEFORE DELETE ON `envia_colaborador` FOR EACH ROW 
    BEGIN
    
    UPDATE colaborador SET status_idstatus = 1,id_envia_colaborador = 0 WHERE status_idstatus = 2 AND cliente_id = OLD.cliente_id AND id_envia_colaborador=OLD.idenvia_colaborador;
    DELETE FROM exporta_colaborador WHERE envia_colaborador_idenvia_colaborador = OLD.idenvia_colaborador;

    END */$$


DELIMITER ;

/* Trigger structure for table `envia_pedido` */

DELIMITER $$

/*!50003 DROP TRIGGER*//*!50032 IF EXISTS */ /*!50003 `tr_before_insert_envia_pedido` */$$

/*!50003 CREATE */ /*!50003 TRIGGER `tr_before_insert_envia_pedido` BEFORE INSERT ON `envia_pedido` FOR EACH ROW 
BEGIN

    DECLARE v_total DECIMAL(10,2);

    SELECT IFNULL(SUM(valor),0)
    INTO v_total
    FROM view_pedido
    WHERE cliente_id = NEW.cliente_id
      AND produto_id = NEW.produto_id;

    SET NEW.total_pedido = v_total;

END */$$


DELIMITER ;

/* Trigger structure for table `envia_pedido` */

DELIMITER $$

/*!50003 DROP TRIGGER*//*!50032 IF EXISTS */ /*!50003 `tr_insert_envia_pedido` */$$

/*!50003 CREATE */ /*!50003 TRIGGER `tr_insert_envia_pedido` AFTER INSERT ON `envia_pedido` FOR EACH ROW 
    BEGIN
    
    CALL sp_insert_envia_pedido(NEW.idenvia_pedido,NEW.usuarios_id,NEW.cliente_id,NEW.produto_id);

    END */$$


DELIMITER ;

/* Trigger structure for table `envia_pedido` */

DELIMITER $$

/*!50003 DROP TRIGGER*//*!50032 IF EXISTS */ /*!50003 `tr_delete_envia_pedido` */$$

/*!50003 CREATE */ /*!50003 TRIGGER `tr_delete_envia_pedido` BEFORE DELETE ON `envia_pedido` FOR EACH ROW 
    BEGIN
    
    UPDATE pedido SET idstatus_pedido = 1,idenvia_pedido = 0 WHERE idstatus_pedido = 2 AND cliente_id = OLD.cliente_id AND idenvia_pedido = OLD.idenvia_pedido;
    DELETE FROM exporta_pedido where idenvia_pedido = OLD.idenvia_pedido;
    
    END */$$


DELIMITER ;

/* Function  structure for function  `gerar_cpf_valido` */

/*!50003 DROP FUNCTION IF EXISTS `gerar_cpf_valido` */;
DELIMITER $$

/*!50003 CREATE FUNCTION `gerar_cpf_valido`() RETURNS char(11) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
    DETERMINISTIC
BEGIN
    DECLARE n1 INT; DECLARE n2 INT; DECLARE n3 INT; DECLARE n4 INT;
    DECLARE n5 INT; DECLARE n6 INT; DECLARE n7 INT; DECLARE n8 INT;
    DECLARE n9 INT; DECLARE d1 INT; DECLARE d2 INT;
    DECLARE soma INT; DECLARE resto INT;

    SET n1 = FLOOR(RAND()*10);
    SET n2 = FLOOR(RAND()*10);
    SET n3 = FLOOR(RAND()*10);
    SET n4 = FLOOR(RAND()*10);
    SET n5 = FLOOR(RAND()*10);
    SET n6 = FLOOR(RAND()*10);
    SET n7 = FLOOR(RAND()*10);
    SET n8 = FLOOR(RAND()*10);
    SET n9 = FLOOR(RAND()*10);

    SET soma = (n1*10 + n2*9 + n3*8 + n4*7 + n5*6 + n6*5 + n7*4 + n8*3 + n9*2);
    SET resto = soma MOD 11;
    SET d1 = IF(resto < 2, 0, 11 - resto);

    SET soma = (n1*11 + n2*10 + n3*9 + n4*8 + n5*7 + n6*6 + n7*5 + n8*4 + n9*3 + d1*2);
    SET resto = soma MOD 11;
    SET d2 = IF(resto < 2, 0, 11 - resto);

    RETURN CONCAT(n1,n2,n3,n4,n5,n6,n7,n8,n9,d1,d2);
END */$$
DELIMITER ;

/* Procedure structure for procedure `gerar_100_colaboradores` */

/*!50003 DROP PROCEDURE IF EXISTS  `gerar_100_colaboradores` */;

DELIMITER $$

/*!50003 CREATE PROCEDURE `gerar_100_colaboradores`()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE v_cliente_id INT;
    DECLARE v_cpf CHAR(11);
    DECLARE v_nome VARCHAR(200);
    DECLARE v_nome_mae VARCHAR(200);

    -- Listas de nomes
    DECLARE v_primeiro_nome VARCHAR(50);
    DECLARE v_sobrenome VARCHAR(50);
    DECLARE v_primeiro_nome_mae VARCHAR(50);

    WHILE i <= 100 DO

        -- Define cliente_id (20 por empresa)
        IF i <= 20 THEN SET v_cliente_id = 13;
        ELSEIF i <= 40 THEN SET v_cliente_id = 14;
        ELSEIF i <= 60 THEN SET v_cliente_id = 15;
        ELSEIF i <= 80 THEN SET v_cliente_id = 16;
        ELSE SET v_cliente_id = 17;
        END IF;

        -- ==========================
        -- GERA CPF VÁLIDO E ÚNICO
        -- ==========================
        REPEAT
            SET v_cpf = gerar_cpf_valido();
        UNTIL (SELECT COUNT(*) FROM colaborador WHERE cpf = v_cpf) = 0
        END REPEAT;

        -- ==========================
        -- GERA NOME COMPLETO (M/F)
        -- ==========================
        SET v_primeiro_nome = ELT(FLOOR(1 + RAND()*10),
            'Lucas','Gabriel','Rafael','Bruno','Carlos',
            'Fernanda','Juliana','Camila','Patricia','Amanda'
        );

        SET v_sobrenome = ELT(FLOOR(1 + RAND()*10),
            'Silva','Souza','Oliveira','Santos','Lima',
            'Pereira','Costa','Rodrigues','Almeida','Ferreira'
        );

        SET v_nome = CONCAT(v_primeiro_nome,' ',v_sobrenome);

        -- ==========================
        -- GERA NOME DA MÃE (FEMININO)
        -- ==========================
        SET v_primeiro_nome_mae = ELT(FLOOR(1 + RAND()*8),
            'Maria','Ana','Juliana','Patricia',
            'Fernanda','Claudia','Marcia','Adriana'
        );

        SET v_nome_mae = CONCAT(
            v_primeiro_nome_mae,' ',
            ELT(FLOOR(1 + RAND()*10),
                'Silva','Souza','Oliveira','Santos','Lima',
                'Pereira','Costa','Rodrigues','Almeida','Ferreira'
            )
        );

        -- ==========================
        -- INSERT
        -- ==========================
        INSERT INTO colaborador
        (
            cpf,email,nome_completo,celular,departamento_id,endereco,nr,bairro,cidade,
            estado_id,dt_nascimento,nome_mae,cep,complemento,status_idstatus,
            cliente_id,usuarios_id,id_envia_colaborador
        )
        VALUES
        (
            v_cpf,
            CONCAT('colab',i,'@empresa',v_cliente_id,'.com'),
            v_nome,
            CONCAT('1199',LPAD(i,6,'0')),
            1,
            'Rua Gerada',
            i,
            'Centro',
            'São Paulo',
            1,
            DATE_ADD('1985-01-01', INTERVAL FLOOR(RAND()*12000) DAY),
            v_nome_mae,
            '01000-000',
            NULL,
            1,
            v_cliente_id,
            1,
            00000
        );

        SET i = i + 1;

    END WHILE;

END */$$
DELIMITER ;

/* Procedure structure for procedure `sp_insert_envia_colaborador` */

/*!50003 DROP PROCEDURE IF EXISTS  `sp_insert_envia_colaborador` */;

DELIMITER $$

/*!50003 CREATE PROCEDURE `sp_insert_envia_colaborador`(p_idenvia_colaborador int,p_idusuario smallint,p_idcliente int)
BEGIN
   -- Carrega tabela	
   INSERT INTO exporta_colaborador (
    cpf,
    email,
    primeiro_segundo_nome,
    sobrenome,
    dt_nascimento,
    nome_mae,
    cep,
    endereco,
    nr,
    bairro,
    cidade,
    uf,
    complemento,
    celular,
    departamento,
    cliente_id,
    idstatus,
    usuarios_id,
    envia_colaborador_idenvia_colaborador
)
SELECT
    cpf,
    email,
    primeiro_segundo_nome,
    sobrenome,
    dt_nascimento,
    nome_mae,
    cep,
    endereco,
    nr,
    bairro,
    cidade,
    uf,
    complemento,
    celular,
    departamento,
    cliente_id,
    idstatus,
    p_idusuario,
    p_idenvia_colaborador
FROM view_colaborador
WHERE cliente_id = p_idcliente;

-- Atualiza Colaborador: 1. Muda Status p/Enviado 2.Grava id_envia_colaborador
update colaborador SET status_idstatus = 2,id_envia_colaborador = p_idenvia_colaborador where status_idstatus = 1 AND cliente_id = p_idcliente;
	
	END */$$
DELIMITER ;

/* Procedure structure for procedure `sp_insert_envia_pedido` */

/*!50003 DROP PROCEDURE IF EXISTS  `sp_insert_envia_pedido` */;

DELIMITER $$

/*!50003 CREATE PROCEDURE `sp_insert_envia_pedido`(
    p_idenvia_pedido INT,
    p_idusuario SMALLINT,
    p_idcliente INT,
    p_produto SMALLINT
)
BEGIN

    -- 1️⃣ Insere na tabela exporta_pedido
    INSERT INTO `cardix`.`exporta_pedido` ( 
        `cpf`,
        `valor`,
        `idenvia_pedido`,
        `usuarios_id`,
        `cliente_id`,
        `produto_id`
    )
    SELECT
        cpf,
        valor,
        p_idenvia_pedido,
        p_idusuario,
        p_idcliente,
        p_produto
    FROM view_pedido
    WHERE cliente_id = p_idcliente 
      AND produto_id = p_produto;

    -- 2️⃣ Atualiza pedidos (muda status e grava id_envia_pedido)
    UPDATE pedido 
    SET idstatus_pedido = 2,
        idenvia_pedido = p_idenvia_pedido
    WHERE idstatus_pedido = 1 
      AND cliente_id = p_idcliente 
      AND produto_id = p_produto;


END */$$
DELIMITER ;

/*Table structure for table `view_produto_empresa` */

DROP TABLE IF EXISTS `view_produto_empresa`;

/*!50001 DROP VIEW IF EXISTS `view_produto_empresa` */;
/*!50001 DROP TABLE IF EXISTS `view_produto_empresa` */;

/*!50001 CREATE TABLE  `view_produto_empresa`(
 `idproduto_empresa` int(3) unsigned zerofill ,
 `cliente_id` int(5) ,
 `produto_id` int(5) ,
 `razao_social` varchar(200) ,
 `produto` varchar(150) 
)*/;

/*Table structure for table `view_colaborador` */

DROP TABLE IF EXISTS `view_colaborador`;

/*!50001 DROP VIEW IF EXISTS `view_colaborador` */;
/*!50001 DROP TABLE IF EXISTS `view_colaborador` */;

/*!50001 CREATE TABLE  `view_colaborador`(
 `cpf` char(14) ,
 `email` varchar(150) ,
 `primeiro_segundo_nome` longtext ,
 `sobrenome` longtext ,
 `dt_nascimento` date ,
 `nome_mae` varchar(100) ,
 `cep` varchar(10) ,
 `endereco` varchar(150) ,
 `nr` varchar(10) ,
 `bairro` varchar(45) ,
 `cidade` varchar(60) ,
 `uf` char(2) ,
 `complemento` varchar(20) ,
 `celular` varchar(20) ,
 `departamento` varchar(100) ,
 `status` varchar(20) ,
 `cliente_id` int(5) ,
 `cliente` varchar(200) ,
 `idstatus` int(1) unsigned zerofill ,
 `usuarios_id` int(3) 
)*/;

/*Table structure for table `view_pedido` */

DROP TABLE IF EXISTS `view_pedido`;

/*!50001 DROP VIEW IF EXISTS `view_pedido` */;
/*!50001 DROP TABLE IF EXISTS `view_pedido` */;

/*!50001 CREATE TABLE  `view_pedido`(
 `idpedido` int(5) unsigned zerofill ,
 `cliente_id` int(5) ,
 `cliente` varchar(200) ,
 `nome_completo` varchar(200) ,
 `cpf` char(14) ,
 `valor` decimal(10,2) ,
 `status` varchar(30) ,
 `idstatus_pedido` int(1) unsigned zerofill ,
 `produto_id` int(5) 
)*/;

/*View structure for view view_produto_empresa */

/*!50001 DROP TABLE IF EXISTS `view_produto_empresa` */;
/*!50001 DROP VIEW IF EXISTS `view_produto_empresa` */;

/*!50001 CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_produto_empresa` AS select `produto_empresa`.`idproduto_empresa` AS `idproduto_empresa`,`produto_empresa`.`cliente_id` AS `cliente_id`,`produto_empresa`.`produto_id` AS `produto_id`,`cliente`.`razao_social` AS `razao_social`,`produto`.`produto` AS `produto` from ((`produto_empresa` join `cliente` on(`produto_empresa`.`cliente_id` = `cliente`.`id`)) join `produto` on(`produto_empresa`.`produto_id` = `produto`.`id`)) order by `produto_empresa`.`produto_id` */;

/*View structure for view view_colaborador */

/*!50001 DROP TABLE IF EXISTS `view_colaborador` */;
/*!50001 DROP VIEW IF EXISTS `view_colaborador` */;

/*!50001 CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_colaborador` AS select `c`.`cpf` AS `cpf`,`c`.`email` AS `email`,concat(substring_index(`c`.`nome_limpo`,' ',1),' ',substring_index(substring_index(`c`.`nome_limpo`,' ',2),' ',-1)) AS `primeiro_segundo_nome`,substring_index(`c`.`nome_limpo`,' ',-1) AS `sobrenome`,`c`.`dt_nascimento` AS `dt_nascimento`,`c`.`nome_mae` AS `nome_mae`,`c`.`cep` AS `cep`,`c`.`endereco` AS `endereco`,`c`.`nr` AS `nr`,`c`.`bairro` AS `bairro`,`c`.`cidade` AS `cidade`,`e`.`sigla` AS `uf`,`c`.`complemento` AS `complemento`,`c`.`celular` AS `celular`,`d`.`departamento` AS `departamento`,`sc`.`status` AS `status`,`c`.`cliente_id` AS `cliente_id`,`cl`.`razao_social` AS `cliente`,`c`.`status_idstatus` AS `idstatus`,`c`.`usuarios_id` AS `usuarios_id` from (((((select `colaborador`.`id` AS `id`,`colaborador`.`cpf` AS `cpf`,`colaborador`.`email` AS `email`,`colaborador`.`nome_completo` AS `nome_completo`,`colaborador`.`endereco` AS `endereco`,`colaborador`.`nr` AS `nr`,`colaborador`.`bairro` AS `bairro`,`colaborador`.`cidade` AS `cidade`,`colaborador`.`estado_id` AS `estado_id`,`colaborador`.`dt_nascimento` AS `dt_nascimento`,`colaborador`.`nome_mae` AS `nome_mae`,`colaborador`.`cep` AS `cep`,`colaborador`.`complemento` AS `complemento`,`colaborador`.`celular` AS `celular`,`colaborador`.`departamento_id` AS `departamento_id`,`colaborador`.`status_idstatus` AS `status_idstatus`,`colaborador`.`cliente_id` AS `cliente_id`,`colaborador`.`usuarios_id` AS `usuarios_id`,`colaborador`.`created_at` AS `created_at`,`colaborador`.`updated_at` AS `updated_at`,trim(regexp_replace(`colaborador`.`nome_completo`,' (da|de|do|dos|das) ',' ')) AS `nome_limpo` from `colaborador`) `c` join `estado` `e` on(`c`.`estado_id` = `e`.`id`)) join `departamento` `d` on(`c`.`departamento_id` = `d`.`id`)) join `cliente` `cl` on(`c`.`cliente_id` = `cl`.`id`)) join `status_colaborador` `sc` on(`c`.`status_idstatus` = `sc`.`idstatus`)) where `c`.`status_idstatus` = 1 order by concat(substring_index(`c`.`nome_limpo`,' ',1),' ',substring_index(substring_index(`c`.`nome_limpo`,' ',2),' ',-1)) */;

/*View structure for view view_pedido */

/*!50001 DROP TABLE IF EXISTS `view_pedido` */;
/*!50001 DROP VIEW IF EXISTS `view_pedido` */;

/*!50001 CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW `view_pedido` AS select `pedido`.`id` AS `idpedido`,`pedido`.`cliente_id` AS `cliente_id`,`cliente`.`razao_social` AS `cliente`,`colaborador`.`nome_completo` AS `nome_completo`,`colaborador`.`cpf` AS `cpf`,`pedido`.`valor` AS `valor`,`status_pedido`.`status` AS `status`,`pedido`.`idstatus_pedido` AS `idstatus_pedido`,`pedido`.`produto_id` AS `produto_id` from (((`pedido` join `status_pedido` on(`pedido`.`idstatus_pedido` = `status_pedido`.`idstatus_pedido`)) join `cliente` on(`pedido`.`cliente_id` = `cliente`.`id`)) join `colaborador` on(`colaborador`.`cliente_id` = `cliente`.`id` and `pedido`.`colaborador_id` = `colaborador`.`id`)) where `pedido`.`idstatus_pedido` = 1 order by `colaborador`.`nome_completo` */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
