From 722151c4bf5fc8dca6265dc32715c2cb027f0466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Subiabre=20Garc=C3=ADa?= Date: Thu, 17 Oct 2024 12:36:56 +0200 Subject: [PATCH] [feature] project report updates (#621) * Fix code formatting * Add incomes table to project report * Add relevant associated ids to project report * Rename project num id to tracking number --- .../default/admin/projects/report.php | 8 +- .../templates/legacy/project/report.html.php | 305 +++++++++--------- .../legacy/project/report_table.html.php | 99 ++++++ .../Admin/ProjectsSubController.php | 2 + translations/ca/dashboard.yml | 2 +- translations/es/dashboard.yml | 2 +- 6 files changed, 266 insertions(+), 152 deletions(-) create mode 100644 Resources/templates/legacy/project/report_table.html.php diff --git a/Resources/templates/default/admin/projects/report.php b/Resources/templates/default/admin/projects/report.php index 52e23f1984..e3d43a5d53 100644 --- a/Resources/templates/default/admin/projects/report.php +++ b/Resources/templates/default/admin/projects/report.php @@ -2,7 +2,13 @@ section('admin-project-content') ?> - $this->project, 'account' => $this->account, 'Data' => $this->data, 'admin'=>true)) ?> + $this->project, + 'account' => $this->account, + 'contract' => $this->contract, + 'Data' => $this->data, + 'admin' => true +]) ?> replace() ?> diff --git a/Resources/templates/legacy/project/report.html.php b/Resources/templates/legacy/project/report.html.php index 78a50aef92..1f161ad662 100644 --- a/Resources/templates/legacy/project/report.html.php +++ b/Resources/templates/legacy/project/report.html.php @@ -1,33 +1,33 @@ vat) -{ - $account->vat=21; +if (!$account->vat) { + $account->vat = 21; } -$matchers=$project->getMatchers('active'); +$matchers = $project->getMatchers('active'); // prepare base to apply the vat -$var_percentage_applied=$account->tax_base_percentage ? $account->tax_base_percentage/100 : '0.5'; +$var_percentage_applied = $account->tax_base_percentage ? $account->tax_base_percentage / 100 : '0.5'; -$sumData['match_goteo']=0; -$matchfunding_invest=0; +$sumData['match_goteo'] = 0; +$matchfunding_invest = 0; $matchers_amounts = []; if ($matchers) { - foreach($matchers as $matcher){ + foreach ($matchers as $matcher) { $matchers_amounts[$matcher->id] = Invest::getList([ 'projects' => $project->id, 'users' => $matcher->owner, @@ -35,13 +35,13 @@ 'status' => Invest::$ACTIVE_STATUSES ], null, 0, 0, 'money'); - $matchfunding_invest+= $matchers_amounts[$matcher->id]; - $matcher_fee=round($matcher->fee / 100, 2); + $matchfunding_invest += $matchers_amounts[$matcher->id]; + $matcher_fee = round($matcher->fee / 100, 2); $matched_fee = ($matchers_amounts[$matcher->id] * $matcher_fee); - $sumData['match_goteo']+= $matched_fee; + $sumData['match_goteo'] += $matched_fee; } //Aplicamos el IVA al 50% de la comision de Goteo - $sumData['match_goteo']+=(( $sumData['match_goteo']*$var_percentage_applied)*($account->vat/100)); + $sumData['match_goteo'] += (($sumData['match_goteo'] * $var_percentage_applied) * ($account->vat / 100)); } $called = $project->called; @@ -56,7 +56,7 @@ $admin = (isset($vars['admin']) && $vars['admin'] === true) ? true : false; //restamos a los aportes recibios de monedero lo correspondiente a matchers -$Data['pool']['total']['amount']=$Data['pool']['total']['amount']-$matchfunding_invest; +$Data['pool']['total']['amount'] = $Data['pool']['total']['amount'] - $matchfunding_invest; $total_issues = 0; foreach ($Data['issues'] as $issue) { @@ -68,7 +68,9 @@ $cName = "P-{$cNum}-{$cDate}"; ?>

Informe de financiación del proyecto
name) ?>

@@ -81,44 +83,45 @@ $sumData['fail'] = $total_issues; // $sumData['shown'] = $sumData['total'] + $sumData['fail'] + $sumData['drop'] + $sumData['pool'] + $sumData['ghost']; $sumData['shown'] = Invest::getList(['projects' => $project->id, 'status' => - [Invest::STATUS_PENDING, - Invest::STATUS_CHARGED, - Invest::STATUS_CANCELLED, - Invest::STATUS_TO_POOL, - Invest::STATUS_PAID - ]], null, 0, 0, 'money'); + [ + Invest::STATUS_PENDING, + Invest::STATUS_CHARGED, + Invest::STATUS_CANCELLED, + Invest::STATUS_TO_POOL, + Invest::STATUS_PAID + ]], null, 0, 0, 'money'); $sumData['cancelled'] = Invest::getList(['projects' => $project->id, 'status' => [Invest::STATUS_CANCELLED, Invest::STATUS_TO_POOL]], null, 0, 0, 'money'); $sumData['tpv_fee_goteo'] = $Data['tpv']['total']['amount'] * 0.008; $sumData['cash_goteo'] = $Data['cash']['total']['amount'] * $GOTEO_FEE; //Aplicamos el IVA al 50% de la comision de Goteo - $sumData['cash_goteo']=(($sumData['cash_goteo']*$var_percentage_applied)*($account->vat/100))+$sumData['cash_goteo']; + $sumData['cash_goteo'] = (($sumData['cash_goteo'] * $var_percentage_applied) * ($account->vat / 100)) + $sumData['cash_goteo']; $sumData['tpv_goteo'] = $Data['tpv']['total']['amount'] * $GOTEO_FEE; //Aplicamos el IVA al 50% de la comision de Goteo - $sumData['tpv_goteo']=(($sumData['tpv_goteo']*$var_percentage_applied)*($account->vat/100))+$sumData['tpv_goteo']; + $sumData['tpv_goteo'] = (($sumData['tpv_goteo'] * $var_percentage_applied) * ($account->vat / 100)) + $sumData['tpv_goteo']; $sumData['pp_goteo'] = $Data['paypal']['total']['amount'] * $GOTEO_FEE; //Aplicamos el IVA al 50% de la comision de Goteo - $sumData['pp_goteo']=(($sumData['pp_goteo']*$var_percentage_applied)*($account->vat/100))+$sumData['pp_goteo']; + $sumData['pp_goteo'] = (($sumData['pp_goteo'] * $var_percentage_applied) * ($account->vat / 100)) + $sumData['pp_goteo']; $sumData['drop_goteo'] = $Data['drop']['total']['amount'] * $CALL_FEE; //Aplicamos el IVA al 50% de la comision de Goteo - $sumData['drop_goteo']=(($sumData['drop_goteo']*$var_percentage_applied)*($account->vat/100))+$sumData['drop_goteo']; + $sumData['drop_goteo'] = (($sumData['drop_goteo'] * $var_percentage_applied) * ($account->vat / 100)) + $sumData['drop_goteo']; $sumData['pool_goteo'] = $Data['pool']['total']['amount'] * $GOTEO_FEE; //Aplicamos el IVA al 50% de la comision de Goteo - $sumData['pool_goteo']=(($sumData['pool_goteo']*$var_percentage_applied)*($account->vat/100))+$sumData['pool_goteo']; + $sumData['pool_goteo'] = (($sumData['pool_goteo'] * $var_percentage_applied) * ($account->vat / 100)) + $sumData['pool_goteo']; $sumData['ghost_goteo'] = $Data['ghost']['total']['amount'] * $GOTEO_FEE; //Aplicamos el IVA - $sumData['ghost_goteo']=(($sumData['ghost_goteo']*$var_percentage_applied)*($account->vat/100))+$sumData['ghost_goteo']; + $sumData['ghost_goteo'] = (($sumData['ghost_goteo'] * $var_percentage_applied) * ($account->vat / 100)) + $sumData['ghost_goteo']; $sumData['pp_project'] = $Data['paypal']['total']['amount'] - $sumData['pp_goteo']; $sumData['pp_fee_goteo'] = ($Data['paypal']['total']['invests'] * 0.35) + ($Data['paypal']['total']['amount'] * 0.034); @@ -126,36 +129,36 @@ $sumData['pp_fee_project'] = ($Data['paypal']['total']['invests'] * 0.35) + ($sumData['pp_project'] * 0.034); $sumData['pp_net_project'] = $sumData['pp_project'] - $sumData['pp_fee_project']; $sumData['fee_goteo'] = $sumData['tpv_fee_goteo'] + $sumData['pp_fee_goteo']; - $sumData['goteo'] = $sumData['cash_goteo'] + $sumData['tpv_goteo'] + $sumData['pp_goteo'] + $sumData['drop_goteo'] + $sumData['pool_goteo'] + $sumData['ghost_goteo'] +$sumData['match_goteo']; // si que se descuenta la comisión sobre capital riego + $sumData['goteo'] = $sumData['cash_goteo'] + $sumData['tpv_goteo'] + $sumData['pp_goteo'] + $sumData['drop_goteo'] + $sumData['pool_goteo'] + $sumData['ghost_goteo'] + $sumData['match_goteo']; // si que se descuenta la comisión sobre capital riego // round to 2 decimal - $sumData['fee_goteo']=round($sumData['fee_goteo'],2); - $sumData['goteo']=round($sumData['goteo'],2); + $sumData['fee_goteo'] = round($sumData['fee_goteo'], 2); + $sumData['goteo'] = round($sumData['goteo'], 2); $sumData['total_fee_project'] = $sumData['fee_goteo'] + $sumData['goteo']; // este es el importe de la factura $sumData['project'] = $sumData['total'] - $sumData['fee_goteo'] - $sumData['goteo']; ?> -

- one_round) ? ' (y única)' : ''; - if (!empty($project->passed)) { - echo 'El proyecto terminó la primera'.$unique.' ronda el día '.date('d/m/Y', strtotime($project->passed)).'.
'; - } else { - echo 'El proyecto terminará la primera'.$unique.' ronda el día '.date('d/m/Y', strtotime($project->willpass)).'.
'; - } ?> - - one_round && !empty($project->success)) { - echo 'El proyecto terminó la segunda ronda el día '.date('d/m/Y', strtotime($project->success)).'.'; - } elseif (empty($project->success)) { - echo 'El proyecto terminará la segunda ronda el día '.date('d/m/Y', strtotime($project->willfinish)).'.
'; - } ?> -
-
- Envío correo electrónico user->email; ?> -

-
+

+ one_round) ? ' (y única)' : ''; + if (!empty($project->passed)) { + echo 'El proyecto terminó la primera' . $unique . ' ronda el día ' . date('d/m/Y', strtotime($project->passed)) . '.
'; + } else { + echo 'El proyecto terminará la primera' . $unique . ' ronda el día ' . date('d/m/Y', strtotime($project->willpass)) . '.
'; + } ?> + + one_round && !empty($project->success)) { + echo 'El proyecto terminó la segunda ronda el día ' . date('d/m/Y', strtotime($project->success)) . '.'; + } elseif (empty($project->success)) { + echo 'El proyecto terminará la segunda ronda el día ' . date('d/m/Y', strtotime($project->willfinish)) . '.
'; + } ?> +
+
+ Envío correo electrónico user->email; ?> +

+
@@ -163,45 +166,46 @@ +
     (Puede que no se haya llegado nunca a esta cifra si han devuelto aportes antes del cierre de campaña) + - - - + + + - - - + + + - - + + - - - + + +
-    Máximo mostrado en el termómetro de Goteo.org al cerrar la campaña (success) ? date('d/m/Y', strtotime($project->success)) : 'fecha'; ?>): -
     (Puede que no se haya llegado nunca a esta cifra si han devuelto aportes antes del cierre de campaña)
-    Aportes cancelados manualmente desde el admin o devueltos al monedero del usuario: -
-    Incidencias (Usuarios/as que no tienen fondos en su cuenta, tarjetas desactualizadas, cancelaciones, reembolsos...) : (* ver listado más abajo)
-    Incidencias (Usuarios/as que no tienen fondos en su cuenta, tarjetas desactualizadas, cancelaciones, reembolsos...) : (* ver listado más abajo)
-    Total recaudado: (importe de las ayudas monetarias recibidas)
-    Total Capital Riego: (Transferencia del convocador 'called->user->name ?>' directamente al impulsor)
-    Total Capital Riego: (Transferencia del convocador 'called->user->name ?>' directamente al impulsor)
-    Riego obtenido del Canal name ?>: id]) ?> (A transferir de forma directa)
- Comisión matcher: fee.'%' ?> + Comisión matcher: fee . '%' ?>
-    Otro recibido: (Aporte manual sin ingreso bancario)
-    Otro recibido: (Aporte manual sin ingreso bancario)
-
+
@@ -211,34 +215,37 @@ - - - - + - +
-    Comisiones cobradas a Goteo por cada transferencia de tarjeta (0,8%) y PayPal (3,4% + 0,35 por transacción/usuario/a): total
-    Comisión del fee; ?>% de Goteo.org vat ? '(Incluye un '.$account->vat.'% de IVA para el '. $account->tax_base_percentage .'% de la cantidad)' : '' ?>: - called): ?> -
     (fee_projects_drop .'%)' ?> +
-    Comisión del fee; ?>% de Goteo.org vat ? '(Incluye un ' . $account->vat . '% de IVA para el ' . $account->tax_base_percentage . '% de la cantidad)' : '' ?>: + called): ?> +
     (fee_projects_drop . '%)' ?> - -
     () + +
     ()
Por el total de estas comisiones la Fundación Goteo ha emitido la factura [Número de factura] por importe de , a nombre de la persona o entidad que firma el contratoPor el total de estas comisiones la Fundación Goteo ha emitido la factura [Número de factura] por importe de , a nombre de la persona o entidad que firma el contrato
-
+
- + @@ -247,7 +254,7 @@
3) Transferencias de la Fundación Goteo (Goteo.org) a los/as impulsores/as3) Transferencias de la Fundación Goteo (Goteo.org) a los/as impulsores/as
-    Envío a través de cuenta bancaria: ()En estas cantidades ya se ha descontado el importe de la factura [Número de factura] por importe de
-
+
@@ -255,74 +262,74 @@
- - - - - - - - - - - - - - -
Desglose informativo de lo pagado mediante PayPal
- Cantidad transferida:
- Comisión aproximada cobrada al impulor:
- Cantidad aproximada recibida por el impulsor:
-
- - - -
- - - - - - - -
* Listado de usuarios/as con incidencias en su cuenta PayPal.
Estos son los aportes con problemas en payPal que no se han conseguido cobrar y se han cancelado.
- -
- - status == 1) ? ' style="color: red !important;"' : ''; + +
+
+ + + + + + + + + +
Números de seguimiento relevantes
- Número de contrato: Pnumber ?>
- Número de seguimiento: getNumericId() ?>
+
+ +
+ + + +
+ + + + + + + +
* Listado de usuarios/as con incidencias en su cuenta PayPal.
Estos son los aportes con problemas en payPal que no se han conseguido cobrar y se han cancelado.
+ +
+ + status == 1) ? ' style="color: red !important;"' : ''; ?> - - - - - >Usuario/a userName; ?>, statusName; ?>, amount . ' ss.'; if (!empty($warst)) echo ' (Aporte: '.$issue->invest.')';?> - - - -
invest.'" target="_blank"'.$warst.'>[Ir al aporte] Usuario ' . $issue->userName . ' ['.$issue->userEmail.'], ' . $issue->statusName . ', ' . $issue->amount . ' euros.'; if (!empty($warst)) echo ' (Aporte: '.$issue->invest.')'; ?>
- -
- - - - -
TOTAL (no cobrado):
- - - - - - - - - - - - - - - -
Notas para el admin al generar los datos del informe.
La mayoría harán referencia a las incidencias (o a aportes que no están en el estado que deberían en este punto de la campaña)
-
- - - -
+ + + invest . '" target="_blank"' . $warst . '>[Ir al aporte] Usuario ' . $issue->userName . ' [' . $issue->userEmail . '], ' . $issue->statusName . ', ' . $issue->amount . ' euros.'; + if (!empty($warst)) echo ' (Aporte: ' . $issue->invest . ')'; ?> + + >Usuario/a userName; ?>, statusName; ?>, amount . ' ss.'; + if (!empty($warst)) echo ' (Aporte: ' . $issue->invest . ')'; ?> + + + + + +
+ + + + +
TOTAL (no cobrado):
+ + + + + + + + + + + + + + + +
Notas para el admin al generar los datos del informe.
La mayoría harán referencia a las incidencias (o a aportes que no están en el estado que deberían en este punto de la campaña)
+
+ + \ No newline at end of file diff --git a/Resources/templates/legacy/project/report_table.html.php b/Resources/templates/legacy/project/report_table.html.php new file mode 100644 index 0000000000..5f2e96bdd9 --- /dev/null +++ b/Resources/templates/legacy/project/report_table.html.php @@ -0,0 +1,99 @@ +vat) { + $account->vat = 21; +} + +$projectFee = round($account->fee / 100, 2); + +$tpvTotal = $vars['Data']['tpv']['total']['amount']; +$tpvProjectFee = $tpvTotal * $projectFee; +$tpvProjectVat = $tpvProjectFee * 0.21; +$tpvGatewayFee = $tpvTotal * 0.008; +$tpvGatewayVat = 0; + +$paypalTotal = $vars['Data']['paypal']['total']['amount']; +$paypalProjectFee = $paypalTotal * $projectFee; +$paypalProjectVat = $paypalProjectFee * 0.21; +$paypalGatewayFee = ($paypalTotal * 0.034) + ($vars['Data']['paypal']['total']['invests'] * 0.35); +$paypalGatewayVat = 0; + +$poolTotal = $vars['Data']['pool']['total']['amount']; +$poolProjectFee = $poolTotal * $projectFee; +$poolProjectVat = $poolProjectFee * 0.21; +$poolGatewayFee = $poolTotal * 0.02; +$poolGatewayVat = $poolGatewayFee * 0.21; + +$cashTotal = $vars['Data']['cash']['total']['amount']; +$cashProjectFee = $cashTotal * $projectFee; +$cashProjectVat = $cashProjectFee * 0.21; +$cashGatewayFee = $cashTotal * 0.02; +$cashGatewayVat = $cashGatewayFee * 0.21; + +$totalTotal = $cashTotal + $poolTotal + $paypalTotal + $tpvTotal; +$totalProjectFee = $cashProjectFee + $poolProjectFee + $paypalProjectFee + $tpvProjectFee; +$totalProjectVat = $cashProjectVat + $poolProjectVat + $paypalProjectVat + $tpvProjectVat; +$totalGatewayFee = $cashGatewayFee + $poolGatewayFee + $paypalGatewayFee + $tpvGatewayFee; +$totalGatewayVat = $cashGatewayVat + $poolGatewayVat + $paypalGatewayVat + $tpvGatewayVat; + +$reportData = [ + 'TPV' => [ + 'base' => \amount_format($tpvTotal, 2), + 'project_fee' => sprintf("%s (%s%%)", \amount_format($tpvProjectFee, 2), $account->fee,), + 'project_vat' => sprintf("%s (21%%)", \amount_format($tpvProjectVat, 2),), + 'gateway_fee' => sprintf("%s (0,8%%)", \amount_format($tpvGatewayFee, 2)), + 'gateway_vat' => sprintf("%s (21%%)", \amount_format($tpvGatewayVat, 2)) + ], + 'PAYPAL' => [ + 'base' => \amount_format($paypalTotal, 2), + 'project_fee' => sprintf("%s (%s%%)", \amount_format($paypalProjectFee, 2), $account->fee), + 'project_vat' => sprintf("%s (21%%)", \amount_format($paypalProjectVat, 2)), + 'gateway_fee' => sprintf("%s (3,4%% + 0,35 * trx)", \amount_format($paypalGatewayFee, 2)), + 'gateway_vat' => sprintf("%s (21%%)", \amount_format($paypalGatewayVat, 2)) + ], + 'MONEDERO' => [ + 'base' => \amount_format($poolTotal, 2), + 'project_fee' => sprintf("%s (%s%%)", \amount_format($poolProjectFee, 2), $account->fee), + 'project_vat' => sprintf("%s (21%%)", \amount_format($poolProjectVat, 2)), + 'gateway_fee' => sprintf("%s (2%%)", \amount_format($poolGatewayFee, 2)), + 'gateway_vat' => sprintf("%s (21%%)", \amount_format($poolGatewayVat, 2)) + ], + 'MANUAL' => [ + 'base' => \amount_format($cashTotal, 2), + 'project_fee' => sprintf("%s (%s%%)", \amount_format($cashProjectFee, 2), $account->fee), + 'project_vat' => sprintf("%s (21%%)", \amount_format($cashProjectVat, 2)), + 'gateway_fee' => sprintf("%s (2%%)", \amount_format($cashGatewayFee, 2)), + 'gateway_vat' => sprintf("%s (21%%)", \amount_format($cashGatewayVat, 2)), + ], + 'TOTAL' => [ + 'base' => \amount_format($totalTotal, 2), + 'project_fee' => sprintf("%s", \amount_format($totalProjectFee, 2)), + 'project_vat' => sprintf("%s", \amount_format($totalProjectVat, 2)), + 'gateway_fee' => sprintf("%s", \amount_format($totalGatewayFee, 2)), + 'gateway_vat' => sprintf("%s", \amount_format($totalGatewayVat, 2)) + ] +]; + +?> + + + + + + + + + + $value): ?> + + + + + + + + + +
RECAUDACIÓNCOMISIÓN DE GOTEOIVACOMISIONES COBRADAS A GOTEOIVA
\ No newline at end of file diff --git a/src/Goteo/Controller/Admin/ProjectsSubController.php b/src/Goteo/Controller/Admin/ProjectsSubController.php index 1cbd08b242..48e2cdc685 100644 --- a/src/Goteo/Controller/Admin/ProjectsSubController.php +++ b/src/Goteo/Controller/Admin/ProjectsSubController.php @@ -206,11 +206,13 @@ public function reportAction($id) { // Datos para el informe de transacciones correctas $data = Model\Invest::getReportData($project->id, $project->status, $project->round, $project->passed); $account = Model\Project\Account::get($project->id); + $contract = Model\Contract::get($project->id); return array( 'template' => 'admin/projects/report', 'project' => $project, 'account' => $account, + 'contract' => $contract, 'data' => $data ); } diff --git a/translations/ca/dashboard.yml b/translations/ca/dashboard.yml index b5c5e2b3af..7618719fb2 100644 --- a/translations/ca/dashboard.yml +++ b/translations/ca/dashboard.yml @@ -73,7 +73,7 @@ dashboard-menu-profile-personal: 'Dades personals' dashboard-menu-profile-preferences: 'Preferències' dashboard-menu-profile-profile: 'Edita el Perfil' dashboard-menu-profile-public: 'Perfil públic' -dashboard-menu-project-nid: 'Identificador numèric de projecte' +dashboard-menu-project-nid: 'Número de seguiment' dashboard-menu-projects: 'Projectes' dashboard-menu-projects-analytics: Analítica dashboard-menu-projects-commons: Retorns diff --git a/translations/es/dashboard.yml b/translations/es/dashboard.yml index 9fd4736a5f..1fcaf3bf47 100644 --- a/translations/es/dashboard.yml +++ b/translations/es/dashboard.yml @@ -73,7 +73,7 @@ dashboard-menu-profile-personal: 'Datos personales' dashboard-menu-profile-preferences: 'Mis preferencias' dashboard-menu-profile-profile: 'Editar perfil' dashboard-menu-profile-public: 'Perfil público' -dashboard-menu-project-nid: 'Identificador numérico de proyecto' +dashboard-menu-project-nid: 'Número de seguimiento' dashboard-menu-projects: 'Mis proyectos' dashboard-menu-projects-analytics: Analítica dashboard-menu-projects-commons: Retornos