-- MySQL Script generated by MySQL Workbench
-- 09/09/16 23:27:42
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering


-- -----------------------------------------------------
-- Schema vibel038_esp_sasequipamentos
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema vibel038_esp_sasequipamentos
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `vibel038_esp_sasequipamentos` DEFAULT CHARACTER SET utf8 ;
USE `vibel038_esp_sasequipamentos` ;

-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`categoria`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`categoria` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`unidade`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`unidade` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `sigla` VARCHAR(2) NOT NULL,
  `nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`pais`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`pais` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`estado`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`estado` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `paisid` INT NOT NULL,
  `sigla` VARCHAR(5) NOT NULL,
  `nome` VARCHAR(45) NOT NULL,
  `codigoibge` VARCHAR(10) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `estado_pais_fk_idx` (`paisid` ASC),
  CONSTRAINT `estado_pais_fk`
    FOREIGN KEY (`paisid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`pais` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`municipio`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`municipio` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `estadoid` INT NOT NULL,
  `nome` VARCHAR(100) NOT NULL,
  `codigoibge` INT NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `municipio_estado_fk_idx` (`estadoid` ASC),
  CONSTRAINT `municipio_estado_fk`
    FOREIGN KEY (`estadoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`estado` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`banco`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`banco` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(100) NOT NULL,
  `codigocompensacao` VARCHAR(10) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`pessoa`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`pessoa` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(100) NOT NULL,
  `fantasia` VARCHAR(200) NULL,
  `cnpj` VARCHAR(25) NULL,
  `inscricaoestadual` VARCHAR(30) NULL,
  `inscricaomunicipal` VARCHAR(30) NOT NULL,
  `tipo` ENUM('C', 'F') NOT NULL,
  `tipopessoa` ENUM('F', 'J') NOT NULL,
  `isentoicms` ENUM('S', 'N') NULL,
  `municipioid` INT NULL,
  `logradouro` VARCHAR(100) NULL,
  `numeroendereco` INT NULL,
  `complementoendereco` VARCHAR(45) NULL,
  `bairro` VARCHAR(45) NULL,
  `cep` VARCHAR(9) NULL,
  `telefonecomercial` VARCHAR(20) NULL,
  `telefoneparticular` VARCHAR(20) NULL,
  `email` VARCHAR(45) NULL,
  `site` VARCHAR(45) NULL,
  `bancoid` INT NULL,
  `agencia` VARCHAR(10) NULL,
  `conta` VARCHAR(10) NULL,
  `ativo` ENUM('S', 'N') NOT NULL DEFAULT 'S',
  `especial` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  PRIMARY KEY (`id`),
  INDEX `pessoa_banco_fk_idx` (`bancoid` ASC),
  INDEX `pessoa_municipioid_fk_idx` (`municipioid` ASC),
  CONSTRAINT `pessoa_municipioid_fk`
    FOREIGN KEY (`municipioid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`municipio` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `pessoa_banco_fk`
    FOREIGN KEY (`bancoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`banco` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`produto`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`produto` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `codigo` VARCHAR(25) NOT NULL,
  `descricao` VARCHAR(200) NOT NULL,
  `categoriaid` INT NOT NULL,
  `unidadeid` INT NOT NULL,
  `ncm` VARCHAR(20) NULL,
  `fornecedorid` INT NULL,
  `valorcompra` DECIMAL(14,2) NULL,
  `quantidadeestoque` DECIMAL(14,2) NOT NULL DEFAULT 0,
  `produtopaiid` INT NULL,
  `imagemguid` VARCHAR(100) NULL,
  PRIMARY KEY (`id`),
  INDEX `product_category_fk_idx` (`categoriaid` ASC),
  INDEX `product_unit_fk_idx` (`unidadeid` ASC),
  INDEX `produto_fornecedor_fk_idx` (`fornecedorid` ASC),
  INDEX `produto_produtopai_fk_idx` (`produtopaiid` ASC),
  CONSTRAINT `produto_categoria_fk`
    FOREIGN KEY (`categoriaid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`categoria` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `produto_unidade_fk`
    FOREIGN KEY (`unidadeid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`unidade` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `produto_fornecedor_fk`
    FOREIGN KEY (`fornecedorid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`pessoa` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `produto_produtopai_fk`
    FOREIGN KEY (`produtopaiid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`produto` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`users`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `email` VARCHAR(255) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  `remember_token` VARCHAR(100) NULL,
  `created_at` TIMESTAMP NULL,
  `updated_at` TIMESTAMP NULL,
  `administrador` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  `permissaofinanceiro` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`leitura`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`leitura` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `arquivo` VARCHAR(255) NOT NULL,
  `datahora` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `concluido` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  `fornecedorid` INT NOT NULL,
  `categoriaid` INT NOT NULL,
  `unidadeid` INT NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `arquivo_id` (`arquivo` ASC, `id` ASC))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`leituraproduto`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`leituraproduto` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `leituraid` BIGINT NOT NULL,
  `codigo` VARCHAR(255) NULL,
  `descricao` VARCHAR(255) NULL,
  `ncm` VARCHAR(255) NULL,
  `valorcompra` VARCHAR(255) NULL,
  `aprovado` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  `mensagem` VARCHAR(100) NULL,
  PRIMARY KEY (`id`),
  INDEX `codigo_leituraid_idx` (`codigo` ASC, `leituraid` ASC),
  INDEX `leituraproduto_leitura_fk_idx` (`leituraid` ASC),
  CONSTRAINT `leituraproduto_leitura_fk`
    FOREIGN KEY (`leituraid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`leitura` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`tecnico`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`tecnico` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`tipocobranca`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`tipocobranca` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(45) NOT NULL,
  `gerarpagamento` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`ordem`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`ordem` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `tipo` ENUM('C', 'S', 'B') NOT NULL COMMENT 'C = Ordem de coleta\nS = Ordem de serviço\nB = Ordem de cobrança',
  `numero` INT NOT NULL,
  `clienteid` INT NULL,
  `datahora` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `produto` VARCHAR(255) NULL,
  `defeitoinformadocliente` VARCHAR(1000) NULL,
  `defeitoconstatadotecnico` VARCHAR(1000) NULL,
  `urgente` CHAR NOT NULL DEFAULT 'N',
  `datalimite` DATE NULL,
  `ordemorigemid` INT NULL,
  `situacao` ENUM('F', 'C', 'A', 'AN', 'OR', 'CO', 'PR') NOT NULL DEFAULT 'A' COMMENT 'Opções disponíveis:\nA - Aberto\nAN - Em análise\nOR - Orçamento\nCO - Em conserto\nPR - Pronto\nF - Finalizada\nC - Cancelada',
  `tecnicoid` INT NULL,
  `garantia` ENUM('S', 'N') NULL COMMENT 'Sim/Não',
  `customaodeobra` DECIMAL(14,2) NULL,
  `custodeslocamento` DECIMAL(14,2) NULL,
  `percacrescimo` DECIMAL(5,2) NULL,
  `percdesconto` DECIMAL(5,2) NULL,
  `valorprodutos` DECIMAL(14,2) NULL,
  `valortotal` DECIMAL(14,2) NULL,
  `tipocobrancaid` INT NULL,
  `finalizadaem` TIMESTAMP NULL,
  `canceladaem` TIMESTAMP NULL,
  `numeronota` INT UNSIGNED NULL,
  PRIMARY KEY (`id`),
  INDEX `ordem_cliente_fk_idx` (`clienteid` ASC),
  INDEX `ordem_ordem_fk_idx` (`ordemorigemid` ASC),
  INDEX `ordem_tecnico_fk_idx` (`tecnicoid` ASC),
  INDEX `ordem_tipocobranca_fk_idx` (`tipocobrancaid` ASC),
  CONSTRAINT `ordem_cliente_fk`
    FOREIGN KEY (`clienteid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`pessoa` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `ordem_ordem_fk`
    FOREIGN KEY (`ordemorigemid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`ordem` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `ordem_tecnico_fk`
    FOREIGN KEY (`tecnicoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`tecnico` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `ordem_tipocobranca_fk`
    FOREIGN KEY (`tipocobrancaid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`tipocobranca` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`movimentoestoque`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`movimentoestoque` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `datahora` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `produtoid` INT NOT NULL,
  `sentido` ENUM('E', 'S') NOT NULL COMMENT 'E - Entrada\nS - Saída',
  `quantidade` DECIMAL(14,4) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `movimentoestoque_produto_fk_idx` (`produtoid` ASC),
  CONSTRAINT `movimentoestoque_produto_fk`
    FOREIGN KEY (`produtoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`produto` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`ordemprodutos`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`ordemprodutos` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `ordemid` INT NOT NULL,
  `produtoid` INT NOT NULL,
  `quantidade` DECIMAL(14,2) NOT NULL,
  `garantia` ENUM('S', 'N') NOT NULL DEFAULT 'N',
  `valororiginal` DECIMAL(14,2) NOT NULL,
  `valorunitario` DECIMAL(14,2) NOT NULL,
  `valortotal` DECIMAL(14,2) NOT NULL,
  `movimentoestoqueid` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `ordemprodutos_ordem_fk_idx` (`ordemid` ASC),
  INDEX `ordemprodutos_produto_fk_idx` (`produtoid` ASC),
  INDEX `ordemprodutos_movimentoestoque_fk_idx` (`movimentoestoqueid` ASC),
  CONSTRAINT `ordemprodutos_ordem_fk`
    FOREIGN KEY (`ordemid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`ordem` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `ordemprodutos_produto_fk`
    FOREIGN KEY (`produtoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`produto` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION,
  CONSTRAINT `ordemprodutos_movimentoestoque_fk`
    FOREIGN KEY (`movimentoestoqueid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`movimentoestoque` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`configuracoes`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`configuracoes` (
  `id` INT NOT NULL,
  `razaosocial` VARCHAR(255) NULL,
  `fantasia` VARCHAR(45) NULL,
  `agencia` VARCHAR(10) NULL,
  `agenciadigito` VARCHAR(2) NULL,
  `conta` VARCHAR(10) NULL,
  `contadigito` VARCHAR(2) NULL,
  `carteira` VARCHAR(2) NULL,
  `convenio` VARCHAR(10) NULL,
  `boletomensagem1` VARCHAR(255) NULL,
  `boletomensagem2` VARCHAR(255) NULL,
  `boletomensagem3` VARCHAR(255) NULL,
  `boletoinstrucao1` VARCHAR(255) NULL,
  `boletoinstrucao2` VARCHAR(255) NULL,
  `boletoespeciedocumento` VARCHAR(3) NULL,
  `municipioid` INT NULL,
  `cep` VARCHAR(10) NULL,
  `cnpj` VARCHAR(25) NULL,
  `naturezaoperacao` VARCHAR(45) NULL,
  `serienfe` VARCHAR(5) NULL,
  `inscricaoestadual` VARCHAR(30) NULL,
  `inscricaomunicipal` VARCHAR(30) NULL,
  `logradouro` VARCHAR(45) NULL,
  `numeroendereco` INT NULL,
  `complementoendereco` VARCHAR(45) NULL,
  `bairro` VARCHAR(45) NULL,
  `telefone` VARCHAR(45) NULL,
  `nfecfop` VARCHAR(4) NULL,
  `icmscst` VARCHAR(3) NULL,
  `icmspercentual` DECIMAL(4,2) NULL,
  `ipicst` VARCHAR(3) NULL,
  `ipipercentual` DECIMAL(4,2) NULL,
  `piscst` VARCHAR(3) NULL,
  `pispercentual` DECIMAL(4,2) NULL,
  `cofinscst` VARCHAR(3) NULL,
  `cofinspercentual` DECIMAL(4,2) NULL,
  PRIMARY KEY (`id`),
  INDEX `configuracoes_municipio_fk_idx` (`municipioid` ASC),
  CONSTRAINT `configuracoes_municipio_fk`
    FOREIGN KEY (`municipioid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`municipio` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`orcamento`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`orcamento` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `datahora` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `clienteid` INT NOT NULL,
  `customaodeobra` DECIMAL(14,2) NULL,
  `custodeslocamento` DECIMAL(14,2) NULL,
  `percacrescimo` DECIMAL(5,2) NULL,
  `percdesconto` DECIMAL(5,2) NULL,
  `valorprodutos` DECIMAL(14,2) NULL,
  `valortotal` DECIMAL(14,2) NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  INDEX `orcamento_cliente_fk_idx` (`clienteid` ASC),
  CONSTRAINT `orcamento_cliente_fk`
    FOREIGN KEY (`clienteid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`pessoa` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `vibel038_esp_sasequipamentos`.`orcamentoprodutos`
-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `vibel038_esp_sasequipamentos`.`orcamentoprodutos` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `orcamentoid` INT NOT NULL,
  `produtoid` INT NOT NULL,
  `quantidade` DECIMAL(14,2) NOT NULL,
  `valororiginal` DECIMAL(14,2) NOT NULL,
  `valorunitario` DECIMAL(14,2) NOT NULL,
  `valortotal` DECIMAL(14,2) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `orcamentoprodutos_orcamento_fk_idx` (`orcamentoid` ASC),
  INDEX `orcamentoprodutos_produto_fk_idx` (`produtoid` ASC),
  CONSTRAINT `orcamentoprodutos_orcamento_fk`
    FOREIGN KEY (`orcamentoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`orcamento` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `orcamentoprodutos_produto_fk`
    FOREIGN KEY (`produtoid`)
    REFERENCES `vibel038_esp_sasequipamentos`.`produto` (`id`)
    ON DELETE RESTRICT
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE `vibel038_esp_sasequipamentos` ;

-- -----------------------------------------------------
-- function NumericOnly
-- -----------------------------------------------------

USE `vibel038_esp_sasequipamentos`;
DROP function IF EXISTS `vibel038_esp_sasequipamentos`.`NumericOnly`;

DELIMITER $$
USE `vibel038_esp_sasequipamentos`$$
CREATE FUNCTION NumericOnly (val VARCHAR(255)) 
 RETURNS VARCHAR(255)
BEGIN
 DECLARE idx INT DEFAULT 0;
 IF ISNULL(val) THEN RETURN NULL; END IF;

 IF LENGTH(val) = 0 THEN RETURN ""; END IF;

 SET idx = LENGTH(val);
  WHILE idx > 0 DO
    IF IsNumeric(SUBSTRING(val,idx,1)) = 0 THEN
     SET val = REPLACE(val,SUBSTRING(val,idx,1),"");
    END IF;
    SET idx = idx - 1;
  END WHILE;
  RETURN val;
 END;$$

DELIMITER ;

-- -----------------------------------------------------
-- function IsNumeric
-- -----------------------------------------------------

USE `vibel038_esp_sasequipamentos`;
DROP function IF EXISTS `vibel038_esp_sasequipamentos`.`IsNumeric`;

DELIMITER $$
USE `vibel038_esp_sasequipamentos`$$
CREATE FUNCTION IsNumeric (val varchar(255)) RETURNS tinyint 
 RETURN val REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';$$

DELIMITER ;
USE `vibel038_esp_sasequipamentos`;

DELIMITER $$

USE `vibel038_esp_sasequipamentos`$$
DROP TRIGGER IF EXISTS `vibel038_esp_sasequipamentos`.`Alterar_Datas_Situacao` $$
USE `vibel038_esp_sasequipamentos`$$
CREATE DEFINER = CURRENT_USER TRIGGER `Alterar_Datas_Situacao` BEFORE UPDATE ON `ordem` FOR EACH ROW
BEGIN
	IF (NEW.situacao <> OLD.situacao) THEN  
		IF (NEW.situacao = 'F') THEN  
			Set NEW.finalizadaem = current_timestamp;
		END IF;
        
        IF (NEW.situacao = 'C') THEN  
			Set NEW.canceladaem = current_timestamp;
		END IF;
    END IF;
END$$


USE `vibel038_esp_sasequipamentos`$$
DROP TRIGGER IF EXISTS `vibel038_esp_sasequipamentos`.`Atualizar_Quantidade_Estoque_Produto` $$
USE `vibel038_esp_sasequipamentos`$$
CREATE DEFINER=CURRENT_USER TRIGGER `Atualizar_Quantidade_Estoque_Produto` AFTER INSERT ON `movimentoestoque` FOR EACH ROW BEGIN
	IF NEW.sentido = "S" THEN
		UPDATE produto 
			SET quantidadeestoque = quantidadeestoque - NEW.quantidade
		WHERE id = NEW.produtoid;
	END IF;
    
	IF NEW.sentido = "E" THEN
		UPDATE produto 
			SET quantidadeestoque = quantidadeestoque + NEW.quantidade
		WHERE id = NEW.produtoid;
	END IF;   
END$$


USE `vibel038_esp_sasequipamentos`$$
DROP TRIGGER IF EXISTS `vibel038_esp_sasequipamentos`.`Voltar_Quantidade_Estoque_Produto` $$
USE `vibel038_esp_sasequipamentos`$$
CREATE DEFINER = CURRENT_USER TRIGGER `Voltar_Quantidade_Estoque_Produto` BEFORE DELETE ON `movimentoestoque` FOR EACH ROW
BEGIN
	IF movimentoestoque.sentido = "S" THEN
		UPDATE produto 
			SET quantidadeestoque = quantidadeestoque + movimentoestoque.quantidade
		WHERE id = movimentoestoque.produtoid;
	END IF;
    
	IF movimentoestoque.sentido = "E" THEN
		UPDATE produto 
			SET quantidadeestoque = quantidadeestoque - movimentoestoque.quantidade
		WHERE id = movimentoestoque.produtoid;
	END IF;  
END$$


DELIMITER ;

