· 8 years ago · Jul 25, 2018, 02:26 PM
1use colsip
2go
3
4IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tmpTabelaErros'))
5BEGIN
6 Drop table tmpTabelaErros
7END
8go
9Create Table tmpTabelaErros (
10 ClienteCodigo Varchar(10), Erro Varchar(8000), Valor Money,
11 UltAltContrData Varchar(10), UltAltContrUsuario Varchar(1000),
12 UltResilicaoData Varchar(10),UltResilicaoPossuiProduto Varchar(30))
13Go
14IF OBJECT_ID('tempdb..#PrecosCliente') IS NOT NULL DROP TABLE #PrecosCliente
15
16Set DateFormat Dmy
17
18--Fábricas
19Declare @cFabricaProsoft Int = 1;
20Declare @cFabricaOffice2Crm Int = 2;
21Declare @cFabricaConemp Int = 3;
22Declare @cFabricaAnalisador Int = 4;
23Declare @cFabricaNfeGerenciador Int = 5;
24Declare @cFabricaNfe Int = 6;
25Declare @cFabricaPervasive Int = 7;
26Declare @cFabricaAuditor Int = 9;
27Declare @cFabricaGfc Int = 10;
28Declare @cFabricaUniversidade Int = 11;
29Declare @cFabricaBackup Int = 12;
30Declare @cFabricaPortal Int = 14;
31
32--Percorre os clientes para fazer o processamento
33DECLARE @vCURSOR_cad_id INT;
34DECLARE @vCURSOR_cad_codigo VARCHAR(50);
35DECLARE @vCURSOR_cad_desde Datetime;
36DECLARE cursorClientes CURSOR FAST_FORWARD FOR
37 SELECT Distinct
38 a.cad_id, a.cad_codigo, a.cad_desde
39 FROM fsp_cadastro As a
40 Inner Join fsp_contrato As b On b.ctr_fk_cadastro = a.cad_id And b.ctr_status <> 'I' And b.ctr_fk_contratotipo = 10 And b.ctr_faturadopor = 'P'
41 Where a.cad_fk_tipo In (2, 6)
42 And a.cad_status = 'P'
43 --And a.cad_codigo = '00002'
44 Order By a.cad_codigo
45
46 OPEN cursorClientes
47 FETCH NEXT FROM cursorClientes INTO @vCURSOR_cad_id, @vCURSOR_cad_codigo, @vCURSOR_cad_desde
48 WHILE (@@FETCH_STATUS = 0)
49 BEGIN
50 Begin Try
51 ------------------------------------------------------------------------------------------------------------------------------------------------------------
52 --Valor atual dos contratos do cliente
53 ------------------------------------------------------------------------------------------------------------------------------------------------------------
54 Declare @vValorContratoAtual_TodasFabricas Money = 0;
55 Declare @vValorContratoAtual_Fabrica_Prosoft Money = 0;
56 Declare @vValorContratoAtual_Fabrica_Office2Crm Money = 0;
57 Declare @vValorContratoAtual_Fabrica_Conemp Money = 0;
58 Declare @vValorContratoAtual_Fabrica_Analisador Money = 0;
59 Declare @vValorContratoAtual_Fabrica_NfeAmbas Money = 0;
60 Declare @vValorContratoAtual_Fabrica_Pervasive Money = 0;
61 Declare @vValorContratoAtual_Fabrica_Auditor Money = 0;
62 Declare @vValorContratoAtual_Fabrica_GFC Money = 0;
63 Declare @vValorContratoAtual_Fabrica_Universidade Money = 0;
64 Declare @vValorContratoAtual_Fabrica_Backup Money = 0;
65 Declare @vValorContratoAtual_Fabrica_PortalSolucoes Money = 0;
66
67 Set @vValorContratoAtual_TodasFabricas = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
68 Set @vValorContratoAtual_Fabrica_Prosoft = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaProsoft Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
69 Set @vValorContratoAtual_Fabrica_Office2Crm = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaOffice2Crm Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
70 Set @vValorContratoAtual_Fabrica_Conemp = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaConemp Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
71 Set @vValorContratoAtual_Fabrica_Analisador = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaAnalisador Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
72 Set @vValorContratoAtual_Fabrica_NfeAmbas = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica In (@cFabricaNfeGerenciador, @cFabricaNfe) Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
73 Set @vValorContratoAtual_Fabrica_Pervasive = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaPervasive Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
74 Set @vValorContratoAtual_Fabrica_Auditor = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaAuditor Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
75 Set @vValorContratoAtual_Fabrica_GFC = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaGfc Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
76 Set @vValorContratoAtual_Fabrica_Universidade = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaUniversidade Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
77 Set @vValorContratoAtual_Fabrica_Backup = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaBackup Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
78 Set @vValorContratoAtual_Fabrica_PortalSolucoes = (Select Sum(Isnull(c.cfv_vlitem,0)) From fsp_contrato As a Inner Join fsp_contrato_faturamento As b On b.ctf_fk_contrato = a.ctr_id And b.ctf_status <> 'I' Inner Join fsp_contrato_faturamentovalor As c On c.cfv_fk_contratofaturamento = b.ctf_id And c.cfv_fk_fabrica = @cFabricaPortal Where a.ctr_fk_cadastro = @vCURSOR_cad_id And a.ctr_status <> 'I' And a.ctr_fk_contratotipo = 10 And a.ctr_faturadopor = 'P');
79
80 Set @vValorContratoAtual_TodasFabricas = IsNull(@vValorContratoAtual_TodasFabricas , 0);
81 Set @vValorContratoAtual_Fabrica_Prosoft = IsNull(@vValorContratoAtual_Fabrica_Prosoft , 0);
82 Set @vValorContratoAtual_Fabrica_Office2Crm = IsNull(@vValorContratoAtual_Fabrica_Office2Crm , 0);
83 Set @vValorContratoAtual_Fabrica_Conemp = IsNull(@vValorContratoAtual_Fabrica_Conemp , 0);
84 Set @vValorContratoAtual_Fabrica_Analisador = IsNull(@vValorContratoAtual_Fabrica_Analisador , 0);
85 Set @vValorContratoAtual_Fabrica_NfeAmbas = IsNull(@vValorContratoAtual_Fabrica_NfeAmbas , 0);
86 Set @vValorContratoAtual_Fabrica_Pervasive = IsNull(@vValorContratoAtual_Fabrica_Pervasive , 0);
87 Set @vValorContratoAtual_Fabrica_Auditor = IsNull(@vValorContratoAtual_Fabrica_Auditor , 0);
88 Set @vValorContratoAtual_Fabrica_GFC = IsNull(@vValorContratoAtual_Fabrica_GFC , 0);
89 Set @vValorContratoAtual_Fabrica_Universidade = IsNull(@vValorContratoAtual_Fabrica_Universidade , 0);
90 Set @vValorContratoAtual_Fabrica_Backup = IsNull(@vValorContratoAtual_Fabrica_Backup , 0);
91 Set @vValorContratoAtual_Fabrica_PortalSolucoes = IsNull(@vValorContratoAtual_Fabrica_PortalSolucoes, 0);
92
93 ------------------------------------------------------------------------------------------------------------------------------------------------------------
94 --Tabela de produtos do cliente
95 ------------------------------------------------------------------------------------------------------------------------------------------------------------
96 Declare @vTabelaProdutosCliente Table (asp_fk_cliente int, asp_fk_produtoservico int, asp_fk_indicadorposseproduto char(1), asp_quantidade int, asp_dtprimeiracompra datetime, asp_fk_clientemodelocompra char(1), asp_vlbruto money, asp_vldesconto money, asp_vlliquido money)
97 Delete From @vTabelaProdutosCliente
98
99 ------------------------------------------------------------------------------------------------------------------------------------------------------------
100 --Insere os Produtos do asset
101 ------------------------------------------------------------------------------------------------------------------------------------------------------------
102 Insert Into @vTabelaProdutosCliente (
103 asp_fk_cliente,
104 asp_fk_produtoservico,
105 asp_fk_indicadorposseproduto,
106 asp_quantidade,
107 asp_dtprimeiracompra,
108 asp_fk_clientemodelocompra
109 )
110 Select
111 @vCURSOR_cad_id,
112 b.pds_id,
113 Case --P Possui / J Já Possuiu
114 When IsNull(a.cxp_man,'') = 'S' Then 'P'
115 When IsNull(a.cxp_man,'') = 'N' Then 'J'
116 When IsNull(a.cxp_man,'') = '' Then 'J'
117 End,
118 IsNull(Isnull(a.cxp_aea, a.cxp_celt), 1),
119 a.cxp_dtaquisicao,
120 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
121 From fsp_cadastro_produto As a
122 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
123 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
124 And c.psl_codbusca Not In ('LWPCN','LWPAN','LUNIV','LWPJU', 'LINFE', 'LIPSOL', 'LIOF2', 'LPBACK', 'LGID', 'LIOF2CRM') --Remove da query ProConemp, Analir, Universidade, ProJur, NFe, Portal de Soluções, OFFICE2 antigo, Backup, GID, Office2 CRM
125 And b.pds_codbusca Not In ('PWBIBIN')
126 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
127 And a.cxp_ins = 'S'
128 And (Isnull(a.cxp_aea,0) + IsNull(a.cxp_celt, 0)) > 0
129
130 ------------------------------------------------------------------------------------------------------------------------------------------------------------
131 --Insere os Portal de Soluções / nfe / office2 antigo
132 ------------------------------------------------------------------------------------------------------------------------------------------------------------
133 Insert Into @vTabelaProdutosCliente (
134 asp_fk_cliente,
135 asp_fk_produtoservico,
136 asp_fk_indicadorposseproduto,
137 asp_quantidade,
138 asp_dtprimeiracompra,
139 asp_fk_clientemodelocompra
140 )
141 Select
142 @vCURSOR_cad_id,
143 b.pds_id,
144 Case --P Possui / J Já Possuiu
145 When IsNull(a.cxp_man,'') = 'S' Then 'P'
146 When IsNull(a.cxp_man,'') = 'N' Then 'J'
147 When IsNull(a.cxp_man,'') = '' Then 'J'
148 End,
149 1, --Força 1 na quantidade
150 a.cxp_dtaquisicao,
151 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
152 From fsp_cadastro_produto As a
153 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
154 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
155 And c.psl_codbusca IN ('LIPSOL', 'LINFE', 'LIOF2')
156 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
157 And a.cxp_ins = 'S'
158
159 ------------------------------------------------------------------------------------------------------------------------------------------------------------
160 --Insere os Produtos do ProConemp (precisa somar a.cxp_aea e a.cxp_celt)
161 ------------------------------------------------------------------------------------------------------------------------------------------------------------
162 Insert Into @vTabelaProdutosCliente (
163 asp_fk_cliente,
164 asp_fk_produtoservico,
165 asp_fk_indicadorposseproduto,
166 asp_quantidade,
167 asp_dtprimeiracompra,
168 asp_fk_clientemodelocompra
169 )
170 Select
171 @vCURSOR_cad_id,
172 b.pds_id,
173 Case --P Possui / J Já Possuiu
174 When IsNull(a.cxp_man,'') = 'S' Then 'P'
175 When IsNull(a.cxp_man,'') = 'N' Then 'J'
176 When IsNull(a.cxp_man,'') = '' Then 'J'
177 End,
178 IsNull(Isnull(a.cxp_aea, 0) + IsNull(a.cxp_celt, 0), 1),
179 a.cxp_dtaquisicao,
180 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
181 From fsp_cadastro_produto As a
182 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
183 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
184 And c.psl_codbusca = 'LWPCN' --Apenas ProConemp
185 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
186 And a.cxp_ins = 'S'
187
188 ------------------------------------------------------------------------------------------------------------------------------------------------------------
189 --Insere o Prosoft Backup / GID / Office2 CRM (que não tem cxp_aea e cxp_celt)
190 ------------------------------------------------------------------------------------------------------------------------------------------------------------
191 Insert Into @vTabelaProdutosCliente (
192 asp_fk_cliente,
193 asp_fk_produtoservico,
194 asp_fk_indicadorposseproduto,
195 asp_quantidade,
196 asp_dtprimeiracompra,
197 asp_fk_clientemodelocompra
198 )
199 Select
200 @vCURSOR_cad_id,
201 b.pds_id,
202 Case --P Possui / J Já Possuiu
203 When IsNull(a.cxp_man,'') = 'S' Then 'P'
204 When IsNull(a.cxp_man,'') = 'N' Then 'J'
205 When IsNull(a.cxp_man,'') = '' Then 'J'
206 End,
207 1, --fixa a quantidade em 1
208 a.cxp_dtaquisicao,
209 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
210 From fsp_cadastro_produto As a
211 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
212 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
213 And c.psl_codbusca In ('LPBACK', 'LGID', 'LIOF2CRM') --Apenas Prosoft Backup, GID, Office2CRM
214 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
215 And IsNull(a.cxp_ins, 'N') = 'S'
216
217 ------------------------------------------------------------------------------------------------------------------------------------------------------------
218 --Insere o BI (que não tem cxp_aea e cxp_celt)
219 ------------------------------------------------------------------------------------------------------------------------------------------------------------
220 Insert Into @vTabelaProdutosCliente (
221 asp_fk_cliente,
222 asp_fk_produtoservico,
223 asp_fk_indicadorposseproduto,
224 asp_quantidade,
225 asp_dtprimeiracompra,
226 asp_fk_clientemodelocompra
227 )
228 Select
229 @vCURSOR_cad_id,
230 b.pds_id,
231 Case --P Possui / J Já Possuiu
232 When IsNull(a.cxp_man,'') = 'S' Then 'P'
233 When IsNull(a.cxp_man,'') = 'N' Then 'J'
234 When IsNull(a.cxp_man,'') = '' Then 'J'
235 End,
236 1, --fixa a quantidade em 1
237 a.cxp_dtaquisicao,
238 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
239 From fsp_cadastro_produto As a
240 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
241 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
242 And b.pds_codbusca = 'PWBIBIN'
243 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
244 And IsNull(a.cxp_ins, 'N') = 'S'
245
246 ------------------------------------------------------------------------------------------------------------------------------------------------------------
247 --Insere o Analir (que não tem cxp_ins e cxp_man)
248 ------------------------------------------------------------------------------------------------------------------------------------------------------------
249 Insert Into @vTabelaProdutosCliente (
250 asp_fk_cliente,
251 asp_fk_produtoservico,
252 asp_fk_indicadorposseproduto,
253 asp_quantidade,
254 asp_dtprimeiracompra,
255 asp_fk_clientemodelocompra
256 )
257 Select
258 @vCURSOR_cad_id,
259 b.pds_id,
260 Case --P Possui / J Já Possuiu
261 When IsNull(a.cxp_resilicao,'') = 'S' Then 'J'
262 Else 'P'
263 End,
264 1, --fixa a quantidade em 1
265 a.cxp_dtaquisicao,
266 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
267 From fsp_cadastro_produto As a
268 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
269 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
270 And c.psl_codbusca In ('LWPAN') --Apenas Analir
271 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
272 And IsNull(a.cxp_celt, 0) > 0
273
274 ------------------------------------------------------------------------------------------------------------------------------------------------------------
275 --Insere ProJur (que não tem cxp_ins e cxp_man)
276 ------------------------------------------------------------------------------------------------------------------------------------------------------------
277 Insert Into @vTabelaProdutosCliente (
278 asp_fk_cliente,
279 asp_fk_produtoservico,
280 asp_fk_indicadorposseproduto,
281 asp_quantidade,
282 asp_dtprimeiracompra,
283 asp_fk_clientemodelocompra
284 )
285 Select
286 @vCURSOR_cad_id,
287 b.pds_id,
288 Case --P Possui / J Já Possuiu
289 When IsNull(a.cxp_resilicao,'') = 'S' Then 'J'
290 Else 'P'
291 End,
292 IsNull(a.cxp_celt, 0),
293 a.cxp_dtaquisicao,
294 CASE WHEN ISNULL(a.cxp_subscription, 'N') = 'S' Then 'S' Else 'L' End
295 From fsp_cadastro_produto As a
296 inner Join fsp_produtoservico As b On b.pds_fk_produto = a.cxp_fk_produto
297 Inner Join fsp_produtoservicolinha As c On c.psl_id = b.pds_fk_produtoservicolinha
298 And c.psl_codbusca In ('LWPJU') --Apenas ProJur
299 Where a.cxp_fk_cadastro = @vCURSOR_cad_id
300 And IsNull(a.cxp_celt, 0) > 0
301
302 ------------------------------------------------------------------------------------------------------------------------------------------------------------
303 --Insere o Master Training
304 ------------------------------------------------------------------------------------------------------------------------------------------------------------
305 Insert Into @vTabelaProdutosCliente (
306 asp_fk_cliente,
307 asp_fk_produtoservico,
308 asp_fk_indicadorposseproduto,
309 asp_quantidade,
310 asp_dtprimeiracompra,
311 asp_fk_clientemodelocompra
312 )
313 Select
314 @vCURSOR_cad_id,
315 (select top 1 pds_id from fsp_produtoservico where pds_codbusca = 'PMTNGASSAN'),
316 Case a.cmt_status When 'P' Then 'P' Else 'J' End,
317 1,--fixa a quantidade em 1
318 (Select Min(x1.cmt_dtadesao) From fsp_cadastro_mastertraining As x1 Where x1.cmt_fk_cliente = a.cmt_fk_cliente),
319 Case
320 When (Select Min(x1.cmt_dtadesao) From fsp_cadastro_mastertraining As x1 Where x1.cmt_fk_cliente = a.cmt_fk_cliente) >= '01/02/2017' Then 'S'
321 Else 'L'
322 End
323 From fsp_cadastro_mastertraining As a
324 Where a.cmt_fk_cliente = @vCURSOR_cad_id
325 And a.cmt_flgindicadoratual = 'S'
326 And a.cmt_tipo Not In ('D', 'T') -- Degustação / Trial
327
328 ------------------------------------------------------------------------------------------------------------------------------------------------------------
329 --Verifica se o cliente não possui nenhum produto mas tem contrato
330 ------------------------------------------------------------------------------------------------------------------------------------------------------------
331 If (@vValorContratoAtual_TodasFabricas > 0 And Not Exists (
332 Select Top 1 * From @vTabelaProdutosCliente where asp_fk_cliente = @vCURSOR_cad_id And asp_fk_indicadorposseproduto = 'P'
333 ))
334 Begin
335 Insert Into tmpTabelaErros (ClienteCodigo, Erro, Valor) Values (@vCURSOR_cad_codigo, 'Cliente não possui nenhum produto mas possui valor de contrato.', @vValorContratoAtual_TodasFabricas)
336 End
337
338 ------------------------------------------------------------------------------------------------------------------------------------------------------------
339 --Valores dos produtos (sem desconto)
340 ------------------------------------------------------------------------------------------------------------------------------------------------------------
341 --Cria lista de preços como se o cliente estivesse comprando hoje
342 Create Table #PrecosCliente (FabricaId Int, ProdutoServicoId Int, ProdutoNome Varchar(1000), ProdutoServicoLinhaCodBusca Varchar(100), Qtde Int, ValorUnit Money, ValorTotal Money, Percentual Money, ItemArredondar Bit Not Null Default 0);
343 Insert Into #PrecosCliente (FabricaId, ProdutoServicoId, ProdutoNome, ProdutoServicoLinhaCodBusca, Qtde, ValorUnit, ValorTotal)
344 Select
345 d.FabricaId,
346 d.ProdutoServicoId,
347 c.psl_linha + ' / ' + b.pds_produtoservico,
348 c.psl_codbusca,
349 a.asp_quantidade,
350 d.ValorUnitario,
351 (a.asp_quantidade * d.ValorUnitario)
352 From @vTabelaProdutosCliente As a
353 Inner Join fsp_produtoservico AS b On b.pds_id = a.asp_fk_produtoservico
354 Inner join fsp_produtoservicolinha as c on c.psl_id = b.pds_fk_produtoservicolinha and c.psl_codbusca not in ('LWPAN')
355 Inner join tmpTabelaPrecos As d On d.ProdutoServicoId = a.asp_fk_produtoservico
356 And d.ValorUnitario > 0
357 Where a.asp_fk_cliente = @vCURSOR_cad_id
358 And a.asp_fk_indicadorposseproduto = 'P' --SELECT * FROM fsp_assetindicadorposseproduto
359 And a.asp_quantidade > 0
360
361 --Se o cliente só possuir produtos que atualmente não estão na tabela de preços, inclui na tabela temporária #PrecosCliente todos os produtos que o cliente possui com um valor fixo de 1.00
362 If (Not Exists(Select Top 1 * From #PrecosCliente))
363 Begin
364 Insert Into #PrecosCliente (FabricaId, ProdutoServicoId, ProdutoNome, ProdutoServicoLinhaCodBusca, Qtde, ValorUnit, ValorTotal)
365 Select
366 1, --Fabrica fixa como 1
367 b.pds_id,
368 c.psl_linha + ' / ' + b.pds_produtoservico,
369 c.psl_codbusca,
370 a.asp_quantidade,
371 1.00,
372 (a.asp_quantidade * 1.00)
373 From @vTabelaProdutosCliente As a
374 Inner Join fsp_produtoservico AS b On b.pds_id = a.asp_fk_produtoservico
375 Inner join fsp_produtoservicolinha as c on c.psl_id = b.pds_fk_produtoservicolinha and c.psl_codbusca not in ('LWPAN')
376 Where a.asp_fk_cliente = @vCURSOR_cad_id
377 And a.asp_fk_indicadorposseproduto = 'P' --SELECT * FROM fsp_assetindicadorposseproduto
378 And a.asp_quantidade > 0
379 End
380
381 --Define o item que receberá o arredondamento para cada fábrica (caso o cliente possua algum produto da fábrica)
382 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaProsoft)
383 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaOffice2Crm)
384 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaConemp)
385 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaAnalisador)
386 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaNfeGerenciador)
387 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaPervasive)
388 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaAuditor)
389 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaGfc)
390 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaUniversidade)
391 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaBackup)
392 Update #PrecosCliente Set ItemArredondar = 1 Where ProdutoServicoId = (Select Top 1 x.ProdutoServicoId From #PrecosCliente As x Where x.FabricaId = @cFabricaPortal)
393
394 --Define o percentual de cada produto baseado no valor de cada fábrica
395 Declare @vFabrica_Prosoft_ValorTotal Money = Null;
396 Declare @vFabrica_Office2Crm_ValorTotal Money = Null;
397 Declare @vFabrica_Conemp_ValorTotal Money = Null;
398 Declare @vFabrica_Analisador_ValorTotal Money = Null;
399 Declare @vFabrica_NfeAmbas_ValorTotal Money = Null;
400 Declare @vFabrica_Pervasive_ValorTotal Money = Null;
401 Declare @vFabrica_Auditor_ValorTotal Money = Null;
402 Declare @vFabrica_GFC_ValorTotal Money = Null;
403 Declare @vFabrica_Universidade_ValorTotal Money = Null;
404 Declare @vFabrica_Backup_ValorTotal Money = Null;
405 Declare @vFabrica_PortalSolucoes_ValorTotal Money = Null;
406
407 Select @vFabrica_Prosoft_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaProsoft
408 Select @vFabrica_Office2Crm_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaOffice2Crm
409 Select @vFabrica_Conemp_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaConemp
410 Select @vFabrica_Analisador_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaAnalisador
411 Select @vFabrica_NfeAmbas_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaNfeGerenciador
412 Select @vFabrica_Pervasive_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaPervasive
413 Select @vFabrica_Auditor_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaAuditor
414 Select @vFabrica_GFC_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaGfc
415 Select @vFabrica_Universidade_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaUniversidade
416 Select @vFabrica_Backup_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaBackup
417 Select @vFabrica_PortalSolucoes_ValorTotal = Sum(a.ValorTotal) From #PrecosCliente As a Where a.ValorTotal > 0 And a.FabricaId = @cFabricaPortal
418
419 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Prosoft_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaProsoft
420 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Office2Crm_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaOffice2Crm
421 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Conemp_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaConemp
422 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Analisador_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaAnalisador
423 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_NfeAmbas_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaNfeGerenciador
424 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Pervasive_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaPervasive
425 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Auditor_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaAuditor
426 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_GFC_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaGfc
427 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Universidade_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaUniversidade
428 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_Backup_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaBackup
429 Update a Set a.Percentual = Round((a.ValorTotal / @vFabrica_PortalSolucoes_ValorTotal) * 100, 2) From #PrecosCliente As a Where a.FabricaId = @cFabricaPortal
430
431 --Arredonda o percentual em um item de cada fábrica
432 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaProsoft) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaProsoft
433 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaOffice2Crm) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaOffice2Crm
434 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaConemp) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaConemp
435 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaAnalisador) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaAnalisador
436 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaNfeGerenciador) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaNfeGerenciador
437 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaPervasive) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaPervasive
438 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaAuditor) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaAuditor
439 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaGfc) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaGfc
440 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaUniversidade) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaUniversidade
441 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaBackup) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaBackup
442 Update a Set a.Percentual = 100 - IsNull((Select Sum(x.Percentual) From #PrecosCliente As x Where x.ItemArredondar = 0 And x.FabricaId = @cFabricaPortal) , 0) From #PrecosCliente As a Where a.ItemArredondar = 1 And a.FabricaId = @cFabricaPortal
443
444 --Verifica se o cliente não tem o produto de uma fábrica especÃfica mas tem valor. Isso não pode ocorrer porque o cliente não deveria ter valor sendo cobrado sem ter o produto
445 Declare @vFabricaComValorEClienteSemProduto Varchar(1000) = '';
446 Declare @vFabricaComValorEClienteSemProduto_NomeProduto Varchar(100) = '';
447 Declare @vFabricaComValorEClienteSemProdutoValor Money = 0;
448 If (@vValorContratoAtual_Fabrica_Prosoft > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaProsoft )) Begin Set @vFabricaComValorEClienteSemProduto = 'Prosoft' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Prosoft ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Prosoft '; End
449 If (@vValorContratoAtual_Fabrica_Office2Crm > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaOffice2Crm )) Begin Set @vFabricaComValorEClienteSemProduto = 'Office2Crm' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Office2Crm ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Office2 '; End
450 If (@vValorContratoAtual_Fabrica_Conemp > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaConemp )) Begin Set @vFabricaComValorEClienteSemProduto = 'Conemp' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Conemp ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Conemp '; End
451 If (@vValorContratoAtual_Fabrica_Analisador > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaAnalisador )) Begin Set @vFabricaComValorEClienteSemProduto = 'Analisador' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Analisador ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Analisador '; End
452 If (@vValorContratoAtual_Fabrica_NfeAmbas > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaNfeGerenciador )) Begin Set @vFabricaComValorEClienteSemProduto = 'Nfe' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_NfeAmbas ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'NF-e '; End
453 If (@vValorContratoAtual_Fabrica_Pervasive > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaPervasive )) Begin Set @vFabricaComValorEClienteSemProduto = 'Pervasive' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Pervasive ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Pervasive '; End
454 If (@vValorContratoAtual_Fabrica_Auditor > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaAuditor )) Begin Set @vFabricaComValorEClienteSemProduto = 'Auditor' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Auditor ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Auditor '; End
455 If (@vValorContratoAtual_Fabrica_GFC > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaGfc )) Begin Set @vFabricaComValorEClienteSemProduto = 'Gfc' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_GFC ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Gfc '; End
456 If (@vValorContratoAtual_Fabrica_Universidade > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaUniversidade )) Begin Set @vFabricaComValorEClienteSemProduto = 'Universidade' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Universidade ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Universidade '; End
457 If (@vValorContratoAtual_Fabrica_Backup > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaBackup )) Begin Set @vFabricaComValorEClienteSemProduto = 'Backup' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_Backup ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Backup '; End
458 If (@vValorContratoAtual_Fabrica_PortalSolucoes > 0 And Not Exists(Select Top 1 * From #PrecosCliente Where FabricaId = @cFabricaPortal )) Begin Set @vFabricaComValorEClienteSemProduto = 'Portal' ;Set @vFabricaComValorEClienteSemProdutoValor = @vValorContratoAtual_Fabrica_PortalSolucoes ; Set @vFabricaComValorEClienteSemProduto_NomeProduto = @vFabricaComValorEClienteSemProduto_NomeProduto + 'Portal '; End
459 If (@vFabricaComValorEClienteSemProduto <> '')
460 Begin
461 Set @vFabricaComValorEClienteSemProduto_NomeProduto = Left(@vFabricaComValorEClienteSemProduto_NomeProduto, Len(@vFabricaComValorEClienteSemProduto_NomeProduto)) --Remove espaço no final
462 Set @vFabricaComValorEClienteSemProduto_NomeProduto = Replace(@vFabricaComValorEClienteSemProduto_NomeProduto, ' ', '/')
463 End
464 If (@vFabricaComValorEClienteSemProduto <> '')
465 Begin
466 Declare @vUltResilicaoPossuiProduto Varchar(100);
467 If (@vFabricaComValorEClienteSemProduto In ('Prosoft', 'Portal'))
468 Begin
469 set @vUltResilicaoPossuiProduto = 'Não foi possÃvel identificar'
470 End
471 Else
472 Begin
473 Set @vUltResilicaoPossuiProduto = IsNull((select top 1 'Sim' from fsp_pedido_bloqueio as x1 inner join fsp_bloqueio_item as x2 on x2.bit_fk_bloqueio = x1.bdd_id inner join fsp_produtoservico as x3 on x3.pds_fk_produto = x2.bit_fk_produto and pds_produtoservico like '%' + @vFabricaComValorEClienteSemProduto_NomeProduto + '%' where x1.bdd_fk_cadastro = @vCURSOR_cad_id and x1.bdd_status = 'P' and x1.bdd_tipo = '1' order by x1.bdd_data desc), 'Não')
474 End
475
476 Insert Into tmpTabelaErros (ClienteCodigo, Erro, Valor, UltAltContrData, UltAltContrUsuario, UltResilicaoData, UltResilicaoPossuiProduto)
477 Values (
478 @vCURSOR_cad_codigo,
479 'Possui vl. contrato da(s) fábrica(s) mas não possui produto (' + @vFabricaComValorEClienteSemProduto_NomeProduto + ')',
480 @vFabricaComValorEClienteSemProdutoValor,
481 isnull((Select top 1 convert(varchar(10), x1.rlc_dtvalidacao, 103) from fsp_realinhamento_contrato as x1 where x1.rlc_fk_cliente = @vCURSOR_cad_id and x1.rlc_status ='P' order by x1.rlc_dtvalidacao desc), ''),
482 isnull((Select top 1 x2.usu_nomecompleto from fsp_realinhamento_contrato as x1 inner join colsuporte.dbo.pro_usuario as x2 on x2.usu_id = x1.rlc_fk_opevalidacao where x1.rlc_fk_cliente = @vCURSOR_cad_id and x1.rlc_status ='P' order by x1.rlc_dtvalidacao desc),''),
483 isnull((select top 1 convert(varchar(10), x1.bdd_dtvalidacao, 103) from fsp_pedido_bloqueio as x1 where x1.bdd_fk_cadastro = @vCURSOR_cad_id and x1.bdd_status = 'P' and x1.bdd_tipo = '1' order by x1.bdd_dtvalidacao desc), ''),
484 @vUltResilicaoPossuiProduto)
485 End
486
487 --O cliente pode possuir um valor em contrato e não ter nenhum produto daquela fábrica. Isso daria um valor final menor.
488 --Para isso não ocorrer, caso o cliente tenha um valor em contrato e não tenha o produto, o valor é colocado na fábrica Prosoft
489 If ((@vValorContratoAtual_Fabrica_Office2Crm > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaOffice2Crm)))
490 Begin
491 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Office2Crm);
492 Set @vValorContratoAtual_Fabrica_Office2Crm = 0;
493 End
494 If ((@vValorContratoAtual_Fabrica_Conemp > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaConemp)))
495 Begin
496 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Conemp);
497 Set @vValorContratoAtual_Fabrica_Conemp = 0;
498 End
499 If ((@vValorContratoAtual_Fabrica_Analisador > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaAnalisador)))
500 Begin
501 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Analisador);
502 Set @vValorContratoAtual_Fabrica_Analisador = 0;
503 End
504 If ((@vValorContratoAtual_Fabrica_NfeAmbas > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaNfeGerenciador)))
505 Begin
506 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_NfeAmbas);
507 Set @vValorContratoAtual_Fabrica_NfeAmbas = 0;
508 End
509 If ((@vValorContratoAtual_Fabrica_Pervasive > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaPervasive)))
510 Begin
511 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Pervasive);
512 Set @vValorContratoAtual_Fabrica_Pervasive = 0;
513 End
514 If ((@vValorContratoAtual_Fabrica_Auditor > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaAuditor)))
515 Begin
516 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Auditor);
517 Set @vValorContratoAtual_Fabrica_Auditor = 0;
518 End
519 If ((@vValorContratoAtual_Fabrica_GFC > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaGfc)))
520 Begin
521 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_GFC);
522 Set @vValorContratoAtual_Fabrica_GFC = 0;
523 End
524 If ((@vValorContratoAtual_Fabrica_Universidade > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaUniversidade)))
525 Begin
526 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Universidade);
527 Set @vValorContratoAtual_Fabrica_Universidade = 0;
528 End
529 If ((@vValorContratoAtual_Fabrica_Backup > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaBackup)))
530 Begin
531 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_Backup);
532 Set @vValorContratoAtual_Fabrica_Backup = 0;
533 End
534 If ((@vValorContratoAtual_Fabrica_PortalSolucoes > 0) And (Not Exists(Select Top 1 a.* From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaPortal)))
535 Begin
536 Set @vValorContratoAtual_Fabrica_Prosoft = (@vValorContratoAtual_Fabrica_Prosoft + @vValorContratoAtual_Fabrica_PortalSolucoes);
537 Set @vValorContratoAtual_Fabrica_PortalSolucoes = 0;
538 End
539
540 --Define o valor de cada produto baseado no percentual
541 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Prosoft , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaProsoft Where a.asp_fk_cliente = @vCURSOR_cad_id
542 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Office2Crm , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaOffice2Crm Where a.asp_fk_cliente = @vCURSOR_cad_id
543 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Conemp , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaConemp Where a.asp_fk_cliente = @vCURSOR_cad_id
544 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Analisador , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaAnalisador Where a.asp_fk_cliente = @vCURSOR_cad_id
545 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_NfeAmbas , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaNfeGerenciador Where a.asp_fk_cliente = @vCURSOR_cad_id
546 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Pervasive , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaPervasive Where a.asp_fk_cliente = @vCURSOR_cad_id
547 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Auditor , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaAuditor Where a.asp_fk_cliente = @vCURSOR_cad_id
548 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_GFC , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaGfc Where a.asp_fk_cliente = @vCURSOR_cad_id
549 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Universidade , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaUniversidade Where a.asp_fk_cliente = @vCURSOR_cad_id
550 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_Backup , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaBackup Where a.asp_fk_cliente = @vCURSOR_cad_id
551 Update a Set a.asp_vlbruto = Round((b.Percentual / 100) * @vValorContratoAtual_Fabrica_PortalSolucoes , 2) From @vTabelaProdutosCliente As a Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico And b.FabricaId = @cFabricaPortal Where a.asp_fk_cliente = @vCURSOR_cad_id
552
553 --Arredonda o valor de cada fábrica
554 DECLARE @vCursorArredondar_FabricaId Int
555 DECLARE cursorArredondar CURSOR FAST_FORWARD FOR
556 Select Distinct b.FabricaId
557 From @vTabelaProdutosCliente As a
558 Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico
559 And b.ItemArredondar = 1
560 Where a.asp_fk_cliente = @vCURSOR_cad_id
561
562 OPEN cursorArredondar
563 FETCH NEXT FROM cursorArredondar INTO @vCursorArredondar_FabricaId
564 WHILE (@@FETCH_STATUS = 0)
565 BEGIN
566 --Obtem o valor total (desconsiderando o valor do item a ser arredondado)
567 Declare @vValorTotalSemItemArredondado Money = Null
568 Select
569 @vValorTotalSemItemArredondado = Sum(x1.asp_vlbruto)
570 From @vTabelaProdutosCliente As x1
571 Inner Join #PrecosCliente As x2 On x2.ProdutoServicoId = x1.asp_fk_produtoservico
572 And x2.ItemArredondar = 0
573 And x2.FabricaId = @vCursorArredondar_FabricaId
574 Where x1.asp_fk_cliente = @vCURSOR_cad_id
575 Set @vValorTotalSemItemArredondado = IsNull(@vValorTotalSemItemArredondado, 0)
576
577 --Define o Valor total da fábrica em questão
578 Declare @vValorTotalFabricaEmQuestao Money =
579 Case @vCursorArredondar_FabricaId
580 When @cFabricaProsoft Then @vValorContratoAtual_Fabrica_Prosoft
581 When @cFabricaOffice2Crm Then @vValorContratoAtual_Fabrica_Office2Crm
582 When @cFabricaConemp Then @vValorContratoAtual_Fabrica_Conemp
583 When @cFabricaAnalisador Then @vValorContratoAtual_Fabrica_Analisador
584 When @cFabricaNfeGerenciador Then @vValorContratoAtual_Fabrica_NfeAmbas
585 When @cFabricaPervasive Then @vValorContratoAtual_Fabrica_Pervasive
586 When @cFabricaAuditor Then @vValorContratoAtual_Fabrica_Auditor
587 When @cFabricaGfc Then @vValorContratoAtual_Fabrica_GFC
588 When @cFabricaUniversidade Then @vValorContratoAtual_Fabrica_Universidade
589 When @cFabricaBackup Then @vValorContratoAtual_Fabrica_Backup
590 When @cFabricaPortal Then @vValorContratoAtual_Fabrica_PortalSolucoes
591 End
592
593 --Arredonda o item
594 Update a Set
595 a.asp_vlbruto = @vValorTotalFabricaEmQuestao - @vValorTotalSemItemArredondado
596 From @vTabelaProdutosCliente As a
597 Inner Join #PrecosCliente As b On b.ProdutoServicoId = a.asp_fk_produtoservico
598 And b.ItemArredondar = 1
599 And b.FabricaId = @vCursorArredondar_FabricaId
600 Where a.asp_fk_cliente = @vCURSOR_cad_id
601
602 FETCH NEXT FROM cursorArredondar INTO @vCursorArredondar_FabricaId
603 END
604 CLOSE cursorArredondar
605 DEALLOCATE cursorArredondar
606
607 Drop Table #PrecosCliente;
608
609 ------------------------------------------------------------------------------------------------------------------------------------------------------------
610 --Para produtos que o cliente já possuiu, zera a quantidade e valores
611 ------------------------------------------------------------------------------------------------------------------------------------------------------------
612 Update @vTabelaProdutosCliente Set
613 asp_quantidade = 0,
614 asp_vlbruto = 0,
615 asp_vldesconto = 0,
616 asp_vlliquido = 0
617 where asp_fk_cliente = @vCURSOR_cad_id
618 And asp_fk_indicadorposseproduto = 'J'
619
620 ------------------------------------------------------------------------------------------------------------------------------------------------------------
621 --Atualiza o valor dos produtos (@vTabelaProdutosCliente) com os valores de descontos vigentes
622 ------------------------------------------------------------------------------------------------------------------------------------------------------------
623 --Valor do desconto
624 Update a Set
625 a.asp_vldesconto = 0.00
626 From @vTabelaProdutosCliente As a
627 Where a.asp_fk_cliente = @vCURSOR_cad_id
628
629 --Valor bruto dos produtos que o cliente possui, mas não há tabela de preço vigente (portanto está null)
630 Update a Set
631 a.asp_vlbruto = 0.00
632 From @vTabelaProdutosCliente As a
633 Where a.asp_fk_cliente = @vCURSOR_cad_id
634 And a.asp_fk_indicadorposseproduto = 'P'
635 And a.asp_vlbruto Is Null
636
637 --Valor lÃquido
638 Update a Set
639 a.asp_vlliquido = a.asp_vlbruto - IsNull(a.asp_vldesconto, 0)
640 From @vTabelaProdutosCliente As a
641 Where a.asp_fk_cliente = @vCURSOR_cad_id
642
643 ------------------------------------------------------------------------------------------------------------------------------------------------------------
644 --Check final de valores
645 ------------------------------------------------------------------------------------------------------------------------------------------------------------
646 Declare @vValorAssets Money = 0;
647 Set @vValorAssets = (
648 Select Sum(Isnull(a.asp_vlbruto,0))
649 From @vTabelaProdutosCliente As a
650 Where a.asp_fk_cliente = @vCURSOR_cad_id
651 );
652
653 Set @vValorAssets = IsNull(@vValorAssets, 0);
654
655 If (IsNull(@vValorContratoAtual_TodasFabricas,0) <> IsNull(@vValorAssets,0))
656 Begin
657 If (Not Exists(Select * From tmpTabelaErros Where clienteCodigo = @vCURSOR_cad_codigo))
658 begin
659 Insert Into tmpTabelaErros (ClienteCodigo, Erro, Valor) Values (@vCURSOR_cad_codigo, 'Valor do contrato (' + Cast(@vValorContratoAtual_TodasFabricas As Varchar(100)) + ') diferente do valor dos assets (' + Cast(@vValorAssets As Varchar(100)) + '). Diferença de ' + Cast(@vValorContratoAtual_TodasFabricas - @vValorAssets As Varchar(100)) + '.', @vValorContratoAtual_TodasFabricas - @vValorAssets)
660 end
661 End
662
663 If (Exists(Select Top 1 * From @vTabelaProdutosCliente Where asp_fk_cliente = @vCURSOR_cad_id And asp_vlbruto < 0))
664 Begin
665 Insert Into tmpTabelaErros (ClienteCodigo, Erro) Values (@vCURSOR_cad_codigo, 'Um ou mais produtos estão com valor negativo.')
666 End
667
668 Declare @vQtdeContratosAivos Int = ISNULL((SELECT count(1) From fsp_contrato As b Where b.ctr_fk_cadastro = @vCURSOR_cad_id And b.ctr_status = 'P' AND b.ctr_fk_contratotipo = 10 And b.ctr_faturadopor = 'P'),0)
669 Declare @vQtdeContratosBloqueados Int = ISNULL((SELECT count(1) From fsp_contrato As b Where b.ctr_fk_cadastro = @vCURSOR_cad_id And b.ctr_status = 'B' AND b.ctr_fk_contratotipo = 10 And b.ctr_faturadopor = 'P'),0)
670 If (@vQtdeContratosAivos > 0 And @vQtdeContratosBloqueados > 0)
671 Begin
672 Insert Into tmpTabelaErros (ClienteCodigo, Erro) Values (@vCURSOR_cad_codigo, 'Cliente possui contratos ATIVOS e BLOQUEADOS ao mesmo tempo.')
673 end
674
675 End Try
676 Begin Catch
677 Select 'Error catch', error_message(), @vCURSOR_cad_codigo As '@vCURSOR_cad_codigo'
678 End Catch
679 FETCH NEXT FROM cursorClientes INTO @vCURSOR_cad_id, @vCURSOR_cad_codigo, @vCURSOR_cad_desde
680 END
681CLOSE cursorClientes
682DEALLOCATE cursorClientes