Iandev Smarter Business - Logo Cor
Navegação no fórum
para criar postagens e tópicos.

Exemplo de tarefa que realiza processamento de dados buscando valor de Compra realizado para o fornecedor, e apurando valor de repasse com base em um % definido. Essa tarefa levanta a informação, cria registro no CONTAS A RECEBER do cliente, e já not

Exemplo de tarefa que realiza processamento de dados buscando valor de Compra realizado para o fornecedor, e apurando valor de repasse com base em um % definido. Essa tarefa levanta a informação, cria registro no CONTAS A RECEBER do cliente, e já notifica fornecedor a respeito do processamento.

[code]

connect $v{datasource1};

# Encontra Ultima data do mes anterior
sql
select
'$exp{addDays($v{primeiraDataMes},-1)}exp' as DF
,'$v{primeiraDataMes}' as DIMESATUAL
,'$v{ultimaDataMes}' as DFMESATUAL
from
sysibm.sysdummy1;

# Calcula primeiro dia do mes anterior.
sql
select
'$exp{firstDateOfMonth($c{DF})}exp' as DI
from
sysibm.sysdummy1
;

# Inicia contador de planilha
sql
Select
'-'||trim(cast(month(current_date) as char(2)))||cast(year(current_date) as char(4))||trim(cast(day(current_date) as char(2))) as IDPLANILHA
from
dummy
;

connect $v{datasource2};
sql
select formacontato.destino as emailg
from
tarefaformacontato left outer join formacontato
on (tarefaformacontato.idformacontato = formacontato.idformacontato)
left outer join usuario on (usuario.idusuario = formacontato.idusuario)
where
idtarefa = $v{idTarefa} and tarefaformacontato.situacao = 0;

set emailg = "$c{EMAILG:list}".replace(',', '|');

connect $v{datasource1};

# Elimina os lançamentos gerados no Contas a Receber ainda não baixados.
sql_exec delete from dba.contas_receber where idempresa = 1122 and origemmovimento = 'AVU' and flagbaixada = 'F' and OBSTITULO = 'Acordo'
and dtmovimento between '$c{DIMESATUAL}' and '$c{DFMESATUAL}';

# Carrega todos os fornecedores com % de Acordo Informado.
sql
select
fa.idclifor as IDFORNECEDOR
,'$v{emailg}' as EMAIL
,0 as TIPO
,fa.idclifor as ID
,fa.PERACORDO as PERACORDO
from
dba.FORNECEDORDETALHES as FA
where
fa.PERACORDO > 0
and fa.idclifor = 432
sql_var(sql_for)
;

for_each_dest <columnDest>EMAIL</columnDest>
<columnDestType>TIPO</columnDestType>
<columnId>ID</columnId>
<sql>$v{sql_for}</sql>
;

# Se encontrar algum registro é porque não é para gerar novamente.
sql
Select
count(*) as QTDREGCR
from
dba.contas_receber
where
idempresa = 1122 and origemmovimento = 'AVU' and flagbaixada = 'F' and OBSTITULO = 'Acordo'
and dtmovimento between '$c{DIMESATUAL}' and '$c{DFMESATUAL}'
and idclifor = $v{IDFORNECEDOR}
;
stop_if $c{QTDREGCR} != 0;

# Roda sql para buscar as compras no periodo cujo foram feitas para o fornecedor em questão.
sql
SELECT
f.IDCLIFOR as IDCLIFOR,
f.NOME as NOMEFORNECEDOR,
cast(sum(VALORTOTAL) as decimal(15,2)) as TOTALLIQUIDOCOMPRADO,
FA.PERACORDO as PERACORDO,
( cast(sum(VALORTOTAL) as decimal(15,2)) * FA.PERACORDO/100) as VALORTITULO,
dba.soma_dias(current_date,15) as DTVENCIMENTO
FROM
(Select
Pre_pedido.IdFornecedor,
produto.descrcomproduto as descricaoproduto,
Pre_Pedido_Prod.IdPedido as idpedido,
Date(Pre_Pedido.DtHoraEmissao) as DataPrePedido,
Pre_Pedido.IdPrePedido,
Pre_Pedido.IdEmpresa,
Pre_Pedido.TipoSituacao,
Pre_Pedido_Prod.IdSubProduto,
Pre_Pedido_Prod.QtdSolicitada,
Pre_Pedido_Prod.QtdAtendida,
Pre_Pedido_Prod.QtdEnviada,
Pre_Pedido_Prod.TipoPreco,
Pre_Pedido_Prod.ValProduto as Original,

(Select
Min(PPP.ValProduto)
From
Pre_Pedido_Prod PPP
Where
Pre_Pedido_Prod.IdPedido = PPP.IdPedido And
Pre_Pedido_Prod.IdFornecedorPedido = PPP.IdFornecedorPedido And
Pre_Pedido_Prod.idProduto = PPP.idProduto And
Pre_Pedido_Prod.idSubProduto = PPP.idSubProduto
) as ValProduto,

(Select
e.InscrEstadual
From
Inscricao_Estadual as E
Where
E.Idempresa = Empresa.IdEmpresa and
E.UF = Empresa.UF
) as IE_Empresa,
Cast(Coalesce((Select
Coalesce(N.ValBonificacao,0) as ValBonificacao
From
Negociacao_Prod as N
Where
N.IdNegociacao = Pre_Pedido_Prod.IdNegociacao and
N.IdSubProduto = Pre_Pedido_prod.IdSubproduto and
N.TipoPreco = Pre_Pedido_prod.TipoPreco and
N.IdPrazo = Negociacao_Prazo.IdPrazo
),0) as Decimal(15,6)) as ValBonificacao,
Pedido_Compra_Prod.qtdsolicitada as qtdsolicitadaped,
Pedido_Compra_Prod.qtdatendida as qtdatendidaped ,

(Pre_Pedido_Prod.ValProduto * (Case when Pre_Pedido_Prod.QtdAtendida > 0 then Pre_Pedido_Prod.QtdAtendida else Pre_Pedido_Prod.QtdSolicitada end)) as VALORTOTAL2 ,

((Select
Min(PPP.ValProduto)
From
Pre_Pedido_Prod PPP
Where
Pre_Pedido_Prod.IdPedido = PPP.IdPedido And
Pre_Pedido_Prod.IdFornecedorPedido = PPP.IdFornecedorPedido And
Pre_Pedido_Prod.idProduto = PPP.idProduto And
Pre_Pedido_Prod.idSubProduto = PPP.idSubProduto
) * (Case when Pre_Pedido_Prod.QtdAtendida > 0 and Pre_Pedido_Prod.QtdAtendida > Pre_Pedido_Prod.QtdSolicitada then Pre_Pedido_Prod.QtdAtendida else Pre_Pedido_Prod.QtdSolicitada end)) as VALORTOTAL

From
Pre_Pedido
left outer join Pre_Pedido_Prod on
(Pre_Pedido.IdPrePedido = Pre_Pedido_Prod.IdPrePedido)
left outer join Negociacao_Prod on
(Pre_Pedido_Prod.IdNegociacao = Negociacao_Prod.IdNegociacao and
Pre_Pedido_Prod.IdSubProduto = Negociacao_Prod.IdSubProduto and
Pre_Pedido_Prod.tipopreco = Negociacao_Prod.tipopreco and
Pre_Pedido.IdPrazo = Negociacao_Prod.IdPrazo)
left outer join Pedido_Compra_Prod on
(Pedido_Compra_Prod.idpedido = Pre_Pedido_Prod.idPedido AND
Pedido_Compra_Prod.idProduto = Pre_Pedido_prod.idProduto and
Pedido_Compra_Prod.idSubProduto = Pre_Pedido_Prod.idSubProduto),
Produto,
Produto_Grade,
Empresa
left outer join Cidades_Ibge on
(Empresa.IdCidade = Cidades_Ibge.IdCidade),
Cliente_Fornecedor as Fornecedor
Left Outer Join Cidades_IBGE as IBGE_Fornecedor on
(Fornecedor.IdCidade = IBGE_Fornecedor.IdCidade),
Cliente_Fornecedor as Associado
Left Outer Join Cidades_IBGE as IBGE_Associado on
(Associado.IdCidade = IBGE_Associado.IdCidade),
Negociacao_Prazo
Where
Pre_Pedido_Prod.IdProduto = Produto.IdProduto and
Pre_Pedido_Prod.IdProduto = Produto_Grade.IdProduto and
Pre_Pedido_Prod.IdSubProduto = Produto_Grade.IdSubProduto and
Pre_Pedido.IdFornecedor = Fornecedor.IdClifor and
Pre_Pedido.IdAssociado = Associado.IdClifor and
Pre_pedido.IdPrazo = Negociacao_Prazo.IdPrazo and
Pre_Pedido.IdFornecedor = $v{IDFORNECEDOR} and
Pre_Pedido.TipoSituacao <> 'C' and
Empresa.IdEmpresa = 2 and
(Select Date(p.DtMovimento) From Pedido_Compra as P Where P.IdPedido =Pre_Pedido_Prod.IdPedido and P.IdEmpresa = Pre_Pedido.IdEmpresa and P.IdClifor = Pre_Pedido.IdFornecedor) between '2012-04-01' and '2012-04-30'
Order by produto.descrcomproduto
) as T inner join dba.cliente_fornecedor as f
on (f.idclifor = t.idfornecedor)
inner join FORNECEDORDETALHES as FA
on (FA.IDCLIFOR = F.IDCLIFOR)
Group by
f.IDCLIFOR
,f.NOME
,FA.PERACORDO
;

# Se valor igual a zero, cancela geração
stop_if $c{TOTALLIQUIDOCOMPRADO} == 0 ;

# Insere registro no Contas a Receber.
sql_exec Insert into dba.contas_receber
(IDEMPRESA
,IDCLIFOR
,IDTITULO
,DIGITOTITULO
,IDPLANILHA
,VALTITULO
,OBSTITULO
,ORIGEMMOVIMENTO
,DTMOVIMENTO
,DTVENCIMENTO
,IDCTACONTABIL)
Select
1122
,$v{IDFORNECEDOR}
,$c{IDPLANILHA} * (-1)
,'01'
,$c{IDPLANILHA}
,$c{VALORTITULO}
,'Acordo'
,'AVU'
,current_date
,'$c{DTVENCIMENTO}'
,3210233
from
dummy
;

# Monta variavel titulo1 para apresentar na notificação
set titulo1 = 'Periodo de fechamento: $c{DI[1]"date:dd/MM/yyyy"} a $c{DF[1]"date:dd/MM/yyyy"}. Valor Total de Pedidos: $c{TOTALLIQUIDOCOMPRADO[1]"dec:###,###,###,##0.00"}';

# Carrega Contrato acordado entre as duas partes e gravado no banco de dados.
sql
Select
cast(obsacordo as varchar(32000)) as CONTRATO
from
dba.ACORDO_COMERCIAL as AC
where
AC.IDCLIFOR = $v{IDFORNECEDOR}
;

[/code]