|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
|
|
namespace App\Services;
|
|
namespace App\Services;
|
|
|
|
|
|
|
|
|
|
+use App\Models\FranchiseeAccountReceive;
|
|
|
use App\Models\StudentContractInstallment;
|
|
use App\Models\StudentContractInstallment;
|
|
|
use App\Models\UnitAccountPayable;
|
|
use App\Models\UnitAccountPayable;
|
|
|
use App\Models\UnitAccountReceivable;
|
|
use App\Models\UnitAccountReceivable;
|
|
@@ -9,7 +10,8 @@
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Visão geral financeira da unidade: agrega Contas a Receber (parcelas de aluno
|
|
* Visão geral financeira da unidade: agrega Contas a Receber (parcelas de aluno
|
|
|
- * + recebíveis avulsos manuais) e Contas a Pagar (unit_account_payables, que já
|
|
|
|
|
|
|
+ * + recebíveis avulsos manuais + contas que a franqueadora vinculou à unidade,
|
|
|
|
|
+ * ligadas ou não ao Asaas) e Contas a Pagar (unit_account_payables, que já
|
|
|
* inclui os lançamentos manuais) do mês corrente.
|
|
* inclui os lançamentos manuais) do mês corrente.
|
|
|
*/
|
|
*/
|
|
|
class UnitFinancialDashboardService
|
|
class UnitFinancialDashboardService
|
|
@@ -34,6 +36,19 @@ public function overview(int $unitId): array
|
|
|
$manOverdueQ = UnitAccountReceivable::where('unit_id', $unitId)
|
|
$manOverdueQ = UnitAccountReceivable::where('unit_id', $unitId)
|
|
|
->where('status', 'pending')->where('due_date', '<', $today);
|
|
->where('status', 'pending')->where('due_date', '<', $today);
|
|
|
|
|
|
|
|
|
|
+ // Contas que a franqueadora vinculou à unidade (origin=manual_unit) — mesma
|
|
|
|
|
+ // fonte que entra no faturamento do cálculo de TBR (TbrCalculationService).
|
|
|
|
|
+ // Conta independente de ter ou não cobrança Asaas gerada: o cliente reclama
|
|
|
|
|
+ // se faltar aqui, mesmo sem integração.
|
|
|
|
|
+ $linkedPendingQ = FranchiseeAccountReceive::where('unit_id', $unitId)
|
|
|
|
|
+ ->where('origin', 'manual_unit')->where('status', 'pending');
|
|
|
|
|
+ $linkedReceivedQ = FranchiseeAccountReceive::where('unit_id', $unitId)
|
|
|
|
|
+ ->where('origin', 'manual_unit')
|
|
|
|
|
+ ->where('status', 'paid')->whereBetween('payment_date', [$start, $end]);
|
|
|
|
|
+ $linkedOverdueQ = FranchiseeAccountReceive::where('unit_id', $unitId)
|
|
|
|
|
+ ->where('origin', 'manual_unit')
|
|
|
|
|
+ ->where('status', 'pending')->where('due_date', '<', $today);
|
|
|
|
|
+
|
|
|
// Pagáveis (unit_account_payables já inclui os manuais, origin='manual')
|
|
// Pagáveis (unit_account_payables já inclui os manuais, origin='manual')
|
|
|
$payPendingQ = UnitAccountPayable::where('unit_id', $unitId)->where('status', 'pending');
|
|
$payPendingQ = UnitAccountPayable::where('unit_id', $unitId)->where('status', 'pending');
|
|
|
$payPaidQ = UnitAccountPayable::where('unit_id', $unitId)
|
|
$payPaidQ = UnitAccountPayable::where('unit_id', $unitId)
|
|
@@ -42,28 +57,34 @@ public function overview(int $unitId): array
|
|
|
->where('status', 'pending')->where('due_date', '<', $today);
|
|
->where('status', 'pending')->where('due_date', '<', $today);
|
|
|
|
|
|
|
|
$receivedMonth = (float) (clone $recReceivedQ)->sum('paid_value')
|
|
$receivedMonth = (float) (clone $recReceivedQ)->sum('paid_value')
|
|
|
- + (float) (clone $manReceivedQ)->sum('paid_value');
|
|
|
|
|
|
|
+ + (float) (clone $manReceivedQ)->sum('paid_value')
|
|
|
|
|
+ + (float) (clone $linkedReceivedQ)->sum('paid_value');
|
|
|
$paidMonth = (float) (clone $payPaidQ)->sum('paid_value');
|
|
$paidMonth = (float) (clone $payPaidQ)->sum('paid_value');
|
|
|
|
|
|
|
|
$receivablePending = (float) (clone $recPendingQ)->sum('value')
|
|
$receivablePending = (float) (clone $recPendingQ)->sum('value')
|
|
|
- + (float) (clone $manPendingQ)->sum('value');
|
|
|
|
|
|
|
+ + (float) (clone $manPendingQ)->sum('value')
|
|
|
|
|
+ + (float) (clone $linkedPendingQ)->sum('value');
|
|
|
$overdueReceivable = (float) (clone $recOverdueQ)->sum('value')
|
|
$overdueReceivable = (float) (clone $recOverdueQ)->sum('value')
|
|
|
- + (float) (clone $manOverdueQ)->sum('value');
|
|
|
|
|
|
|
+ + (float) (clone $manOverdueQ)->sum('value')
|
|
|
|
|
+ + (float) (clone $linkedOverdueQ)->sum('value');
|
|
|
|
|
|
|
|
return [
|
|
return [
|
|
|
'received_month' => round($receivedMonth, 2),
|
|
'received_month' => round($receivedMonth, 2),
|
|
|
- 'received_month_count' => (clone $recReceivedQ)->count() + (clone $manReceivedQ)->count(),
|
|
|
|
|
|
|
+ 'received_month_count' => (clone $recReceivedQ)->count() + (clone $manReceivedQ)->count()
|
|
|
|
|
+ + (clone $linkedReceivedQ)->count(),
|
|
|
'paid_month' => round($paidMonth, 2),
|
|
'paid_month' => round($paidMonth, 2),
|
|
|
'paid_month_count' => (clone $payPaidQ)->count(),
|
|
'paid_month_count' => (clone $payPaidQ)->count(),
|
|
|
'result_month' => round($receivedMonth - $paidMonth, 2),
|
|
'result_month' => round($receivedMonth - $paidMonth, 2),
|
|
|
|
|
|
|
|
'receivable_pending' => round($receivablePending, 2),
|
|
'receivable_pending' => round($receivablePending, 2),
|
|
|
- 'receivable_pending_count' => (clone $recPendingQ)->count() + (clone $manPendingQ)->count(),
|
|
|
|
|
|
|
+ 'receivable_pending_count' => (clone $recPendingQ)->count() + (clone $manPendingQ)->count()
|
|
|
|
|
+ + (clone $linkedPendingQ)->count(),
|
|
|
'payable_pending' => round((float) (clone $payPendingQ)->sum('value'), 2),
|
|
'payable_pending' => round((float) (clone $payPendingQ)->sum('value'), 2),
|
|
|
'payable_pending_count' => (clone $payPendingQ)->count(),
|
|
'payable_pending_count' => (clone $payPendingQ)->count(),
|
|
|
|
|
|
|
|
'overdue_receivable' => round($overdueReceivable, 2),
|
|
'overdue_receivable' => round($overdueReceivable, 2),
|
|
|
- 'overdue_receivable_count' => (clone $recOverdueQ)->count() + (clone $manOverdueQ)->count(),
|
|
|
|
|
|
|
+ 'overdue_receivable_count' => (clone $recOverdueQ)->count() + (clone $manOverdueQ)->count()
|
|
|
|
|
+ + (clone $linkedOverdueQ)->count(),
|
|
|
'overdue_payable' => round((float) (clone $payOverdueQ)->sum('value'), 2),
|
|
'overdue_payable' => round((float) (clone $payOverdueQ)->sum('value'), 2),
|
|
|
'overdue_payable_count' => (clone $payOverdueQ)->count(),
|
|
'overdue_payable_count' => (clone $payOverdueQ)->count(),
|
|
|
];
|
|
];
|