| Server IP : 54.94.228.101 / Your IP : 172.28.20.13 Web Server : Apache System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/vinumday2_0/app/Services/ |
Upload File : |
<?php
namespace App\Services;
use DB;
use Sentinel;
use App\Modules\PedidoEntrega\Models\PedidoEntrega;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\Oferta\Models\Oferta;
use Session;
class DashService {
public static function estoqueOfertaDia($datas, $startDay, $lastDay){
try {
$sumCase = [];
foreach ($datas as $key => $data){
$sumCase[] = "SUM(CASE WHEN oferta.data = '{$data}' THEN oferta.estoque ELSE 0 END) AS {$key}";
}
$query = Oferta::select(
DB::raw(implode(",", $sumCase))
)->whereBetween('oferta.data', [$startDay, $lastDay])
->where('oferta.tipo', '=', 'D');
$estoque = $query->first()->toArray();
return $estoque;
} catch (Exception $e) {
}
}
public static function totalVendasAno($id_cliente){
$data = [];
$labels = [];
$sumCase = [];
for($year=2014;$year<=date('Y');$year++){
$labels[] = $year;
$sumCase[] = "SUM(CASE WHEN YEAR(data_fechamento) = {$year} THEN valor_total ELSE 0 END) AS 'TOTAL_{$year}'";
}
$query = PedidoVenda::select(
DB::raw(implode(",", $sumCase))
)->join('pedido_venda_has_produto','pedido_venda_has_produto.id_pedido_venda','=','pedido_venda.id')
->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
->where('pedido_venda.frete', 0)
->where('pedido_venda.id_cliente', $id_cliente);
$vendas = $query->first()->toArray();
$dataset = [];
$total = 0;
for($year=2014;$year<=date('Y');$year++){
$dataset[] = $vendas["TOTAL_{$year}"];
$total += $vendas["TOTAL_{$year}"];
}
$data['labels'] = $labels;
$data['dataset'] = $dataset;
$data['total'] = number_format($total,0,',','.');
return $data;
}
public static function totalVendasTipoProduto($id_cliente, $total_pedidos_venda){
$data = [];
$labels = [];
$dataset = [];
$query = PedidoVenda::select(
DB::raw('SUM(pvhp.valor_total) total_venda'),
'tipo.slug',
'tipo.nome'
)->join('pedido_venda_has_produto AS pvhp','pedido_venda.id','=','pvhp.id_pedido_venda')
->join('produto AS p','p.id','=','pvhp.id_produto')
->join('tipo_de_produto AS tipo','tipo.id','=','p.id_tipo_produto')
->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
->where('pedido_venda.frete', 0)
->where('pedido_venda.id_cliente', $id_cliente)
->groupBy('tipo.slug')
->orderby('total_venda','desc');
$vendas = $query->get();
foreach ($vendas as $venda) {
$labels[] = $venda->nome;
$percentual = $total_pedidos_venda != 0 ? ($venda->total_venda * 100) / $total_pedidos_venda : 0;
$dataset[] = number_format($percentual,0,'.','');
}
$data['labels'] = $labels;
$data['dataset'] = $dataset;
return $data;
}
public static function totalVendasPaisProduto($id_cliente, $total_pedidos_venda){
$data = [];
$labels = [];
$dataset = [];
$query = PedidoVenda::select(
DB::raw('SUM(pvhp.valor_total) total_venda'),
'pais.sigla',
'pais.nome'
)->join('pedido_venda_has_produto AS pvhp','pedido_venda.id','=','pvhp.id_pedido_venda')
->join('produto AS p','p.id','=','pvhp.id_produto')
->join('pais','pais.id','=','p.id_pais_origem')
->whereIn('pedido_venda.id_status_pedido_venda', [2,7])
->where('pedido_venda.frete', 0)
->where('pedido_venda.id_cliente', $id_cliente)
->groupBy('pais.sigla')
->orderby('total_venda','desc');
$vendas = $query->get();
foreach ($vendas as $venda) {
$labels[] = $venda->nome;
$percentual = $total_pedidos_venda != 0 ? ($venda->total_venda * 100) / $total_pedidos_venda : 0;
$dataset[] = number_format($percentual,0,'.','');
}
$data['labels'] = $labels;
$data['dataset'] = $dataset;
return $data;
}
public static function quantidadeVendidaDia($datas, $startDay, $lastDay){
try {
$sumCase = [];
foreach ($datas as $key => $data){
$sumCase[] = "SUM(CASE WHEN oferta.data = '{$data}' THEN pedido_venda_has_produto.quantidade ELSE 0 END) AS {$key}";
}
$query = Oferta::select(
DB::raw(implode(",", $sumCase))
)->join('pedido_venda_has_produto','pedido_venda_has_produto.id_oferta','=','oferta.id')
->join('pedido_venda','pedido_venda.id','=','pedido_venda_has_produto.id_pedido_venda')
->whereIn('pedido_venda.id_status_pedido_venda', [1,2,7])
->where('pedido_venda.frete', 0)
->whereBetween('oferta.data', [$startDay, $lastDay])
->where('oferta.tipo', '=', 'D');
$vendas = $query->first()->toArray();
return $vendas;
} catch (Exception $e) {
}
}
public static function buscarProdutosOfertaDia($startDay, $lastDay){
$ofertas = Oferta::whereBetween('data', [$startDay, $lastDay])->where('tipo', 'D')->with('produtos.produto')->get();
$produtos = [];
foreach ($ofertas as $oferta) {
$key = str_replace("-", "_", $oferta->data);
for($i=0;$i<count($oferta->produtos);$i++){
$produto = $oferta->produtos[$i]->produto;
$produtos[$key][] = $produto->sku;
}
}
return $produtos;
}
public static function entregaOfertaDia($datas, $startDay, $lastDay){
try {
$produtos = DashService::buscarProdutosOfertaDia($startDay, $lastDay);
$sumCase = [];
foreach ($datas as $key => $data){
$conditionCase = '';
if(isset($produtos[$key])){
$conditionCase = " AND produto.sku IN ('" . implode("','", $produtos[$key]) . "')";
}
$sumCase[] = "SUM(CASE WHEN pedido_entrega.data_solicitacao BETWEEN '{$data} 00:00:00' AND '{$data} 23:59:59' {$conditionCase} THEN pedido_venda_has_produto.quantidade ELSE 0 END) AS {$key}";
}
$query = PedidoEntrega::select(
DB::raw(implode(",", $sumCase))
)
->join('empresa','empresa.id','=','pedido_entrega.empresa_id')
->join('adega','adega.id','=','pedido_entrega.id_adega')
->join('cadastro','cadastro.id','=','adega.id_cliente')
->join('sis_users','sis_users.id','=','cadastro.user_id')
->join('adega_has_pedido_venda','adega_has_pedido_venda.id_adega','=','adega.id')
->join('pedido_venda', function($join)
{
$join->on('pedido_venda.id', '=', 'adega_has_pedido_venda.id_pedido_venda');
$join->on('pedido_venda.id_cliente', '=', 'cadastro.id');
})
->join('pedido_venda_status','pedido_venda_status.id','=','pedido_venda.id_status_pedido_venda')
->join('pedido_venda_has_produto','pedido_venda_has_produto.id_pedido_venda','=','pedido_venda.id')
->join('produto','produto.id','=','pedido_venda_has_produto.id_produto')
->whereBetween('pedido_entrega.data_solicitacao', [$startDay, $lastDay])
->where('pedido_entrega.id_pedido_entrega_status', '<>', 7);
$entregas = $query->first()->toArray();
return $entregas;
} catch (Exception $e) {
}
}
public static function entregasSolicitadasDia($datas, $startDay, $lastDay){
try {
$sumCase = [];
foreach ($datas as $key => $data){
$sumCase[] = "SUM(CASE WHEN pedido_entrega.data_solicitacao BETWEEN '{$data} 00:00:00' AND '{$data} 23:59:59' THEN pedido_venda_has_produto.quantidade ELSE 0 END) AS {$key}";
}
$query = PedidoEntrega::select(
DB::raw(implode(",", $sumCase))
)
->join('empresa','empresa.id','=','pedido_entrega.empresa_id')
->join('adega','adega.id','=','pedido_entrega.id_adega')
->join('cadastro','cadastro.id','=','adega.id_cliente')
->join('sis_users','sis_users.id','=','cadastro.user_id')
->join('adega_has_pedido_venda','adega_has_pedido_venda.id_adega','=','adega.id')
->join('pedido_venda', function($join)
{
$join->on('pedido_venda.id', '=', 'adega_has_pedido_venda.id_pedido_venda');
$join->on('pedido_venda.id_cliente', '=', 'cadastro.id');
})
->join('pedido_venda_status','pedido_venda_status.id','=','pedido_venda.id_status_pedido_venda')
->join('pedido_venda_has_produto','pedido_venda_has_produto.id_pedido_venda','=','pedido_venda.id')
->join('produto','produto.id','=','pedido_venda_has_produto.id_produto')
->whereBetween('pedido_entrega.data_solicitacao', [$startDay, $lastDay])
->where('pedido_entrega.id_pedido_entrega_status', '<>', 7);
$entregas = $query->first()->toArray();
return $entregas;
} catch (Exception $e) {
}
}
public static function statusDashboard($datas, $startDay, $lastDay){
try {
$sumCase = [];
$status = [3,4,5,6,8];
foreach ($datas as $key => $data){
$sumCase[] = "SUM(CASE WHEN pedido_entrega.data_solicitacao BETWEEN '{$data} 00:00:00' AND '{$data} 23:59:59' THEN pedido_venda_has_produto.quantidade ELSE 0 END) AS {$key}";
}
$query = PedidoEntrega::select(
'pedido_entrega_status.id',
DB::raw(implode(",", $sumCase))
)->leftJoin('pedido_entrega_status', 'pedido_entrega_status.id', '=', 'pedido_entrega.id_pedido_entrega_status')
->join('empresa','empresa.id','=','pedido_entrega.empresa_id')
->join('adega','adega.id','=','pedido_entrega.id_adega')
->join('cadastro','cadastro.id','=','adega.id_cliente')
->join('sis_users','sis_users.id','=','cadastro.user_id')
->join('adega_has_pedido_venda','adega_has_pedido_venda.id_adega','=','adega.id')
->join('pedido_venda', function($join)
{
$join->on('pedido_venda.id', '=', 'adega_has_pedido_venda.id_pedido_venda');
$join->on('pedido_venda.id_cliente', '=', 'cadastro.id');
})
->join('pedido_venda_status','pedido_venda_status.id','=','pedido_venda.id_status_pedido_venda')
->join('pedido_venda_has_produto','pedido_venda_has_produto.id_pedido_venda','=','pedido_venda.id')
->join('produto','produto.id','=','pedido_venda_has_produto.id_produto')
->whereBetween('pedido_entrega.data_solicitacao', [$startDay, $lastDay])
->whereIn('pedido_entrega_status.id', $status)
->groupBy('pedido_entrega_status.id');
$listaEntregas = $query->get()->toArray();
$entregas = [];
foreach ($listaEntregas as $entrega) {
$entregas[$entrega['id']] = $entrega;
}
return $entregas;
} catch (Exception $e) {
}
}
}