Skip to content

Instantly share code, notes, and snippets.

@celsojr
Created June 17, 2018 17:40
Show Gist options
  • Save celsojr/8350ff998d2aa8ab95bbcf0c2e00a8f1 to your computer and use it in GitHub Desktop.
Save celsojr/8350ff998d2aa8ab95bbcf0c2e00a8f1 to your computer and use it in GitHub Desktop.
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema mapa_exemplo
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `mapa_exemplo` ;
-- -----------------------------------------------------
-- Schema mapa_exemplo
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mapa_exemplo` DEFAULT CHARACTER SET utf8 ;
USE `mapa_exemplo` ;
-- -----------------------------------------------------
-- Table `mapa_exemplo`.`clientes`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mapa_exemplo`.`clientes` ;
CREATE TABLE IF NOT EXISTS `mapa_exemplo`.`clientes` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`razao` VARCHAR(100) NOT NULL,
`fantasia` VARCHAR(100) NOT NULL,
`telefone` VARCHAR(20) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`cidade` VARCHAR(100) NOT NULL,
`estado` CHAR(2) NOT NULL,
`ativo` TINYINT(4) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
-- -----------------------------------------------------
-- Table `mapa_exemplo`.`nota`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mapa_exemplo`.`nota` ;
CREATE TABLE IF NOT EXISTS `mapa_exemplo`.`nota` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`numero` INT(11) NOT NULL,
`data_emissao` DATE NOT NULL,
`id_cliente` INT(10) UNSIGNED NOT NULL,
`valor_nota` DECIMAL(12,2) NOT NULL,
`perc_comissao` DECIMAL(4,2) NOT NULL,
`valor_comissao` DECIMAL(12,2) NOT NULL,
`encerrado` TINYINT(4) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC),
UNIQUE INDEX `numero_UNIQUE` (`numero` ASC),
INDEX `id_cliente` (`id_cliente` ASC),
CONSTRAINT `id_cliente`
FOREIGN KEY (`id_cliente`)
REFERENCES `mapa_exemplo`.`clientes` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
-- -----------------------------------------------------
-- Table `mapa_exemplo`.`nota_item`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mapa_exemplo`.`nota_item` ;
CREATE TABLE IF NOT EXISTS `mapa_exemplo`.`nota_item` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_produto` INT(10) UNSIGNED NOT NULL,
`quantidade` DECIMAL(12,2) NOT NULL,
`valor_unitario` DECIMAL(12,2) NOT NULL,
`valor_total` DECIMAL(12,2) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
-- -----------------------------------------------------
-- Table `mapa_exemplo`.`produtos`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mapa_exemplo`.`produtos` ;
CREATE TABLE IF NOT EXISTS `mapa_exemplo`.`produtos` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(100) NOT NULL,
`descricao` TEXT NULL DEFAULT NULL,
`valor_venda` DECIMAL(12,2) NOT NULL,
`ativo` TINYINT(4) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
-- -----------------------------------------------------
-- Table `mapa_exemplo`.`tributos`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mapa_exemplo`.`tributos` ;
CREATE TABLE IF NOT EXISTS `mapa_exemplo`.`tributos` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`codigo` VARCHAR(20) NOT NULL,
`nome` VARCHAR(45) NULL DEFAULT NULL,
`aliquota` DECIMAL(4,2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
-- -----------------------------------------------------
-- Table `mapa_exemplo`.`tributo_item`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mapa_exemplo`.`tributo_item` ;
CREATE TABLE IF NOT EXISTS `mapa_exemplo`.`tributo_item` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_nota_item` INT(10) UNSIGNED NOT NULL,
`id_tributo` INT(10) UNSIGNED NOT NULL,
`base_calculo` DECIMAL(12,2) NOT NULL,
`aliquota` DECIMAL(12,2) NOT NULL,
`valor_imposto` DECIMAL(12,2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC),
INDEX `id_tributo_idx` (`id_tributo` ASC),
INDEX `id_nota_item` (`id_nota_item` ASC),
CONSTRAINT `id_nota_item`
FOREIGN KEY (`id_nota_item`)
REFERENCES `mapa_exemplo`.`nota_item` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `id_tributo`
FOREIGN KEY (`id_tributo`)
REFERENCES `mapa_exemplo`.`tributos` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
USE `mapa_exemplo`;
DELIMITER $$
USE `mapa_exemplo`$$
DROP TRIGGER IF EXISTS `mapa_exemplo`.`nota_item_BEFORE_INSERT` $$
USE `mapa_exemplo`$$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `mapa_exemplo`.`nota_item_BEFORE_INSERT`
BEFORE INSERT ON `mapa_exemplo`.`nota_item`
FOR EACH ROW
BEGIN
SET NEW.valor_unitario = (SELECT `valor_venda` FROM `mapa_exemplo`.`produtos` WHERE `id` = NEW.id_produto);
SET NEW.valor_total = NEW.quantidade * (SELECT `valor_venda` FROM `mapa_exemplo`.`produtos` WHERE `id` = NEW.id_produto);
END$$
USE `mapa_exemplo`$$
DROP TRIGGER IF EXISTS `mapa_exemplo`.`nota_item_AFTER_INSERT` $$
USE `mapa_exemplo`$$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `mapa_exemplo`.`nota_item_AFTER_INSERT`
AFTER INSERT ON `mapa_exemplo`.`nota_item`
FOR EACH ROW
BEGIN
DECLARE icms DECIMAL(4,2);
DECLARE pis DECIMAL(4,2);
DECLARE cofins DECIMAL(4,2);
SET icms = 12;
SET pis = 1.65;
SET cofins = 7.6;
INSERT INTO `mapa_exemplo`.`tributo_item` (`id_nota_item`, `id_tributo`, `base_calculo`, `aliquota`, `valor_imposto`)
VALUES (NEW.id, 1, NEW.valor_total, icms, ((NEW.valor_total * icms) / 100));
INSERT INTO `mapa_exemplo`.`tributo_item` (`id_nota_item`, `id_tributo`, `base_calculo`, `aliquota`, `valor_imposto`)
VALUES (NEW.id, 2, NEW.valor_total, pis, ((NEW.valor_total * pis) / 100));
INSERT INTO `mapa_exemplo`.`tributo_item` (`id_nota_item`, `id_tributo`, `base_calculo`, `aliquota`, `valor_imposto`)
VALUES (NEW.id, 3, NEW.valor_total, cofins, ((NEW.valor_total * cofins) / 100));
END$$
DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment