CREATE OR REPLACE VIEW JS_Purchases AS SELECT vnd_orcamento.orcamento as number_identifier, (vnd_orcamento.data_emissao || ' ' || vnd_orcamento.hora_emissao)::timestamp AS purchase_date, (vnd_orcamento_item.vlr_pago - SUM(COALESCE(gar_troca_devoluc_item.preco_total,0)))::numeric(18,4) AS total_price, (bas_filial.cnpj)::varchar AS store_cnpj, ('')::varchar AS operator_identifier, ('')::varchar AS operator_cpf, substring((bas_vend.codigo || ' - ' || bas_vend.nome), 1, 20)::varchar AS seller_identifier, COALESCE( NULLIF(TRIM(bas_vend.cpf), ''), NULLIF(TRIM(bas_vend.cnpj), ''), '')::varchar AS seller_cpf, substring((CASE WHEN cli_cliente.codigo = par_faturamento.cliente_padrao_venda THEN null ELSE cli_cliente.codigo || ' - ' || cli_cliente.nome END), 1, 20)::varchar AS professional_identifier, CASE WHEN cli_cliente.codigo = par_faturamento.cliente_padrao_venda THEN null ELSE COALESCE( NULLIF(TRIM(cli_cliente.cpf), ''), NULLIF(TRIM(cli_cliente.cnpj), ''), '')::varchar(14) END AS professional_cpf, substring((pro_produto.codigo || ' - ' || TRIM(pro_produto.descricao)), 1, 60)::varchar AS description, (vnd_orcamento_item.quantidade - SUM(COALESCE(gar_troca_devoluc_item.quantidade,0)))::numeric(18,2) AS quantity, fnc_arredonda_regra_abnt((vnd_orcamento_item.vlr_pago - SUM(COALESCE(gar_troca_devoluc_item.preco_total,0)))/COALESCE(NULLIF((vnd_orcamento_item.quantidade - SUM(COALESCE(gar_troca_devoluc_item.quantidade,0)) ) , 0), 1), 2)::numeric(18,4) AS unit_price, 0::numeric AS points, for_fornecedor.fantasia::varchar AS ad_supplier, ''::varchar AS ad_seller_identifier, ''::varchar AS ad_seller_cpf FROM vnd_orcamento JOIN vnd_orcamento_item ON vnd_orcamento_item.filial_orc = vnd_orcamento.filial_orc AND vnd_orcamento_item.orcamento = vnd_orcamento.orcamento JOIN pro_produto ON pro_produto.filial_pro = vnd_orcamento_item.filial_pro AND pro_produto.codigo = vnd_orcamento_item.produto JOIN for_fornecedor ON for_fornecedor.filial = pro_produto.filial_for AND for_fornecedor.codigo = pro_produto.fornecedor JOIN cli_cliente ON cli_cliente.filial = vnd_orcamento.filial_cli AND cli_cliente.codigo = vnd_orcamento.cliente JOIN bas_vendedor AS bas_vend ON bas_vend.filial = vnd_orcamento.filial_ven AND bas_vend.codigo = vnd_orcamento.vendedor LEFT JOIN gar_troca_devoluc ON gar_troca_devoluc.filial_orc = vnd_orcamento_item.filial_orc AND gar_troca_devoluc.orcamento = vnd_orcamento_item.orcamento AND gar_troca_devoluc.situacao != 'C' LEFT JOIN gar_troca_devoluc_item ON gar_troca_devoluc_item.filial = gar_troca_devoluc.filial AND gar_troca_devoluc_item.sequencia = gar_troca_devoluc.sequencia AND gar_troca_devoluc_item.sequencia_item_pedido = vnd_orcamento_item.sequencia JOIN bas_filial ON bas_filial.codigo = vnd_orcamento.filial_orc JOIN par_faturamento ON par_faturamento.filial_par = vnd_orcamento.filial_orc AND par_faturamento.codigo = 1 WHERE vnd_orcamento.filial_orc = 1 AND vnd_orcamento.gerou_nf_caixa = 'S' AND vnd_orcamento.tipo != 'O' AND vnd_orcamento.situacao = 'A' GROUP BY vnd_orcamento.orcamento, vnd_orcamento.data_emissao, vnd_orcamento.hora_emissao, vnd_orcamento_item.sequencia, vnd_orcamento_item.quantidade, vnd_orcamento_item.vlr_pago, bas_filial.cnpj, bas_vend.codigo, bas_vend.nome, bas_vend.cpf, bas_vend.cnpj, cli_cliente.codigo, cli_cliente.nome, cli_cliente.cpf, cli_cliente.cnpj, pro_produto.codigo, pro_produto.descricao, for_fornecedor.nome, for_fornecedor.fantasia, par_faturamento.cliente_padrao_venda HAVING (vnd_orcamento_item.quantidade - SUM(COALESCE(gar_troca_devoluc_item.quantidade,0))) > 0 ORDER BY vnd_orcamento.data_emissao DESC, vnd_orcamento.hora_emissao DESC, vnd_orcamento.orcamento DESC, vnd_orcamento_item.sequencia;