arcadiasuite/plus/app/Http/Controllers/RelatorioController.php

2725 lines
106 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\CategoriaProduto;
use Illuminate\Http\Request;
use App\Models\TipoDespesaFrete;
use App\Models\DespesaFrete;
use App\Models\Produto;
use App\Models\Cliente;
use App\Models\Reserva;
use App\Models\ComissaoVenda;
use App\Models\ContaPagar;
use App\Models\ContaReceber;
use App\Models\Fornecedor;
use App\Models\Acomodacao;
use App\Models\ItemNfe;
use App\Models\Empresa;
use App\Models\ItemNfce;
use App\Models\Nfe;
use App\Models\Nfce;
use App\Models\Cte;
use App\Models\Mdfe;
use App\Models\Funcionario;
use App\Models\OrdemServico;
use App\Models\Localizacao;
use App\Models\Marca;
use App\Models\TaxaPagamento;
use App\Models\Estoque;
use App\Models\MovimentacaoProduto;
use Dompdf\Dompdf;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\RelatorioEstoqueExport;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class RelatorioController extends Controller
{
public function index()
{
$marcas = Marca::where('empresa_id', request()->empresa_id)->get();
$categorias = CategoriaProduto::where('empresa_id', request()->empresa_id)
// ->where('categoria_id', null)
->where('status', 1)->get();
$funcionarios = Funcionario::where('empresa_id', request()->empresa_id)->get();
$tiposDespesaFrete = TipoDespesaFrete::where('empresa_id', request()->empresa_id)->get();
return view('relatorios.index', compact('funcionarios', 'marcas', 'categorias', 'tiposDespesaFrete'));
}
public function produtos(Request $request)
{
// dd($request);
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$estoque = $request->estoque;
$tipo = $request->tipo;
$marca_id = $request->marca_id;
$categoria_id = $request->categoria_id;
$local_id = $request->local_id;
$start_date = $request->start_date;
$end_date = $request->end_date;
$data = Produto::select('produtos.*')
->where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('produtos.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('produtos.created_at', '<=', $end_date);
})
->when($estoque != '', function ($query) use ($estoque) {
if ($estoque == 1) {
return $query->join('estoques', 'estoques.produto_id', '=', 'produtos.id')
->where('estoques.quantidade', '>', 0);
} elseif($estoque == -1) {
// return $query->leftJoin('estoques', 'estoques.produto_id', '=', 'produtos.id')
// ->whereNull('estoques.produto_id')
// ->orWhere(function ($q) use ($query) {
// return $q->join('estoques', 'estoques.produto_id', '=', 'produtos.id')
// ->where('estoques.quantidade', '=', 0);
// });
return $query->leftJoin('estoques', 'estoques.produto_id', '=', 'produtos.id')
->where(function ($q) {
$q->whereNull('estoques.id')
->orWhere('estoques.quantidade', '=', 0);
});
}else{
return $query->join('estoques', 'estoques.produto_id', '=', 'produtos.id')
->whereColumn('estoques.quantidade', '<', 'produtos.estoque_minimo')
->where('produtos.estoque_minimo', '>', 0);
}
})
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('categoria_id', $categoria_id)->orWhere('sub_categoria_id', $categoria_id);
});
})
->when(!empty($marca_id), function ($query) use ($marca_id) {
return $query->where('marca_id', $marca_id);
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})
->get();
if ($tipo != '') {
if ($tipo ==1 || $tipo == -1) {
foreach ($data as $item) {
$sumNfe = ItemNfe::where('produto_id', $item->id)
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->where('nves.tpNF', 1)
->sum('quantidade');
$sumNfce = ItemNfce::where('produto_id', $item->id)
->sum('quantidade');
$item->quantidade_vendida = $sumNfe + $sumNfce;
}
}else{
foreach ($data as $item) {
$sumNfe = ItemNfe::where('produto_id', $item->id)
->select('item_nves.*')
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->where('nves.tpNF', 0)
->sum('quantidade');
$item->quantidade_vendida = $sumNfe;
}
}
$data = $data->filter(function ($item) {
return $item->quantidade_vendida > 0;
});
if ($tipo ==1 || $tipo == -1) {
if ($tipo == 1) {
$data = $data->sortByDesc('quantidade_vendida');
} else {
$data = $data->sortBy('quantidade_vendida');
}
}else{
if ($tipo == 2) {
$data = $data->sortByDesc('quantidade_vendida');
} else {
$data = $data->sortBy('quantidade_vendida');
}
}
}
$marca = null;
if($marca_id != null){
$marca = Marca::findOrFail($marca_id);
}
$categoria = null;
if($categoria_id != null){
$categoria = CategoriaProduto::findOrFail($categoria_id);
}
$p = view('relatorios/produtos', compact('data', 'tipo', 'marca', 'categoria'))
->with('title', 'Relatório de Produtos');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Produtos.pdf", array("Attachment" => false));
}
public function clientes(Request $request)
{
$tipo = $request->tipo;
$start_date = $request->start_date;
$end_date = $request->end_date;
$data = Cliente::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})->get();
if ($tipo != '') {
foreach ($data as $item) {
$sumNfe = Nfe::where('cliente_id', $item->id)
->sum('total');
$sumNfce = Nfce::where('cliente_id', $item->id)
->sum('total');
$item->total = $sumNfe + $sumNfce;
}
if ($tipo == 1) {
$data = $data->sortByDesc('total');
} else {
$data = $data->sortBy('total');
}
}
$p = view('relatorios/clientes', compact('data', 'tipo'))
->with('title', 'Relatório de Clientes');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Clientes.pdf", array("Attachment" => false));
}
public function fornecedores(Request $request)
{
$tipo = $request->tipo;
$start_date = $request->start_date;
$end_date = $request->end_date;
$data = Fornecedor::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})->get();
if ($tipo != '') {
foreach ($data as $item) {
$sumNfe = Nfe::where('fornecedor_id', $item->id)
->where('tpNF', 0)
->sum('total');
$item->total = $sumNfe;
}
if ($tipo == 1) {
$data = $data->sortByDesc('total');
} else {
$data = $data->sortBy('total');
}
}
$p = view('relatorios/fornecedores', compact('data', 'tipo'))
->with('title', 'Relatório de Fornecedores');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Fornecedores.pdf", array("Attachment" => false));
}
public function nfe(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$tipo = $request->tipo;
$start_date = $request->start_date;
$end_date = $request->end_date;
$finNFe = $request->finNFe;
$cliente = $request->cliente;
$estado = $request->estado;
$local_id = $request->local_id;
$data = Nfe::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_emissao', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('data_emissao', '<=', $end_date);
})
->when(!empty($cliente), function ($query) use ($cliente) {
return $query->where('cliente_id', $cliente);
})
->when(!empty($estado), function ($query) use ($estado) {
return $query->where('estado', $estado);
})
->when(!empty($tipo), function ($query) use ($tipo) {
return $query->where('tpNF', $tipo);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->where('orcamento', 0)
->when(!empty($finNFe), function ($query) use ($finNFe) {
return $query->where('finNFe', $finNFe);
})->get();
$p = view('relatorios/nfe', compact('data'))
->with('title', 'Relatório de NFe');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de NFe.pdf", array("Attachment" => false));
}
public function nfce(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$cliente_id = $request->cliente;
$estado = $request->estado;
$local_id = $request->local_id;
$data = Nfce::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_emissao', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('data_emissao', '<=', $end_date);
})
->when(!empty($estado), function ($query) use ($estado) {
return $query->where('estado', $estado);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->when(!empty($cliente_id), function ($query) use ($cliente_id) {
return $query->where('cliente_id', $cliente_id);
})->get();
$p = view('relatorios/nfce', compact('data'))
->with('title', 'Relatório de NFCe');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de NFCe.pdf", array("Attachment" => false));
}
public function cte(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$estado = $request->estado;
$local_id = $request->local_id;
$data = Cte::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when(!empty($estado), function ($query) use ($estado) {
return $query->where('estado', $estado);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$p = view('relatorios/cte', compact('data'))
->with('title', 'Relatório de CTe');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de CTe.pdf", array("Attachment" => false));
}
public function mdfe(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$estado = $request->estado;
$local_id = $request->local_id;
$data = Mdfe::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when(!empty($estado), function ($query) use ($estado) {
return $query->where('estado_emissao', $estado);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$p = view('relatorios/mdfe', compact('data'))
->with('title', 'Relatório de MDFe');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de MDFe.pdf", array("Attachment" => false));
}
public function conta_pagar(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$status = $request->status;
$local_id = $request->local_id;
$fornecedor_id = $request->fornecedor_id;
$data = ContaPagar::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_vencimento', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('data_vencimento', '<=', $end_date);
})
->when(!empty($status), function ($query) use ($status) {
if ($status == -1) {
return $query->where('status', '!=', 1);
} else {
return $query->where('status', $status);
}
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->when($fornecedor_id, function ($query) use ($fornecedor_id) {
return $query->where('fornecedor_id', $fornecedor_id);
})
->orderBy('data_vencimento')
->get();
$p = view('relatorios/conta_pagar', compact('data'))
->with('title', 'Relatório de Contas a Pagar');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Contas a Pagar.pdf", array("Attachment" => false));
}
public function conta_receber(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$status = $request->status;
$local_id = $request->local_id;
$cliente_id = $request->cliente;
$data = ContaReceber::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_vencimento', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('data_vencimento', '<=', $end_date);
})
->when(!empty($status), function ($query) use ($status) {
if ($status == -1) {
return $query->where('status', '!=', 1);
} else {
return $query->where('status', $status);
}
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->when($cliente_id, function ($query) use ($cliente_id) {
return $query->where('cliente_id', $cliente_id);
})
->orderBy('data_vencimento')
->get();
$p = view('relatorios/conta_receber', compact('data'))
->with('title', 'Relatório de Contas a Receber');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Contas a Receber.pdf", array("Attachment" => false));
}
public function comissao(Request $request)
{
$start_date = $request->start_date;
$end_date = $request->end_date;
$funcionario_id = $request->funcionario_id;
$data = ComissaoVenda::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when(!empty($funcionario_id), function ($query) use ($funcionario_id) {
return $query->where('funcionario_id', $funcionario_id);
})
->get();
$p = view('relatorios/comissao', compact('data'))
->with('title', 'Relatório de Comissao');
// if ($funcionario_id == null) {
// session()->flash('flash_error', 'Selecione um funcionário para continuar');
// return redirect()->back();
// }
$p = view('relatorios/comissao', compact('data'))
->with('funcionário', $funcionario_id)
->with('title', 'Relatório de Comissão');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Comissão.pdf", array("Attachment" => false));
}
public function vendas(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$tipo = $request->tipo;
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$cliente_id = $request->cliente;
$start_time = $request->start_time;
$end_time = $request->end_time;
$estado = $request->estado;
if ($start_date) {
$start_date .= $start_time ? " $start_time:00" : " 00:00:00";
}
if ($end_date) {
$end_date .= $end_time ? " $end_time:59" : " 23:59:59";
}
$vendas = Nfe::where('empresa_id', $request->empresa_id)->where('tpNF', 1)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->where('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->where('created_at', '<=', $end_date);
})
// ->where('nves.estado', '!=', 'cancelado')
->when(!empty($estado), function ($query) use ($estado) {
return $query->where('estado', $estado);
})
->when(empty($estado), function ($query) use ($estado) {
return $query->where('estado', '!=', 'cancelado');
})
->limit($total_resultados ?? 1000000)
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->when($cliente_id, function ($query) use ($cliente_id) {
return $query->where('cliente_id', $cliente_id);
})
->get();
$vendasCaixa = Nfce::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->where('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->where('created_at', '<=', $end_date);
})
->where('nfces.empresa_id', $request->empresa_id)
->when(!empty($estado), function ($query) use ($estado) {
return $query->where('estado', $estado);
})
->when(empty($estado), function ($query) use ($estado) {
return $query->where('estado', '!=', 'cancelado');
})
->limit($total_resultados ?? 1000000)
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->when($cliente_id, function ($query) use ($cliente_id) {
return $query->where('cliente_id', $cliente_id);
})
->get();
// echo (sizeof($vendas)+sizeof($vendasCaixa));
// die;
$data = $this->uneArrayVendas($vendas, $vendasCaixa);
usort($data, function($a, $b){
return $a['data'] > $b['data'] ? 1 : -1;
});
// dd($data);
$p = view('relatorios/vendas', compact('data', 'tipo'))
->with('title', 'Relatório de Vendas');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Vendas.pdf", array("Attachment" => false));
}
private function uneArrayVendas($vendas, $vendasCaixa)
{
$adicionados = [];
$arr = [];
foreach ($vendas as $v) {
$temp = [
'id' => $v->numero_sequencial,
'data' => $v->created_at,
'tipo' => 'Pedido',
'total' => $v->total,
'cliente' => $v->cliente ? $v->cliente->info : '--',
'localizacao' => $v->localizacao
// 'itens' => $v->itens
];
array_push($adicionados, $v->id);
array_push($arr, $temp);
}
foreach ($vendasCaixa as $v) {
$temp = [
'id' => $v->numero_sequencial,
'data' => $v->created_at,
'tipo' => 'PDV',
'total' => $v->total,
'cliente' => $v->cliente ? $v->cliente->info : '--',
'localizacao' => $v->localizacao
// 'itens' => $v->itens
];
array_push($adicionados, $v->id);
array_push($arr, $temp);
}
return $arr;
}
public function despesaFrete(Request $request)
{
$start_date = $request->start_date;
$end_date = $request->end_date;
$tipo_despesa_frete_id = $request->tipo_despesa_frete_id;
$data = DespesaFrete::
select('despesa_fretes.*')
->join('fretes', 'fretes.id', '=', 'despesa_fretes.frete_id')
->where('fretes.empresa_id', request()->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('despesa_fretes.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('despesa_fretes.created_at', '<=', $end_date);
})
->when($tipo_despesa_frete_id, function ($query) use ($tipo_despesa_frete_id) {
return $query->where('despesa_fretes.tipo_despesa_id', $tipo_despesa_frete_id);
})
->get();
$p = view('relatorios/despesa_fretes', compact('data'))
->with('title', 'Relatório de Despesas de Frete');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Despesas de Frete.pdf", array("Attachment" => false));
}
public function compras(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$data = Nfe::where('empresa_id', request()->empresa_id)->where('tpNF', 0)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('created_at', '<=', $end_date);
})
->where('nves.empresa_id', $request->empresa_id)
->limit($total_resultados ?? 1000000)
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$p = view('relatorios/compras', compact('data'))
->with('title', 'Relatório de Compras');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Compras.pdf", array("Attachment" => false));
}
public function taxas(Request $request)
{
$data_inicial = $request->data_inicial;
$data_final = $request->data_final;
$local_id = $request->local_id;
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
if ($data_final && $data_final) {
$data_inicial = $this->parseDate($data_inicial);
$data_final = $this->parseDate($data_final);
}
$taxas = TaxaPagamento::where('empresa_id', request()->empresa_id)->get();
$tipos = $taxas->pluck('tipo_pagamento')->toArray();
$vendas = Nfe::where('empresa_id', request()->empresa_id)
->when($data_inicial != '', function ($q) use ($data_inicial) {
return $q->whereDate('created_at', '>=', $data_inicial);
})
->when($data_final != '', function ($q) use ($data_final) {
return $q->whereDate('created_at', '<=', $data_final);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$data = [];
foreach ($vendas as $v) {
$bandeira_cartao = $v->bandeira_cartao;
if (sizeof($v->fatura) > 1) {
foreach ($v->fatura as $ft) {
$fp = $ft->tipo_pagamento;
if (in_array($fp, $tipos)) {
$taxa = TaxaPagamento::where('empresa_id', request()->empresa_id)
->where('tipo_pagamento', $fp)
->when($bandeira_cartao != '' && $bandeira_cartao != '99', function ($q) use ($bandeira_cartao) {
return $q->where('bandeira_cartao', $bandeira_cartao);
})
->first();
if ($taxa != null) {
$item = [
'cliente' => $v->cliente ? ($v->cliente->razao_social . " " . $v->cliente->cpf_cnpj) :
'Consumidor final',
'total' => $ft->valor,
'taxa_perc' => $taxa ? $taxa->taxa : 0,
'taxa' => $taxa ? ($ft->valor * ($taxa->taxa / 100)) : 0,
'data' => \Carbon\Carbon::parse($v->created_at)->format('d/m/Y H:i'),
'tipo_pagamento' => Nfe::getTipo($fp),
'venda_id' => $v->id,
'tipo' => 'PEDIDO'
];
array_push($data, $item);
}
}
}
} else {
if (in_array($v->tipo_pagamento, $tipos)) {
$total = $v->valor_total - $v->desconto + $v->acrescimo;
$taxa = TaxaPagamento::where('empresa_id', request()->empresa_id)
->when($bandeira_cartao != '' && $bandeira_cartao != '99', function ($q) use ($bandeira_cartao) {
return $q->where('bandeira_cartao', $bandeira_cartao);
})
->where('tipo_pagamento', $v->tipo_pagamento)->first();
if ($taxa != null) {
$item = [
'cliente' => $v->cliente ? ($v->cliente->razao_social . " " . $v->cliente->cpf_cnpj) :
'Consumidor final',
'total' => $v->total,
'taxa_perc' => $taxa->taxa,
'taxa' => $taxa ? ($total * ($taxa->taxa / 100)) : 0,
'data' => \Carbon\Carbon::parse($v->created_at)->format('d/m/Y H:i'),
'tipo_pagamento' => Nfe::getTipo($v->tipo_pagamento),
'venda_id' => $v->id,
'tipo' => 'PEDIDO'
];
array_push($data, $item);
} else {
echo $bandeira_cartao;
die;
}
}
}
}
$vendasCaixa = Nfce::where('empresa_id', request()->empresa_id)
->when($data_inicial != '', function ($q) use ($data_inicial) {
return $q->whereDate('created_at', '>=', $data_inicial);
})
->when($data_final != '', function ($q) use ($data_final) {
return $q->whereDate('created_at', '<=', $data_final);
})
->get();
foreach ($vendasCaixa as $v) {
$bandeira_cartao = $v->bandeira_cartao;
if (sizeof($v->fatura) > 1) {
foreach ($v->fatura as $ft) {
if (in_array($ft->tipo_pagamento, $tipos)) {
$taxa = TaxaPagamento::where('empresa_id', request()->empresa_id)
->when($bandeira_cartao != '' && $bandeira_cartao != '99', function ($q) use ($bandeira_cartao) {
return $q->where('bandeira_cartao', $bandeira_cartao);
})
->where('tipo_pagamento', $ft->tipo_pagamento)->first();
if ($taxa != null) {
$item = [
'cliente' => $v->cliente ? ($v->cliente->razao_social . " " . $v->cliente->cpf_cnpj) :
'Consumidor final',
'total' => $ft->valor,
'taxa_perc' => $taxa->taxa,
'taxa' => $taxa ? ($ft->valor * ($taxa->taxa / 100)) : 0,
'data' => \Carbon\Carbon::parse($v->created_at)->format('d/m/Y H:i'),
'tipo_pagamento' => Nfe::getTipo($ft->tipo_pagamento),
'venda_id' => $v->id,
'tipo' => 'PDV'
];
array_push($data, $item);
}
}
}
} else {
if (in_array($v->tipo_pagamento, $tipos)) {
$taxa = TaxaPagamento::where('empresa_id', request()->empresa_id)
->when($bandeira_cartao != '' && $bandeira_cartao != '99', function ($q) use ($bandeira_cartao) {
return $q->where('bandeira_cartao', $bandeira_cartao);
})
->where('tipo_pagamento', $v->tipo_pagamento)->first();
if ($taxa != null) {
$item = [
'cliente' => $v->cliente ? ($v->cliente->razao_social . " " . $v->cliente->cpf_cnpj) :
'Consumidor final',
'total' => $v->total,
'taxa_perc' => $taxa->taxa,
'taxa' => $taxa ? ($v->total * ($taxa->taxa / 100)) : 0,
'data' => \Carbon\Carbon::parse($v->created_at)->format('d/m/Y H:i'),
'tipo_pagamento' => Nfe::getTipo($v->tipo_pagamento),
'venda_id' => $v->id,
'tipo' => 'PDV'
];
array_push($data, $item);
}
}
}
}
$p = view('relatorios/taxas')
->with('data', $data)
->with('title', 'Taxas de Pagamento');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Taxas de pagamento.pdf", array("Attachment" => false));
}
public function lucro(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$start_time = $request->start_time;
$end_time = $request->end_time;
if ($start_date) {
$start_date .= $start_time ? " $start_time:00" : " 00:00:00";
}
if ($end_date) {
$end_date .= $end_time ? " $end_time:59" : " 23:59:59";
}
$nfe = Nfe::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->where('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->where('created_at', '<=', $end_date);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->where('orcamento', 0)
->where('tpNF', 1)
->get();
$nfce = Nfce::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->where('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->where('created_at', '<=', $end_date);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$data = [];
foreach($nfe as $n){
$item = [
'cliente' => $n->cliente ? $n->cliente->info : 'CONSUMIDOR FINAL',
'data' => ($n->created_at),
'valor_venda' => $n->total,
'valor_custo' => $this->calculaCusto($n->itens),
'localizacao' => $n->localizacao
];
array_push($data, $item);
}
foreach($nfce as $n){
$item = [
'cliente' => $n->cliente ? $n->cliente->info : 'CONSUMIDOR FINAL',
'data' => ($n->created_at),
'valor_venda' => $n->total,
'valor_custo' => $this->calculaCusto($n->itens),
'localizacao' => $n->localizacao
];
array_push($data, $item);
}
usort($data, function($a, $b){
return $a['data'] > $b['data'] ? 1 : -1;
});
$p = view('relatorios.lucro', compact('data'))
->with('title', 'Relatório de Lucros');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Lucros.pdf", array("Attachment" => false));
}
public function vendaProdutos(Request $request){
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$marca_id = $request->marca_id;
$categoria_id = $request->categoria_id;
$produto_id = $request->produto_id;
$diferenca = strtotime($end_date) - strtotime($start_date);
$dias = floor($diferenca / (60 * 60 * 24));
$dataAtual = $start_date;
if($dias <= 0){
$dias = 1;
}
$data = [];
for($aux = 0; $aux < $dias; $aux++){
$itensNfe = ItemNfe::
select(\DB::raw('sum(sub_total) as subtotal, sum(quantidade) as soma_quantidade, item_nves.produto_id as produto_id, avg(item_nves.valor_unitario) as media, item_nves.valor_unitario as valor_unitario'))
->whereBetween('item_nves.created_at',
[
$dataAtual . " 00:00:00",
$dataAtual . " 23:59:59"
]
)
->join('produtos', 'produtos.id', '=', 'item_nves.produto_id')
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->groupBy('item_nves.produto_id')
->where('produtos.empresa_id', $request->empresa_id)
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
return $query->join('categoria_produtos', 'categoria_produtos.id', '=', 'produtos.categoria_id')
->where(function($t) use ($categoria_id)
{
$t->where('produtos.categoria_id', $categoria_id)->orWhere('produtos.sub_categoria_id', $categoria_id);
});
})
->when(!empty($produto_id), function ($query) use ($produto_id) {
return $query->where('item_nves.produto_id', $produto_id);
})
->when(!empty($marca_id), function ($query) use ($marca_id) {
return $query->join('marcas', 'marcas.id', '=', 'produtos.marca_id')
->where('produtos.marca_id', $marca_id);
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->get();
$itensNfce = ItemNfce::
select(\DB::raw('sum(sub_total) as subtotal, sum(quantidade) as soma_quantidade, item_nfces.produto_id as produto_id, avg(item_nfces.valor_unitario) as media, item_nfces.valor_unitario as valor_unitario'))
->whereBetween('item_nfces.created_at',
[
$dataAtual . " 00:00:00",
$dataAtual . " 23:59:59"
]
)
->join('produtos', 'produtos.id', '=', 'item_nfces.produto_id')
->join('nfces', 'nfces.id', '=', 'item_nfces.nfce_id')
->groupBy('item_nfces.produto_id')
->where('produtos.empresa_id', $request->empresa_id)
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
// return $query->join('categoria_produtos', 'categoria_produtos.id', '=', 'produtos.categoria_id')
// ->where('produtos.categoria_id', $categoria_id);
return $query->join('categoria_produtos', 'categoria_produtos.id', '=', 'produtos.categoria_id')
->where(function($t) use ($categoria_id)
{
$t->where('produtos.categoria_id', $categoria_id)->orWhere('produtos.sub_categoria_id', $categoria_id);
});
})
->when(!empty($produto_id), function ($query) use ($produto_id) {
return $query->where('item_nfces.produto_id', $produto_id);
})
->when(!empty($marca_id), function ($query) use ($marca_id) {
return $query->join('marcas', 'marcas.id', '=', 'produtos.marca_id')
->where('produtos.marca_id', $marca_id);
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->get();
$itens = $this->uneArrayItens($itensNfe, $itensNfce, $request->ordem);
$temp = [
'data' => $dataAtual,
'itens' => $itens,
];
array_push($data, $temp);
$dataAtual = date('Y-m-d', strtotime($dataAtual. '+1day'));
}
$p = view('relatorios/venda_por_produtos', compact('data', 'start_date', 'end_date'))
->with('title', 'Relatório de Venda por Produtos');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de venda por produtos.pdf", array("Attachment" => false));
}
private function uneArrayItens($itens, $itensCaixa, $ordem){
$data = [];
$adicionados = [];
foreach($itens as $i){
$temp = [
'quantidade' => $i->soma_quantidade,
'subtotal' => $i->subtotal,
'valor' => $i->produto->valor_unitario,
'media' => $i->media,
'produto' => $i->produto,
];
array_push($data, $temp);
// array_push($adicionados, $i->produto->id);
}
// print_r($data[0]['produto']);
foreach($itensCaixa as $i){
$indiceAdicionado = $this->jaAdicionadoProduto($data, $i->produto->id);
if($indiceAdicionado == -1){
$temp = [
'quantidade' => $i->soma_quantidade,
'subtotal' => $i->subtotal,
'valor' => $i->produto->valor_unitario,
'media' => $i->media,
'produto' => $i->produto,
];
array_push($data, $temp);
}else{
$data[$indiceAdicionado]['quantidade'] += $i->soma_quantidade;
$data[$indiceAdicionado]['subtotal'] += $i->subtotal;
$data[$indiceAdicionado]['media'] = ($data[$indiceAdicionado]['media'] + $i->media) / 2;
}
}
usort($data, function($a, $b) use ($ordem){
if($ordem == 'asc') return $a['quantidade'] > $b['quantidade'] ? 1 : 0;
else if($ordem == 'desc') return $a['quantidade'] < $b['quantidade'] ? 1 : 0;
else return $a['produto']->nome > $b['produto']->nome ? 1 : 0;
});
return $data;
}
private function calculaCusto($itens){
$custo = 0;
foreach($itens as $i){
$custo += $i->quantidade * $i->produto->valor_compra;
}
return $custo;
}
private function jaAdicionadoProduto($array, $produtoId){
for($i=0; $i<sizeof($array); $i++){
if($array[$i]['produto']->id == $produtoId){
return $i;
}
}
return -1;
}
public function estoque(Request $request){
$estoque_minimo = $request->estoque_minimo;
$start_date = $request->start_date;
$end_date = $request->end_date;
$categoria_id = $request->categoria_id;
$esportar_excel = $request->esportar_excel;
$local_id = $request->local_id;
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$data = [];
if($estoque_minimo == 1){
$produtosComEstoqueMinimo = Produto::where('produtos.empresa_id', $request->empresa_id)
->select('produtos.*')
->when($categoria_id, function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('categoria_id', $categoria_id)->orWhere('sub_categoria_id', $categoria_id);
});
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('produtos.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('produtos.created_at', '<=', $end_date);
})
// ->limit(20)
->where('produtos.estoque_minimo', '>', 0)->get();
foreach($produtosComEstoqueMinimo as $produto){
$estoque = Estoque::where('produto_id', $produto->id)->first();
if($estoque == null || $estoque->quantidade <= $produto->estoque_minimo){
if(sizeof($produto->variacoes) == 0){
$qtd = $estoque ? $estoque->quantidade : '0';
if(!$local_id){
$qtd = $produto->estoqueTotalProduto();
}
$linha = [
'codigo' => $produto->numero_sequencial,
'produto' => $produto->nome,
'quantidade' => $qtd,
'estoque_minimo' => $produto->estoque_minimo,
'valor_compra' => $produto->valor_compra,
'valor_venda' => $produto->valor_unitario,
'categoria' => $produto->categoria ? $produto->categoria->nome : '--',
'data_cadastro' => __data_pt($produto->created_at)
];
array_push($data, $linha);
}else{
foreach($produto->variacoes as $v){
$linha = [
'codigo' => $produto->numero_sequencial,
'produto' => $produto->nome . " " . $v->descricao,
'quantidade' => $v->estoque ? $v->estoque->quantidade : '',
'estoque_minimo' => $produto->estoque_minimo,
'valor_compra' => $produto->valor_compra,
'valor_venda' => $v->valor,
'categoria' => $produto->categoria ? $produto->categoria->nome : '--',
'data_cadastro' => __data_pt($produto->created_at)
];
array_push($data, $linha);
}
}
}
}
}else if($start_date || $end_date){
$movimentacoes = MovimentacaoProduto::
select('movimentacao_produtos.*')
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('movimentacao_produtos.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('movimentacao_produtos.created_at', '<=', $end_date);
})
->join('produtos', 'produtos.id', '=', 'movimentacao_produtos.produto_id')
->when($categoria_id, function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('categoria_id', $categoria_id)->orWhere('sub_categoria_id', $categoria_id);
});
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})
->where('produtos.empresa_id', $request->empresa_id)
->groupBy('produtos.id')
->orderBy('movimentacao_produtos.created_at', 'desc')
->get();
foreach($movimentacoes as $m){
$produto = $m->produto;
if(sizeof($produto->variacoes) == 0){
$linha = [
'codigo' => $m->produto->numero_sequencial,
'produto' => $m->produto->nome,
'quantidade' => $m->produto->estoqueTotalProduto(),
'estoque_minimo' => $m->produto->estoque_minimo,
'valor_compra' => $m->produto->valor_compra,
'valor_venda' => $m->produto->valor_unitario,
'categoria' => $m->produto->categoria ? $m->produto->categoria->nome : '--',
'data_cadastro' => __data_pt($m->produto->created_at)
];
array_push($data, $linha);
}else{
foreach($produto->variacoes as $v){
$linha = [
'codigo' => $m->produto->numero_sequencial,
'produto' => $m->produto->nome . " " . $v->descricao,
'quantidade' => $v->estoque ? $v->estoque->quantidade : '',
'estoque_minimo' => $m->produto->estoque_minimo,
'valor_compra' => $m->produto->valor_compra,
'valor_venda' => $v->valor,
'categoria' => $m->produto->categoria ? $m->produto->categoria->nome : '--',
'data_cadastro' => __data_pt($m->produto->created_at)
];
array_push($data, $linha);
}
}
}
}else{
$estoque = Estoque::
select('estoques.*')
->join('produtos', 'produtos.id', '=', 'estoques.produto_id')
->groupBy('produtos.id')
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('estoques.local_id', $local_id);
})
->when($categoria_id, function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('categoria_id', $categoria_id)->orWhere('sub_categoria_id', $categoria_id);
});
})
->where('produtos.empresa_id', $request->empresa_id)->get();
foreach($estoque as $m){
$produto = $m->produto;
if(sizeof($produto->variacoes) == 0){
$linha = [
'codigo' => $m->produto->numero_sequencial,
'produto' => $m->produto->nome,
'quantidade' => $m->quantidade,
'estoque_minimo' => $m->produto->estoque_minimo,
'valor_compra' => $m->produto->valor_compra,
'valor_venda' => $m->produto->valor_unitario,
'categoria' => $m->produto->categoria ? $m->produto->categoria->nome : '--',
'data_cadastro' => __data_pt($m->produto->created_at)
];
array_push($data, $linha);
}else{
foreach($produto->variacoes as $v){
$linha = [
'codigo' => $m->produto->numero_sequencial,
'produto' => $m->produto->nome . " " . $v->descricao,
'quantidade' => $v->estoque ? $v->estoque->quantidade : '',
'estoque_minimo' => $m->produto->estoque_minimo,
'valor_compra' => $m->produto->valor_compra,
'valor_venda' => $v->valor,
'categoria' => $m->produto->categoria ? $m->produto->categoria->nome : '--',
'data_cadastro' => __data_pt($m->produto->created_at)
];
array_push($data, $linha);
}
}
}
}
if($esportar_excel == -1){
$localizacao = null;
if($local_id){
$localizacao = Localizacao::findOrFail($local_id);
}
$p = view('relatorios/estoque', compact('data', 'start_date', 'end_date', 'estoque_minimo', 'localizacao'))
->with('title', 'Relatório de Estoque');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
// return $p;
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de estoque.pdf", array("Attachment" => false));
}else{
$relatorioEx = new RelatorioEstoqueExport($data);
return Excel::download($relatorioEx, 'estoque.xlsx');
}
}
public function totalizaProdutos(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$data = Produto::select('produtos.*')
->where('produtos.empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('produtos.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('produtos.created_at', '<=', $end_date);
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})->get();
$local = null;
if($local_id){
$local = Localizacao::findOrFail($local_id);
}
$p = view('relatorios/totaliza_produtos', compact('data', 'local_id', 'local'))
->with('title', 'Relatório Totalizador Produtos');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
// return $p;
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório totalizador de produtos.pdf", array("Attachment" => false));
}
public function vendasPorVendedor(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$funcionario_id = $request->funcionario_id;
$local_id = $request->local_id;
$funcionario = Funcionario::findOrFail($funcionario_id);
$nves = Nfe::
where('empresa_id', $request->empresa_id)
->where('funcionario_id', $funcionario_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})->get();
$nfces = Nfce::
where('empresa_id', $request->empresa_id)
->where('funcionario_id', $funcionario_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})->get();
$data = [];
foreach($nves as $n){
$data[] = [
'id' => $n->numero_sequencial,
'cliente' => $n->cliente ? $n->cliente->info : 'Consumidor final',
'data' => $n->created_at,
'total' => $n->total,
'localizacao' => $n->localizacao
];
}
foreach($nfces as $n){
$data[] = [
'id' => $n->numero_sequencial,
'cliente' => $n->cliente ? $n->cliente->info : 'Consumidor final',
'data' => $n->created_at,
'total' => $n->total,
'localizacao' => $n->localizacao
];
}
$p = view('relatorios/vendas_por_vendedor', compact('data', 'funcionario'))
->with('title', 'Relatório Vendas por Vendedor');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
// return $p;
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório vendas por vendedor.pdf", array("Attachment" => false));
}
public function custoMedio(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$categoria_id = $request->categoria_id;
$ordem = $request->ordem;
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$data = Produto::select('produtos.*')
->where('produtos.empresa_id', $request->empresa_id)
->where('gerenciar_estoque', 1)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('produtos.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('produtos.created_at', '<=', $end_date);
})
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('categoria_id', $categoria_id)->orWhere('sub_categoria_id', $categoria_id);
});
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})
// ->limit(10)
->get();
$local = null;
if($local_id){
$local = Localizacao::findOrFail($local_id);
}
foreach($data as $item){
$valor = ItemNfe::where('produto_id', $item->id)
->sum('sub_total');
$item->custo_medio = $valor/($item->estoque && $item->estoque->quantidade > 0 ? $item->estoque->quantidade : 1);
$item->quantidade = $item->estoque ? $item->estoque->quantidade : 0;
$item->categoria_nome = $item->categoria ? $item->categoria->nome : '--';
$item->nome = $item->nome;
}
$data = $data->toArray();
usort($data, function($a, $b) use ($ordem){
if($ordem == 'asc') return $a['quantidade'] > $b['quantidade'] ? 1 : -1;
else if($ordem == 'desc') return $a['quantidade'] < $b['quantidade'] ? 1 : -1;
else return $a['nome'] > $b['nome'] ? 1 : -1;
});
$p = view('relatorios/inventario_custo_medio', compact('data', 'local_id', 'local'))
->with('title', 'Relatório inventário custo médio');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório inventário custo médio.pdf", array("Attachment" => false));
}
public function registroInventario(Request $request){
$date = $request->date;
$livro = $request->livro;
$tipo_custo = $request->tipo_custo;
$sub = MovimentacaoProduto::select(
'movimentacao_produtos.produto_id',
DB::raw('MAX(movimentacao_produtos.created_at) as ultima_data')
)
->join('produtos', 'produtos.id', '=', 'movimentacao_produtos.produto_id')
->where('produtos.empresa_id', $request->empresa_id)
->whereDate('movimentacao_produtos.created_at', '<=', $date)
->groupBy('movimentacao_produtos.produto_id');
$data = MovimentacaoProduto::with('produto')
->select('movimentacao_produtos.*')
->join('produtos', 'produtos.id', '=', 'movimentacao_produtos.produto_id')
->joinSub($sub, 'ultimas', function ($join) {
$join->on('ultimas.produto_id', '=', 'movimentacao_produtos.produto_id')
->on('ultimas.ultima_data', '=', 'movimentacao_produtos.created_at');
})
->where('produtos.empresa_id', $request->empresa_id)
->where('movimentacao_produtos.quantidade', '>', 0)
->orderBy('produtos.nome')
->get();
$itensNfe = ItemNfe::select(
'item_nves.produto_id',
DB::raw('SUM(item_nves.sub_total) as total'),
DB::raw('SUM(item_nves.quantidade) as quantidade')
)
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->where('nves.tpNF', 0)
->whereDate('nves.created_at', '<=', $date)
->groupBy('item_nves.produto_id')
->get()
->keyBy('produto_id');
foreach ($data as $item) {
$item->quantidade = $item->estoque_atual;
if ($tipo_custo === 'media') {
$info = $itensNfe[$item->produto_id] ?? null;
if ($info && $info->quantidade > 0) {
$item->valor_unitario = $info->total / $info->quantidade;
} else {
$item->valor_unitario = $item->produto->valor_compra ?? 0;
}
}
else {
$item->valor_unitario = $item->produto->valor_compra ?? 0;
}
$item->sub_total = $item->valor_unitario * $item->quantidade;
}
$empresa = Empresa::findOrFail($request->empresa_id);
$html = view('relatorios.registro_inventario', compact(
'data',
'livro',
'empresa'
))->with('title', 'Relatório registro inventário');
$domPdf = new Dompdf(['enable_remote' => true]);
$domPdf->loadHtml($html);
$domPdf->setPaper('A4', 'landscape');
$domPdf->render();
$domPdf->stream('Relatorio_registro_inventario.pdf', [
'Attachment' => false
]);
}
// public function registroInventario(Request $request){
// $date = $request->date;
// $livro = $request->livro;
// $tipo_custo = $request->tipo_custo;
// $sub = MovimentacaoProduto::select(
// 'produto_id',
// DB::raw('MAX(movimentacao_produtos.created_at) as ultima_data')
// )
// ->whereDate('movimentacao_produtos.created_at', '<=', $date)
// ->join('produtos', 'produtos.id', '=', 'movimentacao_produtos.produto_id')
// ->where('produtos.empresa_id', $request->empresa_id)
// ->groupBy('produto_id');
// $data = MovimentacaoProduto::select('movimentacao_produtos.*', 'produtos.nome')
// ->join('produtos', 'produtos.id', '=', 'movimentacao_produtos.produto_id')
// ->joinSub($sub, 'ultimas', function ($join) {
// $join->on('ultimas.produto_id', '=', 'movimentacao_produtos.produto_id')
// ->on('ultimas.ultima_data', '=', 'movimentacao_produtos.created_at');
// })
// ->where('produtos.empresa_id', $request->empresa_id)
// ->where('movimentacao_produtos.quantidade', '>', 0)
// ->orderBy('produtos.nome')
// // ->limit(10)
// ->get();
// if($tipo_custo == 'media'){
// // ver como faz
// foreach($data as $item){
// $valor = ItemNfe::where('produto_id', $item->produto_id)
// ->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
// ->where('nves.tpNF', 0)
// ->sum('sub_total');
// $item->quantidade = $item->estoque_atual;
// $item->valor_unitario = $item->produto->valor_compra;
// if($valor > 0){
// $qtd = ItemNfe::where('produto_id', $item->produto_id)
// ->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
// ->where('nves.tpNF', 0)
// ->sum('quantidade');
// $custo_medio = $valor/$qtd;
// $item->valor_unitario = $custo_medio;
// }
// $item->sub_total = $item->valor_unitario * $item->quantidade;
// }
// }else{
// foreach($data as $item){
// $item->valor_unitario = $item->produto->valor_compra;
// $item->quantidade = $item->estoque_atual;
// $item->sub_total = $item->produto->valor_compra * $item->quantidade;
// }
// }
// $empresa = Empresa::findOrFail($request->empresa_id);
// $p = view('relatorios.registro_inventario', compact('data', 'livro', 'empresa'))
// ->with('title', 'Relatório registro inventário');
// $domPdf = new Dompdf(["enable_remote" => true]);
// $domPdf->loadHtml($p);
// $domPdf->setPaper("A4", "landscape");
// $domPdf->render();
// $domPdf->stream("Relatório registro inventário", array("Attachment" => false));
// }
public function inventario(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$ordem = $request->ordem;
$livro = $request->livro;
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$data = Produto::select('produtos.*')
->where('produtos.empresa_id', $request->empresa_id)
->where('gerenciar_estoque', 1)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('produtos.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('produtos.created_at', '<=', $end_date);
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})
// ->limit(10)
->get();
$local = null;
$empresa = Empresa::findOrFail($request->empresa_id);
if($local_id){
$local = Localizacao::findOrFail($local_id);
}
foreach($data as $item){
$item->custo_unuitario = $item->valor_compra;
$item->quantidade = $item->estoque ? $item->estoque->quantidade : 0;
$item->sub_total = $item->quantidade * $item->valor_compra;
$item->nome = $item->nome;
}
$data = $data->toArray();
usort($data, function($a, $b) use ($ordem){
if($ordem == 'asc') return $a['quantidade'] > $b['quantidade'] ? 1 : -1;
else if($ordem == 'desc') return $a['quantidade'] < $b['quantidade'] ? 1 : -1;
else return $a['nome'] > $b['nome'] ? 1 : -1;
});
$p = view('relatorios/inventario', compact('data', 'local_id', 'local', 'livro', 'empresa'))
->with('title', 'Relatório inventário');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório inventário.pdf", array("Attachment" => false));
}
public function curvaAbcClientes(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$nfe = Nfe::where('nves.empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('nves.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('nves.created_at', '<=', $end_date);
})
->join('clientes', 'clientes.id', '=', 'nves.cliente_id')
->groupBy('cliente_id')
->select('clientes.id as cliente_id', 'clientes.razao_social as nome', \DB::raw('sum(nves.total) as total'), \DB::raw('count(nves.id) as count'))
->get();
$nfce = Nfce::where('nfces.empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('nfces.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('nfces.created_at', '<=', $end_date);
})
->join('clientes', 'clientes.id', '=', 'nfces.cliente_id')
->groupBy('cliente_id')
->select('clientes.id as cliente_id', 'clientes.razao_social as nome', \DB::raw('sum(nfces.total) as total'), \DB::raw('count(nfces.id) as count'))
->get();
$data = $this->agrupaArrayCurva($nfe, $nfce);
$soma = 0;
foreach($data as $a){
$soma += $a['total'];
}
foreach($data as $key => $a){
$totalLinha = $data[$key]['total'];
$v = 100 - (((($totalLinha-$soma)/$soma)*100)*-1);
$data[$key]['percentual'] = number_format($v, 2);
}
$p = view('relatorios/curva_abc_clientes')
->with('data', $data)
->with('soma', $soma)
->with('title', 'Curva ABC Clientes');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Curva ABC Clientes.pdf", array("Attachment" => false));
}
public function entregaDeProdutos(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$vendas = $request->vendas;
$vNfe = [];
$vNfce = [];
$filtroVenda = 0;
if($vendas){
$filtroVenda = 1;
foreach($vendas as $v){
$ex = explode("_", $v);
if($ex[0] == 'pedido'){
$vNfe[] = $ex[1];
}else{
$vNfce[] = $ex[1];
}
}
}
$itensNfe = ItemNfe::where('nves.empresa_id', $request->empresa_id)->where('nves.tpNF', 1)
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->where('nves.created_at', '>=', $start_date);
})
->when(sizeof($vNfe) > 0, function ($query) use ($vNfe) {
return $query->whereIn('nves.id', $vNfe);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->where('nves.created_at', '<=', $end_date);
})
->where('nves.empresa_id', $request->empresa_id)
->get();
if($filtroVenda == 1 && sizeof($vNfe) == 0){
$itensNfe = [];
}
$itensNfce = ItemNfce::where('nfces.empresa_id', $request->empresa_id)
->join('nfces', 'nfces.id', '=', 'item_nfces.nfce_id')
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->where('nfces.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->where('nfces.created_at', '<=', $end_date);
})
->when(sizeof($vNfce) > 0, function ($query) use ($vNfce) {
return $query->whereIn('nfces.id', $vNfce);
})
->where('nfces.empresa_id', $request->empresa_id)
->get();
if($filtroVenda == 1 && sizeof($vNfce) == 0){
$itensNfce = [];
}
$data = [];
$dataPushId = [];
foreach($itensNfe as $i){
if(!in_array($i->produto_id, $dataPushId)){
$obj = [
'produto_id' => $i->produto_id,
'numero_sequencial' => $i->produto->numero_sequencial,
'quantidade' => (int)$i->quantidade,
'produto_nome' => $i->produto->nome
];
$data[] = $obj;
$dataPushId[] = $i->produto_id;
}else{
for($j=0; $j<sizeof($data); $j++){
if($data[$j]['produto_id'] == $i->produto_id){
$data[$j]['quantidade'] += (int)$i->quantidade;
}
}
}
}
foreach($itensNfce as $i){
if(!in_array($i->produto_id, $dataPushId)){
$obj = [
'produto_id' => $i->produto_id,
'numero_sequencial' => $i->produto->numero_sequencial,
'quantidade' => (int)$i->quantidade,
'produto_nome' => $i->produto->nome
];
$data[] = $obj;
$dataPushId[] = $i->produto_id;
}else{
for($j=0; $j<sizeof($data); $j++){
if($data[$j]['produto_id'] == $i->produto_id){
$data[$j]['quantidade'] += (int)$i->quantidade;
}
}
}
}
$p = view('relatorios/entrega_produtos')
->with('data', $data)
->with('title', 'Entrega de Produtos');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4");
$domPdf->render();
$domPdf->stream("Entrega de Produtos.pdf", array("Attachment" => false));
}
// private function agrupaArrayCurva($nfe, $nfce){
// $clientes = [];
// $clientesId = [];
// foreach($nfe as $v){
// $temp = [
// 'nome' => $v->nome,
// 'total' => $v->total,
// 'cliente_id' => $v->cliente_id,
// 'count' => $v->count,
// 'percentual' => 0
// ];
// $clientesId[] = $v->cliente_id;
// array_push($clientes, $temp);
// }
// foreach($nfce as $v){
// if(!in_array($v->cliente_id, $clientesId)){
// $temp = [
// 'nome' => $v->nome,
// 'total' => $v->total,
// 'cliente_id' => $v->cliente_id,
// 'count' => $v->count,
// 'percentual' => 0
// ];
// array_push($clientes, $temp);
// }else{
// $v['total'] += $v->total;
// $v['count'] += $v->count;
// }
// }
// usort($clientes, function ($a, $b) {
// return $b['total'] <=> $a['total'];
// });
// return $clientes;
// }
private function agrupaArrayCurva($nfe, $nfce){
$clientes = [];
$clientesId = [];
foreach ($nfe as $v) {
$temp = [
'nome' => $v->nome,
'total' => $v->total,
'cliente_id' => $v->cliente_id,
'count' => $v->count,
'percentual' => 0
];
$clientesId[] = $v->cliente_id;
$clientes[] = $temp;
}
foreach ($nfce as $v) {
if (!in_array($v->cliente_id, $clientesId)) {
$clientes[] = [
'nome' => $v->nome,
'total' => $v->total,
'cliente_id' => $v->cliente_id,
'count' => $v->count,
'percentual' => 0
];
$clientesId[] = $v->cliente_id;
} else {
foreach ($clientes as &$c) {
if ($c['cliente_id'] == $v->cliente_id) {
$c['total'] += $v->total;
$c['count'] += $v->count;
}
}
}
}
usort($clientes, function ($a, $b) {
return $b['total'] <=> $a['total'];
});
return $clientes;
}
public function movimentacao(Request $request){
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$local_id = $request->local_id;
$marca_id = $request->marca_id;
$categoria_id = $request->categoria_id;
$produto_id = $request->produto_id;
$ordem = $request->ordem;
$fiscal = $request->fiscal;
$produtos = Produto::where('status', 1)->where('empresa_id', $request->empresa_id)
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('categoria_id', $categoria_id)->orWhere('sub_categoria_id', $categoria_id);
});
})
->select('produtos.*')
->orderBy('nome')
->when(!empty($produto_id), function ($query) use ($produto_id) {
return $query->where('produtos.id', $produto_id);
})
->when(!empty($marca_id), function ($query) use ($marca_id) {
return $query->where('marca_id', $marca_id);
})
->when(!empty($local_id), function ($query) use ($local_id) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->where('produto_localizacaos.localizacao_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->join('produto_localizacaos', 'produto_localizacaos.produto_id', '=', 'produtos.id')
->whereIn('produto_localizacaos.localizacao_id', $locais);
})
// ->limit(200)
->get();
$data = [];
foreach($produtos as $p){
$countNfeSaida = ItemNfe::select('item_nfves.*')
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->where('nves.tpNF', 1)->where('item_nves.produto_id', $p->id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('nves.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('nves.created_at', '<=', $end_date);
})
->when(!empty($fiscal), function ($query) use ($fiscal) {
if($fiscal == 1){
return $query->where('nves.estado', 'aprovado');
}else{
return $query->where('nves.estado', '!=', 'aprovado');
}
})
->sum('item_nves.quantidade');
$countNfce = ItemNfce::select('item_nfces.*')
->join('nfces', 'nfces.id', '=', 'item_nfces.nfce_id')
->where('item_nfces.produto_id', $p->id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('nfces.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('nfces.created_at', '<=', $end_date);
})
->when(!empty($fiscal), function ($query) use ($fiscal) {
if($fiscal == 1){
return $query->where('nfces.estado', 'aprovado');
}else{
return $query->where('nfces.estado', '!=', 'aprovado');
}
})
->sum('item_nfces.quantidade');
$countNfeEntrada = ItemNfe::select('item_nfves.*')
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->where('nves.tpNF', 0)->where('item_nves.produto_id', $p->id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('nves.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('nves.created_at', '<=', $end_date);
})
->when(!empty($fiscal), function ($query) use ($fiscal) {
if($fiscal == 1){
return $query->where('nves.estado', 'aprovado');
}else{
return $query->where('nves.estado', '!=', 'aprovado');
}
})
->sum('item_nves.quantidade');
$descricao = $p->nome;
$itemParaNome = ItemNfe::where('produto_id', $p->id)
->first();
if($itemParaNome){
$descricao = $itemParaNome->descricao();
}
if($countNfeEntrada > 0 || ($countNfce + $countNfeSaida) > 0){
$data[] = [
'nome_produto' => $descricao,
'qtd_compra' => $countNfeEntrada,
'qtd_saida' => $countNfce + $countNfeSaida,
'vl_venda' => $p->valor_unitario,
'vl_compra' => $p->valor_compra,
'subtotal_venda' => $p->valor_unitario * ($countNfce + $countNfeSaida),
'subtotal_compra' => $p->valor_compra * $countNfeEntrada,
];
}
}
if($ordem){
usort($data, function($a, $b) use($ordem){
if($ordem == 'mais_vendidos'){
return $a['qtd_saida'] < $b['qtd_saida'] ? 1 : -1;
}
if($ordem == 'mais_comprados'){
return $a['qtd_compra'] < $b['qtd_compra'] ? 1 : -1;
}
if($ordem == 'menos_vendidos'){
return $a['qtd_saida'] > $b['qtd_saida'] ? 1 : -1;
}
if($ordem == 'menos_comprados'){
return $a['qtd_compra'] > $b['qtd_compra'] ? 1 : -1;
}
});
}
// dd($data);
$p = view('relatorios/movimentacao')
->with('data', $data)
->with('start_date', $start_date)
->with('end_date', $end_date)
->with('title', 'Movimentação');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Movimentação.pdf", array("Attachment" => false));
}
public function ordemServico(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$cliente_id = $request->cliente;
$local_id = $request->local_id;
$data = OrdemServico::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when(!empty($cliente_id), function ($query) use ($cliente_id) {
return $query->where('cliente_id', $cliente_id);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$p = view('relatorios/ordem_servico', compact('data'))
->with('title', 'Relatório de Ordem de Serviço');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Ordem de Serviço.pdf", array("Attachment" => false));
}
public function tiposDePagamento(Request $request)
{
$locais = __getLocaisAtivoUsuario();
$locais = $locais->pluck(['id']);
$start_date = $request->start_date;
$end_date = $request->end_date;
$tipo_pagamento = $request->tipo_pagamento;
$local_id = $request->local_id;
$nves = Nfe::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$nfces = Nfce::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when($local_id, function ($query) use ($local_id) {
return $query->where('local_id', $local_id);
})
->when(!$local_id, function ($query) use ($locais) {
return $query->whereIn('local_id', $locais);
})
->get();
$data = $this->getTiposPagamento($tipo_pagamento);
foreach($nves as $n){
foreach($n->fatura as $f){
if(isset($data[$f->tipo_pagamento])){
$data[$f->tipo_pagamento] += $f->valor;
}
}
}
foreach($nfces as $n){
foreach($n->fatura as $f){
if(isset($data[$f->tipo_pagamento])){
$data[$f->tipo_pagamento] += $f->valor;
}
}
}
$p = view('relatorios/tipos_pagamento', compact('data'))
->with('title', 'Relatório de Tipos de Pagamento');
// return $p;
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Tipos de Pagamento.pdf", array("Attachment" => false));
}
private function getTiposPagamento($tipo_pagamento = null){
$data = [];
foreach(Nfe::tiposPagamento() as $key => $n){
if($tipo_pagamento != null){
if($tipo_pagamento == $key){
$data[$key] = 0;
}
}else{
$data[$key] = 0;
}
}
return $data;
}
public function reservas(Request $request)
{
$start_date = $request->start_date;
$end_date = $request->end_date;
$estado = $request->estado;
$vagos = $request->vagos;
if($vagos == 1){
$reservas = Reserva::where('empresa_id', $request->empresa_id)
->where(function ($query) use ($start_date, $end_date) {
$query->whereDate('data_checkin', '<=', $start_date)
->whereDate('data_checkout', '>=', $end_date);
})
->where('estado', '!=', 'cancelado')
->pluck('acomodacao_id')
->all();
$data = Acomodacao::where('empresa_id', request()->empresa_id)
->whereNotIn('id', $reservas)
->where('status', 1)
->get();
$p = view('relatorios/reserva_vagos', compact('data', 'start_date', 'end_date'))
->with('title', 'Relatório de acomodações vagas por período');
}else{
$data = Reserva::where('empresa_id', $request->empresa_id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_checkin', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('data_checkout', '<=', $end_date);
})
->when($estado != "", function ($query) use ($estado) {
return $query->where('estado', $estado);
})
->get();
$p = view('relatorios/reservas', compact('data', 'start_date', 'end_date'))
->with('title', 'Relatório de Reservas');
}
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Reservas.pdf", array("Attachment" => false));
}
public function lucroProduto(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$marca_id = $request->marca_id;
$categoria_id = $request->categoria_id;
$produto_id = $request->produto_id;
$dataNfe = ItemNfe::where('produtos.empresa_id', $request->empresa_id)
->select('produtos.id as produto_id')
->join('produtos', 'produtos.id', '=', 'item_nves.produto_id')
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('item_nves.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('item_nves.created_at', '<=', $end_date);
})
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('produtos.categoria_id', $categoria_id)->orWhere('produtos.sub_categoria_id', $categoria_id);
});
})
->when(!empty($marca_id), function ($query) use ($marca_id) {
return $query->where('produtos.marca_id', $marca_id);
})
->when(!empty($produto_id), function ($query) use ($produto_id) {
return $query->where('produtos.id', $produto_id);
})
->groupBy('produto_id')
->pluck('produto_id')->toArray();
$dataNfce = ItemNfce::where('produtos.empresa_id', $request->empresa_id)
->select('produtos.id as produto_id')
->join('produtos', 'produtos.id', '=', 'item_nfces.produto_id')
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('item_nfces.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date,) {
return $query->whereDate('item_nfces.created_at', '<=', $end_date);
})
->when(!empty($categoria_id), function ($query) use ($categoria_id) {
return $query->where(function($t) use ($categoria_id)
{
$t->where('produtos.categoria_id', $categoria_id)->orWhere('produtos.sub_categoria_id', $categoria_id);
});
})
->when(!empty($marca_id), function ($query) use ($marca_id) {
return $query->where('produtos.marca_id', $marca_id);
})
->when(!empty($produto_id), function ($query) use ($produto_id) {
return $query->where('produtos.id', $produto_id);
})
->groupBy('produto_id')
->pluck('produto_id')->toArray();
$resultado = array_unique(array_merge($dataNfe, $dataNfce));
$data = [];
foreach($resultado as $produto_id){
$produto = Produto::findOrFail($produto_id);
$subVenda = ItemNfe::where('produto_id', $produto_id)
->where('nves.tpNF', 1)
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->sum('sub_total');
$subVendaNfce = ItemNfce::where('produto_id', $produto_id)
->join('nfces', 'nfces.id', '=', 'item_nfces.nfce_id')
->sum('sub_total');
$subCompra = ItemNfe::where('produto_id', $produto_id)
->where('nves.tpNF', 0)
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->sum('sub_total');
$data[] = [
'produto_id' => $produto_id,
'numero_sequencial' => $produto->numero_sequencial,
'produto_nome' => $produto->nome,
'total_vendas' => $subVenda + $subVendaNfce,
'total_compras' => $subCompra,
];
}
$p = view('relatorios.lucro_produto', compact('data', 'start_date', 'end_date'))
->with('title', 'Relatório de Lucro por Produto');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Lucro por Produto.pdf", array("Attachment" => false));
}
// public function vendaProdutosFiscal(Request $request){
// $locais = __getLocaisAtivoUsuario();
// $locais = $locais->pluck(['id']);
// $start_date = $request->start_date;
// $end_date = $request->end_date;
// $cfop = $request->cfop;
// $ncm = $request->ncm;
// $cst_csosn = $request->cst_csosn;
// $cst_pis = $request->cst_pis;
// $cst_cofins = $request->cst_cofins;
// $diferenca = strtotime($end_date) - strtotime($start_date);
// $dias = floor($diferenca / (60 * 60 * 24));
// $dataAtual = $start_date;
// if($dias <= 0){
// $dias = 1;
// }
// $data = [];
// for($aux = 0; $aux < $dias; $aux++){
// $itensNfe = ItemNfe::
// select(\DB::raw('sum(sub_total) as subtotal, sum(quantidade) as soma_quantidade, item_nves.produto_id as produto_id, avg(item_nves.valor_unitario) as media, item_nves.valor_unitario as valor_unitario'))
// ->whereBetween('item_nves.created_at',
// [
// $dataAtual . " 00:00:00",
// $dataAtual . " 23:59:59"
// ]
// )
// ->join('produtos', 'produtos.id', '=', 'item_nves.produto_id')
// ->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
// ->groupBy('item_nves.produto_id')
// ->where('produtos.empresa_id', $request->empresa_id)
// ->when(!empty($cfop), function ($query) use ($cfop) {
// return $query->where('item_nves.cfop', $cfop);
// })
// ->when(!empty($ncm), function ($query) use ($ncm) {
// return $query->where('item_nves.ncm', $ncm);
// })
// ->when(!empty($cst_csosn), function ($query) use ($cst_csosn) {
// return $query->where('item_nves.cst_csosn', $cst_csosn);
// })
// ->when(!empty($cst_pis), function ($query) use ($cst_pis) {
// return $query->where('item_nves.cst_pis', $cst_pis);
// })
// ->when(!empty($cst_cofins), function ($query) use ($cst_cofins) {
// return $query->where('item_nves.cst_cofins', $cst_cofins);
// })
// ->get();
// $itensNfce = ItemNfce::
// select(\DB::raw('sum(sub_total) as subtotal, sum(quantidade) as soma_quantidade, item_nfces.produto_id as produto_id, avg(item_nfces.valor_unitario) as media, item_nfces.valor_unitario as valor_unitario'))
// ->whereBetween('item_nfces.created_at',
// [
// $dataAtual . " 00:00:00",
// $dataAtual . " 23:59:59"
// ]
// )
// ->join('produtos', 'produtos.id', '=', 'item_nfces.produto_id')
// ->join('nfces', 'nfces.id', '=', 'item_nfces.nfce_id')
// ->groupBy('item_nfces.produto_id')
// ->where('produtos.empresa_id', $request->empresa_id)
// ->when(!empty($cfop), function ($query) use ($cfop) {
// return $query->where('item_nfces.cfop', $cfop);
// })
// ->when(!empty($ncm), function ($query) use ($ncm) {
// return $query->where('item_nfces.ncm', $ncm);
// })
// ->when(!empty($cst_csosn), function ($query) use ($cst_csosn) {
// return $query->where('item_nfces.cst_csosn', $cst_csosn);
// })
// ->when(!empty($cst_pis), function ($query) use ($cst_pis) {
// return $query->where('item_nfces.cst_pis', $cst_pis);
// })
// ->when(!empty($cst_cofins), function ($query) use ($cst_cofins) {
// return $query->where('item_nfces.cst_cofins', $cst_cofins);
// })
// ->get();
// $itens = $this->uneArrayItens($itensNfe, $itensNfce, $request->ordem);
// $temp = [
// 'data' => $dataAtual,
// 'itens' => $itens,
// ];
// array_push($data, $temp);
// $dataAtual = date('Y-m-d', strtotime($dataAtual. '+1day'));
// }
// $p = view('relatorios/venda_por_produtos_fiscal',
// compact('data', 'start_date', 'end_date', 'cfop', 'ncm', 'cst_csosn', 'cst_pis', 'cst_cofins'))
// ->with('title', 'Relatório de Venda por Produtos Fiscal');
// $domPdf = new Dompdf(["enable_remote" => true]);
// $domPdf->loadHtml($p);
// $domPdf->setPaper("A4", "landscape");
// $domPdf->render();
// $domPdf->stream("Relatório de venda por produtos fiscal.pdf", array("Attachment" => false));
// }
public function vendaProdutosFiscal(Request $request)
{
$start = Carbon::parse($request->start_date)->startOfDay();
$end = Carbon::parse($request->end_date)->endOfDay();
$empresaId = $request->empresa_id;
$filtros = function ($query, $alias) use ($request) {
$query->when($request->cfop, fn ($q) => $q->where("$alias.cfop", $request->cfop))
->when($request->ncm, fn ($q) => $q->where("$alias.ncm", $request->ncm))
->when($request->cst_csosn, fn ($q) => $q->where("$alias.cst_csosn", $request->cst_csosn))
->when($request->cst_pis, fn ($q) => $q->where("$alias.cst_pis", $request->cst_pis))
->when($request->cst_cofins, fn ($q) => $q->where("$alias.cst_cofins", $request->cst_cofins));
};
$itensNfe = ItemNfe::selectRaw('
DATE(item_nves.created_at) as data,
item_nves.produto_id,
SUM(sub_total) as subtotal,
SUM(quantidade) as soma_quantidade,
AVG(item_nves.valor_unitario) as media,
item_nves.valor_unitario
')
->join('produtos', 'produtos.id', '=', 'item_nves.produto_id')
->join('nves', 'nves.id', '=', 'item_nves.nfe_id')
->where('nves.tpNF', 1)
->whereBetween('item_nves.created_at', [$start, $end])
->where('produtos.empresa_id', $empresaId)
->tap(fn ($q) => $filtros($q, 'item_nves'))
->groupBy('data', 'item_nves.produto_id')
->get();
$itensNfce = ItemNfce::selectRaw('
DATE(item_nfces.created_at) as data,
item_nfces.produto_id,
SUM(sub_total) as subtotal,
SUM(quantidade) as soma_quantidade,
AVG(item_nfces.valor_unitario) as media,
item_nfces.valor_unitario
')
->join('produtos', 'produtos.id', '=', 'item_nfces.produto_id')
->join('nfces', 'nfces.id', '=', 'item_nfces.nfce_id')
->whereBetween('item_nfces.created_at', [$start, $end])
->where('produtos.empresa_id', $empresaId)
->tap(fn ($q) => $filtros($q, 'item_nfces'))
->groupBy('data', 'item_nfces.produto_id')
->get();
$data = [];
$periodo = new \DatePeriod(
$start,
new \DateInterval('P1D'),
$end->copy()->addDay()
);
foreach ($periodo as $dia) {
$dataStr = $dia->format('Y-m-d');
$nfe = $itensNfe->where('data', $dataStr);
$nfce = $itensNfce->where('data', $dataStr);
$itens = $this->uneArrayItens($nfe, $nfce, $request->ordem);
$data[] = [
'data' => $dataStr,
'itens' => $itens,
];
}
$view = view('relatorios.venda_por_produtos_fiscal', [
'data' => $data,
'start_date' => $request->start_date,
'end_date' => $request->end_date,
'cfop' => $request->cfop,
'ncm' => $request->ncm,
'cst_csosn' => $request->cst_csosn,
'cst_pis' => $request->cst_pis,
'cst_cofins' => $request->cst_cofins,
'title' => 'Relatório de Venda por Produtos Fiscal',
]);
$domPdf = new Dompdf(['enable_remote' => true]);
$domPdf->loadHtml($view);
$domPdf->setPaper('A4', 'landscape');
$domPdf->render();
$domPdf->stream('Relatorio_venda_produtos_fiscal.pdf', ['Attachment' => false]);
}
}