USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[operacao] ADD 
[idnAverbacaoAutomatica] [bit] NULL,
[modalidadeFrete] [int] NULL
GO
ALTER TABLE [dbo].[OperadorConfiguracoes] ADD 
[idnPermitirConferirPedidosEmLote] [bit] NULL
GO
ALTER TABLE [dbo].[OrdemProducaoApontamento] ADD 
[qtdPerda] [decimal] (18,4) NULL
GO
CREATE TABLE [dbo].[CamposFinanceiroDominio]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[idEmitente] [int] NULL,
	[codigoEmitente] [varchar] (20) COLLATE Latin1_General_CI_AS NOT NULL,
	[contaReceita] [varchar] (50) COLLATE Latin1_General_CI_AS NULL,
	[contaDespesa] [varchar] (50) COLLATE Latin1_General_CI_AS NULL,
	[cfop] [varchar] (500) COLLATE Latin1_General_CI_AS NULL,
	CONSTRAINT [PK__CamposFi__3213E83F737CB3B3] PRIMARY KEY CLUSTERED
	(
		[id] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
	CONSTRAINT [unq_contaDespesaCFOP] UNIQUE NONCLUSTERED
	(
		[idEmitente] ASC,
		[contaDespesa] ASC,
		[cfop] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
	CONSTRAINT [unq_contaReceitaCFOP] UNIQUE NONCLUSTERED
	(
		[idEmitente] ASC,
		[contaReceita] ASC,
		[cfop] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
	CONSTRAINT [unq_emitenteCFOP] UNIQUE NONCLUSTERED
	(
		[idEmitente] ASC,
		[cfop] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
	CONSTRAINT [unq_emitenteContaDespesa] UNIQUE NONCLUSTERED
	(
		[idEmitente] ASC,
		[contaDespesa] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
	CONSTRAINT [unq_emitenteContaReceita] UNIQUE NONCLUSTERED
	(
		[idEmitente] ASC,
		[contaReceita] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[OrdemServicoEdicao]
(
	[idOrdemServico] [int] NOT NULL,
	[idOperador] [int] NOT NULL,
	[dataHoraInicio] [datetime] NOT NULL,
	CONSTRAINT [PK_OrdemServicoEdicao] PRIMARY KEY CLUSTERED
	(
		[idOrdemServico] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER FUNCTION [dbo].[ConsultaMonitoramentoOrdemServico]
(
	@dataAberturaInicial date,
	@dataAberturaFinal date,
	@placa varchar(20),
	@frota varchar(20),
	@idParceiro int,
	@idOperacao int,
	@idEmitente int,
	@idRepresentante int,
	@idOperador int,
	@idSituacao int,
	@serie varchar(100),
	@nomeAnimal varchar(50),
	@idnAbertas bit,
	@idnCancelada bit,
	@idnEncerradas bit,
	@idnConcluidas bit,
	@idnTodas bit,
	@numeroOS int,
	@descricaoProduto varchar(250),
	@descricaoServico varchar(1000),
	@descricaoObservacao varchar(1000),
	@idTecnico int,
	@idSupervisor int,
	@idOrdemServico int
)
RETURNS 
@Resultado TABLE 
(	        
        id int,
        idEmitente int,
        idOperador int,
        idOperacao int,
        dscOperacao varchar(100),
        idParceiro int,
        idRepresentante int null,
        idVendedor int null,
        dataHora datetime,
        dataHoraEncerramento datetime null,
        valorProdutos decimal(18,4), 
        valorServicos decimal(18,4),  
        descontoProdutos decimal(18,4),  
        descontoServicos decimal(18,4),  
        totalProdutos decimal(18,4), 
        totalServicos decimal(18,4),  
        valorTotal decimal(18,4),  
        descontoTotal decimal(18,4),  
        totalGeralLiquido decimal(18,4),  
        valorAdiantamento decimal(18,4),  
        valorAcrescimo decimal(18,4),  
        status varchar(50), 
        concluida bit, 
        cancelada bit,  
        numeroOS int null,
        serieOS varchar(10), 
        nomeContato varchar(60), 
        observacao text, 
        idnNF bit,
        idnNFSe bit, 
        numeroProjeto varchar(100), 
        quilometragemPercurso int null,
        idParceiroTransporteOrigem int null,
        nomeParceiroTransporteOrigem varchar(60), 
        descricaoVeiculoTransporte varchar(200), 
        placaVeiculoTransporte varchar(10), 
        idSituacao int null, 
        dscSituacao varchar(200), 
		anoFabricado int,
        anoModelo int, 
        cor varchar(100),
        fabricanteVeiculo varchar(100),
        combustivelVeiculo varchar(100), 
        chassis varchar(100),
        quilometragem int,
        descricaoNome varchar(200),
        condicaoVeiculo text,
        instrucaoProblema text,
        observacoes text,
        placa varchar(50),
        frota varchar(30),
        numeroEixos int null,        
        nomeParceiro varchar(100),
        telefoneParceiro varchar(50),
		cidadeParceiro varchar(200),
		ufParceiro varchar(2),
		nomeVendedor varchar(100),
        idTipoEquipamento int,
        dscTipoEquipamento varchar(200),
		qtd decimal(18,4),
        hrsTrabalhadas decimal(18,4),
        voltagem varchar(100),
        marca varchar(200),
        serie varchar(100),
        modelo varchar(100),
        instrucoes varchar(max),
		acessorios varchar(max),
        idParceiroMotores int null,
        numeroPedido int null,
		emEdicao bit
)
AS
BEGIN
	INSERT INTO @Resultado
	select os.id, os.idEmitente, os.idOperador, os.idOperacao, op.descricao, os.idParceiro, os.idRepresentante, os.idVendedor, 
	os.dataHora, ose.dataHora, os.valorProdutos, os.valorServicos, os.descontoProdutos, os.descontoServicos, 
	os.totalProdutos, os.totalServicos, os.valorTotal, os.descontoTotal, os.totalGeralLiquido, os.valorAdiantamento, os.valorAcrescimo,
	os.status, coalesce(os.idnConcluida, 0), coalesce(os.idnCancelada, 0), os.numeroOS, os.serieOS, os.nomeContato, 	
	os.observacao, 
	(case when (select count(osf.idNotaFiscal) from OrdemServicoFaturada osf 
		inner join notafiscal nff on nff.id = osf.idNotaFiscal
		where (osf.tipoNota = 'NFe')
		and (nff.nfeTpAmb = 1)
		and (osf.idOrdemServico = os.id)
		and (nff.nfeCstat in (100,150))
		) > 0 then cast(1 as bit) else cast(0 as bit) end) as idnNFe,
	(case when (select count(osf.idNotaFiscal) from OrdemServicoFaturada osf 
		inner join notafiscal nff on nff.id = osf.idNotaFiscal
		where (osf.tipoNota = 'NFse')
		and (nff.nfeTpAmb = 1)
		and (osf.idOrdemServico = os.id)
		and (nff.nfeCstat in (100,150))
		) > 0 then cast(1 as bit) else cast(0 as bit) end) as idnNFSe,
	os.numeroProjeto, os.quilometragemPercurso, os.idParceiroTransporteOrigem, pat.razaosocial, 
	vtr.descricao, vtr.placa, 
	os.idSituacao, oss.descricao, 
	--Dados do veiculo
	osv.anoFabricado, osv.anoModelo, osv.cor, fv.descricao, cv.descricao, osv.chassis, osv.quilometragem, osv.descricaoNome, osv.condicaoVeiculo,
	osv.instrucaoProblema, osv.observacoes, osv.placa, osv.frota, osv.numeroEixos, 
	--Dados do Parceiro
	(case when pa.razaosocial COLLATE Latin1_General_CI_AS = 'CLIENTES DIVERSOS' and coalesce(nomeContato COLLATE Latin1_General_CI_AS, '') <> '' then os.nomeContato COLLATE Latin1_General_CI_AS else pa.razaosocial COLLATE Latin1_General_CI_AS end) COLLATE Latin1_General_CI_AS, pa.telefone,
	ciPa.descricao, ciPa.uf,
	pv.razaosocial as nomeVendedor, 
	osme.idTipoEquipamento, te.descricao, osme.qtd, osme.hrsTrabalhadas, osme.voltagem, osme.marca, osme.serie, osme.modelo, osme.instrucoes, osme.acessorios, 
	null,
	pe.numeroPedido,
	(case when exists (select 1 from OrdemServicoEdicao osed where osed.idOrdemServico = os.id) then 1 else 0 end)
	from OrdemServico os
	inner join operacao op on op.id = os.idOperacao
	left join OrdemServicoEncerrada ose on ose.idOrdemServico = os.id
	left join parceiro pat on pat.id = os.idParceiroTransporteOrigem
	left join veiculo vtr on vtr.id = os.idVeiculo
	left join OrdemServicoVeiculo osv on osv.idOrdemServico = os.id
	left join OrdemServicoSituacao oss on oss.id = os.idSituacao
	left join FabricanteVeiculo fv on fv.id = osv.idFabricanteVeiculo
	left join CombustivelVeiculo cv on cv.id = osv.idCombustivelVeiculo
	left join parceiro pa on pa.id = os.idParceiro
	left join cidade ciPa on ciPa.id = pa.idCidade
	left join parceiro pv on pv.id = os.idVendedor
	left join OrdemServicoMaquinasEquipamentos osme on osme.idOrdemServico = os.id and osme.id = (select top 1 me.id from OrdemServicoMaquinasEquipamentos me where me.idOrdemServico = os.id)
	left join OrdemServicoPetShop osps on osps.idOrdemServico = os.id and osps.id = (select top 1 ps.id from OrdemServicoMaquinasEquipamentos ps where ps.idOrdemServico = os.id)
	left join Animal an on an.id = osps.idAnimal
	left join tiposEquipamentos te on te.id = osme.idTipoEquipamento
	left join pedido pe on pe.id = os.idPedido
	where ((cast(os.dataHora as date) between @dataAberturaInicial and @dataAberturaFinal)
	and ((osv.placa = @placa) or (@placa = ''))
	and ((osv.frota = @frota) or (@frota = ''))
	and ((os.idParceiro = @idParceiro) or (@idParceiro = 0))
	and ((os.idOperacao = @idOperacao) or (@idOperacao = 0))
	and ((os.idEmitente = @idEmitente) or (@idEmitente = 0))
	and ((os.idRepresentante = @idRepresentante) or (@idRepresentante = 0))
	and ((os.idOperador = @idOperador) or (@idOperador = 0))
	and ((os.idSituacao = @idSituacao) or (@idSituacao = 0))
	and ((osme.serie = @serie) or (@serie = ''))
	and ((an.nomeAnimal = @nomeAnimal) or (@nomeAnimal = ''))
	and ((((os.status = 'Aberta' and @idnAbertas = 1) and (coalesce(os.idnCancelada, 0) = 0)) 
		or ((os.status = 'Encerrada' and @idnEncerradas = 1) or (coalesce(os.idnConcluida, 0) = 1 and @idnConcluidas = 1))
		or (coalesce(os.idnCancelada, 0) = 1 and @idnCancelada = 1)) 
		or (@idnTodas = 1))	
	and ((@descricaoProduto = '') or (os.id in (select osp.idOrdemServico from OrdemServicoProduto osp where osp.descricaoProduto like '%' + @descricaoProduto + '%')))
	and ((@descricaoServico = '') or (os.id in (select oss.idOrdemServico from OrdemServicoServico oss where oss.descricaoServico like '%' + @descricaoServico + '%')))
	and ((@descricaoObservacao = '') or (os.observacao like '%' + @descricaoObservacao + '%'))
	and ((@idTecnico = 0) or (@idTecnico > 0 and (os.id in (select osp.idOrdemServico from ordemservicoproduto osp where osp.idTecnico = @idTecnico)) or (os.id in (select oss.idOrdemServico from OrdemServicoServico oss where oss.idTecnico = @idTecnico))))	
	and ((@idSupervisor = 0) or (@idSupervisor > 0 and os.id in (select oss.idOrdemServico from OrdemServicoServico oss where oss.idParceiroSupervisor = @idSupervisor)))
	and (@idOrdemServico = 0 and @numeroOS = 0))
	or (((os.id = @idOrdemServico) and (@idOrdemServico > 0)) or ((os.numeroOS = @numeroOS) and (@numeroOS > 0)))
	order by os.id desc



	/*@dataAberturaInicial date,
	@dataAberturaFinal date,
	@placa varchar(20),
	@frota varchar(20),
	@idParceiro int,
	@idOperacao int,
	@idEmitente int,
	@idRepresentante int,
	@idOperador int,
	@idSituacao int,
	@serie varchar(100),
	@nomeAnimal varchar(50),
	@idnAbertas bit,
	@idnCancelada bit,
	@idnEncerradas bit,
	@idnConcluidas bit,
	@idnTodas bit,
	@numeroOS int,
	@descricaoProduto varchar(250),
	@descricaoServico varchar(1000),
	@descricaoObservacao text,
	@idTecnico int,
	@idSupervisor int*/


	RETURN 
END
GO
ALTER TABLE [dbo].[CamposFinanceiroDominio] ADD CONSTRAINT [fk_emitente] FOREIGN KEY
	(
		[idEmitente]
	)
	REFERENCES [dbo].[emitente]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[OrdemServicoEdicao] ADD CONSTRAINT [FK_OrdemServicoEdicao_Operador] FOREIGN KEY
	(
		[idOperador]
	)
	REFERENCES [dbo].[Operador]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[OrdemServicoEdicao] ADD CONSTRAINT [FK_OrdemServicoEdicao_OrdemServico] FOREIGN KEY
	(
		[idOrdemServico]
	)
	REFERENCES [dbo].[OrdemServico]
	(
		[id]
	)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) 
VALUES ('carregarSomenteProdutosdeVendaNasEtiquetas', 'Carregar somente produtos para vendas na geração das etiquetas', 'Ative este parâmetro quando deseja que somente produtos para venda estejam disponíveis nas telas de geração das etiquetas.', 'bool', 'false', 'Geral', 'Configurações de Etiqueta',null,0,0,0,0,0,null,null,null,0)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) 
VALUES ('idnExigirIndicadorIEPresencaCompradorParceiro', 'Exigir o preenchimento Ind. IE Destinat. e do Ind. Consum. Final no cadastro do parceiro', '', 'bool', 'false', 'Geral', 'Configurações do Parceiro', null, 0,0,0,0,0,null,null,null,0)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('idnIncluirTagPlacaVeiculosNasObsContribuinteCTe', 'Incluir a tag com a Placa dos Veículos do CTe, nas Observações do Contribuinte', 'Selecione esta opção quando desejar que uma Observação de Interesse do Contribuinte com o identificador "PLACA" seja incluído para cada veículo inserido no CTe.', 'bool', 'False', 'CTe', 'Configurações do CTe',null,0,0,0,0,0,null,null,null,0)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('idnBloquearEdicaoSimultaneaOS', 'Habilitar o bloqueio de edição simultânea da OS', 'Selecione esta opção quando desejar que a OS não possa ser alterada por mais de um Operador ao mesmo tempo, evitando assim perda de informações ou outros conflitos que possam ser gerados.', 'bool', 'True', 'Ordem de Serviço', 'Configurações da OS',null,0,0,0,1,0,null,null,null,0)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('qtdDiasTerminoPrevistoOP', 'Quantidade de dias prevista para o término', 'Informe a quantidade de dias padrão, para a previsão de término da OP a partir do Início. Quando definido os dias, a data de término prevista é preenchida automaticamente, considerando a data de início prevista.', 'int', null, 'Ordem de Produção', 'Configurações da OP',null,0,0,0,0,0,null,null,null,0)
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(558, 816, GETDATE(),1);