448 lines
No EOL
17 KiB
PHP
448 lines
No EOL
17 KiB
PHP
<?php
|
|
|
|
/** Importação de classes */
|
|
use vendor\model\Schedules;
|
|
use vendor\model\ProductsCompanies;
|
|
use vendor\model\FinancialMovements;
|
|
|
|
try{
|
|
|
|
/** Verifica se o token de acesso é válido */
|
|
if($Main->verifyToken()){
|
|
|
|
|
|
/** Controles */
|
|
$diasParaVencimento = 5;
|
|
$totalBar = null;
|
|
|
|
/** Instânciamento de classes */
|
|
$Schedules = new Schedules();
|
|
$ProductsCompanies = new ProductsCompanies();
|
|
$FinancialMovements = new FinancialMovements();
|
|
|
|
/** Consulta as saídas pendentes */
|
|
$result = $FinancialMovements->amountOutput();
|
|
|
|
/** Resumos */
|
|
$amountOutput = $result->amount_output; #Quantidade de saídas pendentes
|
|
$totalValueOutput = $result->total_value_output; #Valor total de saídas pendentes
|
|
|
|
|
|
|
|
|
|
|
|
/**************** INICIO ENTRADAS PENDENTES ****************/
|
|
|
|
/** Consulta as entradas pendentes */
|
|
$result = $FinancialMovements->amountEntrie(true, 0);
|
|
|
|
/** Resumos entradas pendentes */
|
|
$amountEntriePendent = $result->amount_entrie; #Quantidade de entradas pendentes
|
|
$totalValueEntriePendent = $result->total_value_entrie+$result->total_value_entrie_fees; #Valor total de entradas pendentes
|
|
|
|
/**************** FIM ENTRADAS PENDENTES ****************/
|
|
|
|
|
|
|
|
|
|
|
|
/**************** INICIO ENTRADAS PAGAS ****************/
|
|
|
|
/** Consulta as entradas pagas */
|
|
$result = $FinancialMovements->amountEntrie(false, 0);
|
|
|
|
/** Resumos entradas pagas */
|
|
$amountEntrieConfirmed = $result->amount_entrie; #Quantidade de entradas pagas
|
|
$totalValueEntrieConfirmed = $result->total_value_entrie+$result->total_value_entrie_fees; #Valor total de entradas pagas
|
|
|
|
/**************** FIM ENTRADAS PAGAS ****************/
|
|
|
|
|
|
|
|
|
|
/**************** INICIO VERIFICA ENTRADAS EM ATRASO NOS PRÓXIMOS 5 DIAS ****************/
|
|
|
|
/** Consulta as entradas em atraso */
|
|
$result = $FinancialMovements->amountEntrie(true, $diasParaVencimento);
|
|
|
|
/** Resumos entradas em atraso */
|
|
$amountEntrieDelay = $result->amount_entrie; #Quantidade de entradas em atraso
|
|
$totalValueEntrieDelay = $result->total_value_entrie+$result->total_value_entrie_fees; #Valor total de entradas em atraso
|
|
|
|
/**************** INICIO VERIFICA ENTRADAS EM ATRASO NOS PRÓXIMOS 5 DIAS ****************/
|
|
|
|
|
|
|
|
|
|
/** Consulta se existem agendamento sem baixa */
|
|
$SchedulesResult = $Schedules->LowPending();
|
|
|
|
|
|
|
|
|
|
/**************** INICIO GRAFICO ÁREA ENTRADAS ****************/
|
|
|
|
/** Controles */
|
|
$months = [ '01' => 'Jan',
|
|
'02' => 'Fev',
|
|
'03' => 'Mar',
|
|
'04' => 'Abr',
|
|
'05' => 'Mai',
|
|
'06' => 'Jun',
|
|
'07' => 'Jul',
|
|
'08' => 'Ago',
|
|
'09' => 'Set',
|
|
'10' => 'Out',
|
|
'11' => 'Nov',
|
|
'12' => 'Dez'
|
|
];
|
|
|
|
$queryDate = [];
|
|
|
|
/** Legendas */
|
|
for($i=11; $i>0; $i--){
|
|
|
|
/** Trata a data de acordo com um periodo de um(1) ano */
|
|
array_push($queryDate, mktime(0, 0, 0, (int)date('m')-$i, 1, (int)date('Y')));
|
|
|
|
}
|
|
|
|
/** Trata a data de acordo com um periodo de um(1) ano */
|
|
array_push($queryDate, mktime(0, 0, 0, (int)date('m'), (int)date('d'), (int)date('Y')));
|
|
|
|
$chartAreaEntrie = new stdClass();
|
|
|
|
foreach($queryDate as $value){
|
|
|
|
$result = $FinancialMovements->searchDateEntrie(date('Y',$value).'-'.date('m',$value).'-01', date('Y', $value).'-'.date('m', $value).'-'.date('t', $value));
|
|
|
|
$chartAreaEntrie->label[] = $months[date('m', $value)].'/'.date('Y', $value);
|
|
$chartAreaEntrie->value[] = isset($result->total_paid) ? $result->total_paid : '0.00';
|
|
|
|
/** Contabiliza o total */
|
|
$totalBar += isset($result->total_paid) ? $result->total_paid : '0';
|
|
}
|
|
|
|
/**************** FIM GRAFICO ÁREA ENTRADAS ****************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**************** INICIO GRAFICO DONUT ENTRADAS ****************/
|
|
|
|
/** Periodo de consulta */
|
|
$startDate = date('Y-m-d', mktime(0, 0, 0, (int)date('m')-11, 1, (int)date('Y')));
|
|
$endDate = date('Y-m-d');
|
|
|
|
/** Consulta as entradas de uma empresa pelas categorias */
|
|
$FinancialMovementsResult = $FinancialMovements->searchEntriesCategories($startDate, $endDate);
|
|
|
|
/** Controles */
|
|
$items = [];
|
|
$newItems = [];
|
|
|
|
/** Prepara o retorno a ser apresentado */
|
|
foreach($FinancialMovementsResult as $FinancialMovementsKey => $Result){
|
|
|
|
array_push($items, [
|
|
"entriesId"=>$Result->financial_entries_id,
|
|
"categorieId"=>$Result->financial_categories_id,
|
|
"categorieDescription"=>$Result->categorie,
|
|
"total"=>$Result->total
|
|
]);
|
|
}
|
|
|
|
/** Separa as categorias com seus respectivos totais */
|
|
for($i=0; $i<count($items); $i++){
|
|
|
|
if( in_array($items[$i]['categorieDescription'], $newItems) ){
|
|
|
|
$newItems[$items[$i]['categorieDescription']] += $items[$i]['total'];
|
|
|
|
}else{
|
|
|
|
$newItems[$items[$i]['categorieDescription']] += $items[$i]['total'];
|
|
}
|
|
|
|
}
|
|
|
|
/** Carrega os labels */
|
|
$labels = array_keys($newItems);
|
|
|
|
/** carreg os totais */
|
|
$totals = array_values($newItems);
|
|
|
|
|
|
/**************** FIM GRAFICO DONUT ENTRADAS ****************/
|
|
|
|
|
|
|
|
/** Meses do ano */
|
|
$month = ['01' => 'janeiro',
|
|
'02' => 'fevereiro',
|
|
'03' => 'março',
|
|
'04' => 'abril',
|
|
'05' => 'maio',
|
|
'06' => 'junho',
|
|
'07' => 'julho',
|
|
'08' => 'agosto',
|
|
'09' => 'setembro',
|
|
'10' => 'outubro',
|
|
'11' => 'novembro',
|
|
'12' => 'dezembro'
|
|
];
|
|
|
|
?>
|
|
|
|
<div class="col-lg-12">
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-xl-3 col-md-6 mb-4">
|
|
<div class="card border-left-primary shadow h-100 py-2">
|
|
<div class="card-body">
|
|
<div class="row no-gutters align-items-center">
|
|
<div class="col mr-2">
|
|
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
|
|
(<?php echo $amountEntriePendent;?>) Entradas pendentes</div>
|
|
<div class="h5 mb-0 font-weight-bold text-primary-800">R$ <?php echo number_format($totalValueEntriePendent, 2, ',', '.');?></div>
|
|
</div>
|
|
<div class="col-auto">
|
|
<i class="fas fa-dollar-sign fa-2x text-gray-400"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="col-xl-3 col-md-6 mb-4">
|
|
<div class="card border-left-success shadow h-100 py-2">
|
|
<div class="card-body">
|
|
<div class="row no-gutters align-items-center">
|
|
<div class="col mr-2">
|
|
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
|
|
(<?php echo $amountEntrieConfirmed;?>) Entradas confirmadas</div>
|
|
<div class="h5 mb-0 font-weight-bold text-success-800">R$ <?php echo number_format($totalValueEntrieConfirmed, 2, ',', '.');?></div>
|
|
</div>
|
|
<div class="col-auto">
|
|
<i class="fas fa-dollar-sign fa-2x text-gray-400"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="col-xl-3 col-md-6 mb-4">
|
|
<div class="card border-left-danger shadow h-100 py-2">
|
|
<div class="card-body">
|
|
<div class="row no-gutters align-items-center">
|
|
<div class="col mr-2">
|
|
<div class="text-xs font-weight-bold text-danger text-uppercase mb-1">
|
|
(<?php echo $amountEntrieDelay;?>) Entradas a vencer nos próximos <?php echo $diasParaVencimento;?> dias
|
|
</div>
|
|
<div class="h5 mb-0 font-weight-bold text-gray-600">
|
|
R$ <?php echo number_format($totalValueEntrieDelay, 2, ',', '.');?>
|
|
</div>
|
|
</div>
|
|
<div class="col-auto">
|
|
<i class="fas fa-dollar-sign fa-2x text-gray-400"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-xl-3 col-md-6 mb-4">
|
|
<div class="card border-left-primary shadow h-100 py-2">
|
|
<div class="card-body">
|
|
<div class="row no-gutters align-items-center">
|
|
<div class="col mr-2">
|
|
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
|
|
Agenda</div>
|
|
<div class="h5 mb-0 font-weight-bold text-gray-600">Existem <?php echo $SchedulesResult->qtde;?> agendamento(s) sem finalização</div>
|
|
</div>
|
|
<div class="col-auto">
|
|
<i class="fas fa-calendar fa-2x text-gray-400"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
|
<div class="col-xl-6 col-lg-7">
|
|
|
|
<!-- Area Chart -->
|
|
<div class="card shadow mb-4">
|
|
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">Projeção entradas(anual)</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="chart-area">
|
|
<canvas id="myAreaChart"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<!-- Bar Chart -->
|
|
<div class="col-xl-6 col-lg-7">
|
|
<div class="card shadow mb-4">
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">Projeção entradas(anual)</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="chart-bar">
|
|
<canvas id="myBarChart"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row">
|
|
|
|
<!-- Donut Chart -->
|
|
<div class="col-xl-6 col-lg-7">
|
|
|
|
<div class="card shadow mb-4">
|
|
|
|
<!-- Card Header - Dropdown -->
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">Serviços realizados(anual)</h6>
|
|
</div>
|
|
<!-- Card Body -->
|
|
<div class="card-body">
|
|
<div class="chart-pie p-4">
|
|
<canvas id="myPieChart"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="col-xl-6 col-lg-7">
|
|
|
|
<div class="card shadow mb-4">
|
|
|
|
<?php
|
|
/** Retorna a quantidade de itens */
|
|
$numberRecords = $FinancialMovements->OutputsNotPaidCount();
|
|
|
|
?>
|
|
|
|
<!-- Card Header - Dropdown -->
|
|
<div class="card-header py-3">
|
|
<h6 class="m-0 font-weight-bold text-primary">(<?php echo $numberRecords;?>)Saídas a vencer nos próximos dias 7 dias</h6>
|
|
</div>
|
|
<!-- Card Body -->
|
|
<div class="card-body">
|
|
|
|
<div class="overflow-auto p-2" style="height: 277px;">
|
|
|
|
<table class="table table-bordered table-striped table-hover bg-white rounded shadow-sm table-sm">
|
|
|
|
<thead>
|
|
<tr>
|
|
<th class="text-center">Descrição</th>
|
|
<th class="text-center">Venc.</th>
|
|
<th class="text-center">Valor R$</th>
|
|
<th class="text-center"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<?php
|
|
|
|
/** Consulta os clientes que estão no mês do reajuste */
|
|
if($FinancialMovements->OutputsNotPaidCount() > 0){
|
|
|
|
/** Consulta os registros */
|
|
$ProductsCompaniesResult = $FinancialMovements->OutputsNotPaidAll();
|
|
|
|
foreach($ProductsCompaniesResult as $ProductsCompaniesKey => $Result){
|
|
?>
|
|
|
|
<tr>
|
|
<td><?php echo $Result->output;?></td>
|
|
<td class="text-center" width="30"><?php echo date('d/m/Y', strtotime($Result->movement_date_scheduled));?></td>
|
|
<td class="text-right"><?php echo number_format($Result->movement_value, 2, ',', '.');?></td>
|
|
<td class="text-center" width="20"><button type="button" class="btn btn-light btn-sm" onclick="request('FOLDER=view&TABLE=clients&ACTION=clients_form&company_id=<?php echo $Result->company_id;?>', '#loadContent', true, '', '', '', 'Preparando formulário', 'blue', 'circle', 'sm', true)" data-toggle="tooltip" data-placement="left" title="Editar dados do cliente"><i class="far fa-edit"></i></button></td>
|
|
</tr>
|
|
|
|
|
|
<?php } } ?>
|
|
|
|
<tbody>
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
|
|
/** Operações ao carregar a página */
|
|
$(document).ready(function(e) {
|
|
|
|
chartAreaentries(<?php echo json_encode($chartAreaEntrie->label)?>, <?php echo json_encode($chartAreaEntrie->value)?>);
|
|
chartPieentries(<?php echo json_encode($labels);?>, <?php echo json_encode($totals);?>);
|
|
chartBarentries(<?php echo json_encode($chartAreaEntrie->label)?>, <?php echo json_encode($chartAreaEntrie->value)?>, <?php echo array_sum($chartAreaEntrie->value);?>);
|
|
|
|
|
|
})
|
|
|
|
</script>
|
|
<?php
|
|
|
|
/** Caso o token de acesso seja inválido, informo */
|
|
}else{
|
|
|
|
/** Informa que o usuário precisa efetuar autenticação junto ao sistema */
|
|
$authenticate = true;
|
|
|
|
/** Informo */
|
|
throw new InvalidArgumentException('Sua sessão expirou é necessário efetuar nova autenticação junto ao sistema', 0);
|
|
}
|
|
|
|
}catch(Exception $exception){
|
|
|
|
/** Preparo o formulario para retorno **/
|
|
$result = [
|
|
|
|
'cod' => 0,
|
|
'message' => $exception->getMessage(),
|
|
'title' => 'Erro Interno',
|
|
'type' => 'exception',
|
|
'authenticate' => $authenticate
|
|
|
|
];
|
|
|
|
/** Envio **/
|
|
echo json_encode($result);
|
|
|
|
/** Paro o procedimento **/
|
|
exit;
|
|
}
|