From 44a3b315c1359c213bda98f59c5f3f125e6b2d44 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Wed, 14 Dec 2022 09:58:48 +0000 Subject: [PATCH 1/8] imp: i7426 add share number and type to dividend details csv export --- .../src/Plugin/DividendAllocation/ProRata.php | 8 ++++++++ .../src/Plugin/DividendProcess/ExportDetailsCsv.php | 2 ++ 2 files changed, 10 insertions(+) diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php index 088144c3..09827c1a 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php @@ -2,6 +2,7 @@ namespace Drupal\shareholder_register_dividend\Plugin\DividendAllocation; +use Drupal\shareholder_register\Entity\Share; use Drupal\shareholder_register_dividend\Plugin\DividendAllocationDefinitionBase; use Drupal\shareholder_register_dividend\Exception\ShareholderRegisterDividendException; @@ -57,12 +58,16 @@ class ProRata extends DividendAllocationDefinitionBase { if ($transaction->getTransactionDate($use_payment_date) == $start_date) { continue; } + error_log("share: " . $share->id()); + error_log("shareholder: " . $shareholder->id()); throw new ShareholderRegisterDividendException( "Internal error: Share not found in previous transactions!"); } $dividend = new \stdClass(); $dividend->share_id = $share->id(); + $dividend->share_number = $share->getname(); + $dividend->share_type_id = $share->get('share_type_id')->target_id; $dividend->shareholder_id = $shareholder->id(); $dividend->start_date = $current_shares[$share->id()]['start_date']; $dividend->end_date = $transaction->getTransactionDate($use_payment_date); @@ -78,7 +83,10 @@ class ProRata extends DividendAllocationDefinitionBase { foreach ($current_shares as $share_id => $share_data) { $dividend = new \stdClass(); + $share = Share::load($share_id); $dividend->share_id = $share_id; + $dividend->share_number = $share->getname(); + $dividend->share_type_id = $share->get('share_type_id')->target_id; $dividend->shareholder_id = $shareholder->id(); $dividend->start_date = $share_data['start_date']; $dividend->end_date = $share_data['end_date'] ?? $end_date; diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php index b33ca410..32312285 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php @@ -45,6 +45,8 @@ class ExportDetailsCsv extends DividendProcessPluginBase { $shareholder->getNumber(), $shareholder->getName(), $dividend->share_id, + $dividend->share_number, + $dividend->share_type_id, $dividend->fraction, $dividend->tax, $dividend->taxcode, -- GitLab From ef9277e1ba7608526fc56d024e4e723aeeeda1c6 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Fri, 17 Mar 2023 07:37:25 +0100 Subject: [PATCH 2/8] imp: i7426 add share number and type to dividend export --- .../src/DividendService.php | 28 ++--- .../src/Form/DividendSimulationForm.php | 24 ++-- .../Plugin/DividendAllocation/AtEndDate.php | 16 +-- .../src/Plugin/DividendAllocation/ProRata.php | 53 +++++---- .../DividendAllocation/ProRataMonth.php | 35 +++--- .../DividendProcess/ExportDetailsCsv.php | 18 +-- .../DividendProcess/ExportTotalsCsv.php | 2 +- .../src/Plugin/DividendTax/BE2018.php | 4 +- .../src/Plugin/DividendTax/BE2018VVPR.php | 28 ++--- .../src/ShareDividendLine.php | 106 ++++++++++++++++++ .../tests/src/Kernel/AtEndDateTest.php | 18 +-- .../tests/src/Kernel/DividendTest.php | 18 +-- .../tests/src/Kernel/ProrataMonthExclTest.php | 42 +++---- .../tests/src/Kernel/ProrataMonthTest.php | 48 ++++---- .../tests/src/Kernel/RegisterDividendTest.php | 4 +- .../tests/src/Kernel/VVPRTest.php | 4 +- src/ShareholderSharesLine.php | 9 ++ 17 files changed, 287 insertions(+), 170 deletions(-) create mode 100644 modules/shareholder_register_dividend/src/ShareDividendLine.php diff --git a/modules/shareholder_register_dividend/src/DividendService.php b/modules/shareholder_register_dividend/src/DividendService.php index a3aa20c7..175bdcb7 100644 --- a/modules/shareholder_register_dividend/src/DividendService.php +++ b/modules/shareholder_register_dividend/src/DividendService.php @@ -95,29 +95,29 @@ class DividendService implements DividendServiceInterface { $hash = call_user_func($dividend_config['total_hash'], $details); if (!array_key_exists($hash, $results['totals'])) { $results['totals'][$hash] = [ - 'fraction' => $details->fraction, - 'shareholder_id' => $details->shareholder_id, + 'fraction' => $details->getFraction(), + 'shareholder_id' => $details->getShareholderId(), 'grouped' => [], ]; } else { - $results['totals'][$hash]['fraction'] += $details->fraction; + $results['totals'][$hash]['fraction'] += $details->getFraction(); } - if (!isset($results['totals'][$hash]['grouped'][$details->tax])) { - $results['totals'][$hash]['grouped'][$details->tax] = [ - 'fraction' => $details->fraction, - 'tax' => $details->tax, - 'taxcode' => [$details->taxcode], + if (!isset($results['totals'][$hash]['grouped'][$details->getTax()])) { + $results['totals'][$hash]['grouped'][$details->getTax()] = [ + 'fraction' => $details->getFraction(), + 'tax' => $details->getTax(), + 'taxcode' => [$details->getTaxCode()], 'details' => [(array) $details], ]; } else { - if (!in_array($details->taxcode, $results['totals'][$hash]['grouped'][$details->tax]['taxcode'])) { - $results['totals'][$hash]['grouped'][$details->tax]['taxcode'][] = $details->taxcode; + if (!in_array($details->getTaxCode(), $results['totals'][$hash]['grouped'][$details->getTax()]['taxcode'])) { + $results['totals'][$hash]['grouped'][$details->getTax()]['taxcode'][] = $details->getTaxCode(); } - $results['totals'][$hash]['grouped'][$details->tax]['fraction'] += $details->fraction; - $results['totals'][$hash]['grouped'][$details->tax]['details'][] = (array) $details; + $results['totals'][$hash]['grouped'][$details->getTax()]['fraction'] += $details->getFraction(); + $results['totals'][$hash]['grouped'][$details->getTax()]['details'][] = (array) $details; } } return $results; @@ -171,14 +171,14 @@ class DividendService implements DividendServiceInterface { * {@inheritdoc} */ public static function dividendTotalHashWithTaxDetails($details) { - return "{$details->shareholder_id}-{$details->tax}"; + return "{$details->getShareholderId()}-{$details->getTax()}"; } /** * {@inheritdoc} */ public static function dividendTotalHash($details) { - return "{$details->shareholder_id}"; + return "{$details->getShareholderId()}"; } /** diff --git a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php index 1cdcb222..67732af8 100644 --- a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php +++ b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php @@ -71,6 +71,7 @@ class DividendSimulationForm extends DividendForm { $csv_file = Reader::createFromString( $context['results']['csv_details']); + $csv_file->setHeaderOffset(0); if (!isset($context['sandbox']['current_row'])) { $config = $context['results']['config']; @@ -94,7 +95,8 @@ class DividendSimulationForm extends DividendForm { $sheet->setCellValue("E6", t('Gross')); $sheet->setCellValue("F6", t('Tax Amount')); $sheet->setCellValue("G6", t('Dividend')); - $sheet->setCellValue("H6", t('Details')); + $sheet->setCellValue("H6", t('Hash')); + $sheet->setCellValue("I6", t('Details')); $context['sandbox']['row'] = 7; $context['sandbox']['current_row'] = 0; @@ -124,14 +126,15 @@ class DividendSimulationForm extends DividendForm { $line = $csv_rows->current(); $csv_rows->next(); - $sheet->setCellValue("A{$row}", $line[0]); - $sheet->setCellValue("B{$row}", $line[1]); - $sheet->setCellValue("C{$row}", $line[3]); - $sheet->setCellValue("D{$row}", $line[4]); + $sheet->setCellValue("A{$row}", $line['shareholder_number']); + $sheet->setCellValue("B{$row}", $line['shareholder_name']); + $sheet->setCellValue("C{$row}", $line['fraction']); + $sheet->setCellValue("D{$row}", $line['tax']); $sheet->setCellValue("E{$row}", "=ROUND(C{$row}*B3/C3, 2)"); $sheet->setCellValue("F{$row}", "=ROUND(E{$row}*(D{$row}/100), 2)"); $sheet->setCellValue("G{$row}", "=E{$row}-F{$row}"); - $sheet->setCellValue("H{$row}", "#{$line[3]}: {$line[6]} - {$line[7]}"); + $sheet->setCellValue("H{$row}", $line['hash']); + $sheet->setCellValue("I{$row}", "#{$line['name']}: {$line['start']} - {$line['end']}"); $sheet->setCellValue("B4", "=SUM(E7:E{$row})"); @@ -163,6 +166,7 @@ class DividendSimulationForm extends DividendForm { $csv_file = Reader::createFromString( $context['results']['csv_totals']); + $csv_file->setHeaderOffset(0); $max_execution_time = ini_get('max_execution_time'); if (!$max_execution_time) { @@ -221,10 +225,10 @@ class DividendSimulationForm extends DividendForm { $line = $csv_rows->current(); $csv_rows->next(); - $sheet->setCellValue("A{$row}", $line[0]); - $sheet->setCellValue("B{$row}", $line[1]); - $sheet->setCellValue("C{$row}", $line[2]); - $sheet->setCellValue("D{$row}", $line[3]); + $sheet->setCellValue("A{$row}", $line['shareholder_number']); + $sheet->setCellValue("B{$row}", $line['shareholder_name']); + $sheet->setCellValue("C{$row}", $line['fraction']); + $sheet->setCellValue("D{$row}", $line['tax']); $sheet->setCellValue("E{$row}", "=ROUND(C{$row}*B3/C3, 2)"); $sheet->setCellValue("F{$row}", "=ROUND(E{$row}*(D{$row}/100), 2)"); $sheet->setCellValue("G{$row}", "=E{$row}-F{$row}"); diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/AtEndDate.php b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/AtEndDate.php index a79efde5..cc052dca 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/AtEndDate.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/AtEndDate.php @@ -3,6 +3,7 @@ namespace Drupal\shareholder_register_dividend\Plugin\DividendAllocation; use Drupal\shareholder_register_dividend\Plugin\DividendAllocationDefinitionBase; +use Drupal\shareholder_register_dividend\ShareDividendLine; /** * Prorata. @@ -32,14 +33,13 @@ class AtEndDate extends DividendAllocationDefinitionBase { $shares = $shareholder->getSharesAtDate($end_date); foreach ($shares as $share) { - $dividend = new \stdClass(); - $dividend->share_id = $share->id(); - $dividend->shareholder_id = $shareholder->id(); - $dividend->start_date = $start_date; - $dividend->end_date = $end_date; - $dividend->tax = 0; - $dividend->fraction = 1; - + $dividend = new ShareDividendLine( + $start_date, + $end_date, + $shareholder->id(), + $share, + 1 + ); $result[] = $dividend; } return $result; diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php index 09827c1a..3fe38347 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php @@ -3,6 +3,7 @@ namespace Drupal\shareholder_register_dividend\Plugin\DividendAllocation; use Drupal\shareholder_register\Entity\Share; +use Drupal\shareholder_register_dividend\ShareDividendLine; use Drupal\shareholder_register_dividend\Plugin\DividendAllocationDefinitionBase; use Drupal\shareholder_register_dividend\Exception\ShareholderRegisterDividendException; @@ -36,10 +37,11 @@ class ProRata extends DividendAllocationDefinitionBase { $end_date = $dividend_config['end_date']; $use_payment_date = $dividend_config['use_payment_date'] ?? FALSE; - $share_ids = $shareholder->getShareIdsAtDate($start_date, NULL, $use_payment_date); + $shares = $shareholder->getSharesAtDate($start_date, NULL, $use_payment_date); $current_shares = []; - foreach ($share_ids as $share_id) { - $current_shares[$share_id] = [ + foreach ($shares as $share) { + $current_shares[$share->id()] = [ + 'share' => $share, 'start_date' => $start_date, ]; } @@ -48,6 +50,7 @@ class ProRata extends DividendAllocationDefinitionBase { if ($transaction->getQuantity() > 0) { foreach ($transaction->getShares() as $share) { $current_shares[$share->id()] = [ + 'share' => $share, 'start_date' => $transaction->getTransactionDate($use_payment_date), ]; } @@ -58,23 +61,20 @@ class ProRata extends DividendAllocationDefinitionBase { if ($transaction->getTransactionDate($use_payment_date) == $start_date) { continue; } - error_log("share: " . $share->id()); - error_log("shareholder: " . $shareholder->id()); throw new ShareholderRegisterDividendException( "Internal error: Share not found in previous transactions!"); } - $dividend = new \stdClass(); - $dividend->share_id = $share->id(); - $dividend->share_number = $share->getname(); - $dividend->share_type_id = $share->get('share_type_id')->target_id; - $dividend->shareholder_id = $shareholder->id(); - $dividend->start_date = $current_shares[$share->id()]['start_date']; - $dividend->end_date = $transaction->getTransactionDate($use_payment_date); - $dividend->tax = 0; - $dividend->fraction = date_diff( - date_create($current_shares[$share->id()]['start_date']), - date_create($transaction->getTransactionDate($use_payment_date)))->format('%a'); + $dividend = new ShareDividendLine( + $current_shares[$share->id()]['start_date'], + $transaction->getTransactionDate($use_payment_date), + $shareholder->id(), + $share, + date_diff( + date_create($current_shares[$share->id()]['start_date']), + date_create($transaction->getTransactionDate($use_payment_date)))->format('%a') + ); + $result[] = $dividend; unset($current_shares[$share->id()]); } @@ -82,18 +82,15 @@ class ProRata extends DividendAllocationDefinitionBase { } foreach ($current_shares as $share_id => $share_data) { - $dividend = new \stdClass(); - $share = Share::load($share_id); - $dividend->share_id = $share_id; - $dividend->share_number = $share->getname(); - $dividend->share_type_id = $share->get('share_type_id')->target_id; - $dividend->shareholder_id = $shareholder->id(); - $dividend->start_date = $share_data['start_date']; - $dividend->end_date = $share_data['end_date'] ?? $end_date; - $dividend->tax = 0; - $dividend->fraction = date_diff( - date_create($share_data['start_date']), - date_create($share_data['end_date'] ?? $end_date))->format('%a'); + $dividend = new ShareDividendLine( + $share_data['start_date'], + $share_data['end_date'] ?? $end_date, + $shareholder->id(), + $share_data['share'], + date_diff( + date_create($share_data['start_date']), + date_create($share_data['end_date'] ?? $end_date))->format('%a'), + ); $result[] = $dividend; } return $result; diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRataMonth.php b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRataMonth.php index e57268de..e9f12934 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRataMonth.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRataMonth.php @@ -4,6 +4,7 @@ namespace Drupal\shareholder_register_dividend\Plugin\DividendAllocation; use Drupal\shareholder_register_dividend\Exception\ShareholderRegisterDividendException; use Drupal\shareholder_register_dividend\Plugin\DividendAllocationDefinitionBase; +use Drupal\shareholder_register_dividend\ShareDividendLine; use Drupal\shareholder_register_dividend\Utils\DateDiff; /** @@ -102,16 +103,15 @@ class ProRataMonth extends DividendAllocationDefinitionBase { throw new ShareholderRegisterDividendException( "Internal error: Share not found in previous transactions!"); } - - $dividend = new \stdClass(); - $dividend->share_id = $share->id(); - $dividend->shareholder_id = $shareholder->id(); - $dividend->start_date = $current_shares[$share->id()]['start_date']; - $dividend->end_date = $transaction->getTransactionDate($use_payment_date); - $dividend->tax = 0; - $dividend->fraction = DateDiff::diffMonths( + $dividend = new ShareDividendLine( $current_shares[$share->id()]['start_date'], - static::endOfPeriod($transaction->getTransactionDate($use_payment_date))); + $transaction->getTransactionDate($use_payment_date), + $shareholder->id(), + $share, + DateDiff::diffMonths( + $current_shares[$share->id()]['start_date'], + static::endOfPeriod($transaction->getTransactionDate($use_payment_date))) + ); $result[] = $dividend; unset($current_shares[$share->id()]); } @@ -119,15 +119,16 @@ class ProRataMonth extends DividendAllocationDefinitionBase { } foreach ($current_shares as $share_data) { - $dividend = new \stdClass(); - $dividend->share_id = $share_data['share']->id(); - $dividend->shareholder_id = $shareholder->id(); - $dividend->start_date = $share_data['start_date']; - $dividend->end_date = $share_data['end_date'] ?? static::endOfPeriod($end_date); - $dividend->tax = 0; - $dividend->fraction = DateDiff::diffMonths( + + $dividend = new ShareDividendLine( $share_data['start_date'], - static::endOfPeriod($share_data['end_date'] ?? $end_date)); + $share_data['end_date'] ?? static::endOfPeriod($end_date), + $shareholder->id(), + $share_data['share'], + DateDiff::diffMonths( + $share_data['start_date'], + static::endOfPeriod($share_data['end_date'] ?? $end_date)) + ); $result[] = $dividend; } return $result; diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php index 32312285..cbf1f371 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportDetailsCsv.php @@ -30,7 +30,7 @@ class ExportDetailsCsv extends DividendProcessPluginBase { */ public function init(&$context, array $dividend_config) { if (!isset($context['results']['csv_details'])) { - $context['results']['csv_details'] = ""; + $context['results']['csv_details'] = "shareholder_number,shareholder_name,id,name,hash,fraction,tax,taxcode,start,end\n"; } $this->csvWriter = Writer::createFromString( $context['results']['csv_details']); @@ -44,14 +44,14 @@ class ExportDetailsCsv extends DividendProcessPluginBase { $this->csvWriter->insertOne([ $shareholder->getNumber(), $shareholder->getName(), - $dividend->share_id, - $dividend->share_number, - $dividend->share_type_id, - $dividend->fraction, - $dividend->tax, - $dividend->taxcode, - $dividend->start_date, - $dividend->end_date, + $dividend->getShareId(), + $dividend->getShareNameRange(), + $dividend->getShareHash(), + $dividend->getFraction(), + $dividend->getTax(), + $dividend->getTaxCode(), + $dividend->getStartDate(), + $dividend->getEndDate(), ]); } } diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php index 0d1b1d0f..b9fcd4e5 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php @@ -30,7 +30,7 @@ class ExportTotalsCsv extends DividendProcessPluginBase { */ public function init(&$context, array $dividend_config) { if (!isset($context['results']['csv_totals'])) { - $context['results']['csv_totals'] = ""; + $context['results']['csv_totals'] = "shareholder_number,shareholder_name,fraction,tax,taxcode,shareholder_id\n"; } $this->csvWriter = Writer::createFromString( $context['results']['csv_totals']); diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018.php b/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018.php index 62d50720..9fd0a7b8 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018.php @@ -19,8 +19,8 @@ class BE2018 extends DividendTaxDefinitionBase { */ public function computeDividendTaxRate($shareholder, $dividends, $dividend_config) { foreach ($dividends as $dividend) { - $dividend->tax = 30; - $dividend->taxcode = '30'; + $dividend->setTax(30); + $dividend->setTaxCode('30'); } } diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018VVPR.php b/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018VVPR.php index a4539aad..02568a8d 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018VVPR.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendTax/BE2018VVPR.php @@ -54,7 +54,7 @@ class BE2018VVPR extends DividendTaxDefinitionBase { $share_ids = array_map( function ($dividend) { - return $dividend->share_id; + return $dividend->getShareId(); }, $dividends ); @@ -73,7 +73,7 @@ class BE2018VVPR extends DividendTaxDefinitionBase { $share_data = $query->execute()->fetchAllAssoc('id'); foreach ($dividends as $dividend) { - $share = $share_data[$dividend->share_id]; + $share = $share_data[$dividend->getShareId()]; if ($use_payment_date) { $issue_date = $share->payment_date ? $share->payment_date : $share->date; } @@ -81,13 +81,13 @@ class BE2018VVPR extends DividendTaxDefinitionBase { $issue_date = $share->date; } if ($issue_date < '2013-07-01') { - $dividend->tax = 30; - $dividend->taxcode = 'vvpr-pre2013'; + $dividend->setTax(30); + $dividend->setTaxCode('vvpr-pre2013'); continue; } if ($shareholder->bundle() != 'natural_person') { - $dividend->tax = 30; - $dividend->taxcode = 'vvpr-na'; + $dividend->setTax(30); + $dividend->setTaxCode('vvpr-na'); continue; } @@ -99,24 +99,24 @@ class BE2018VVPR extends DividendTaxDefinitionBase { $share->issue_premium, 2), 2); - $dividend->tax = 30; - $dividend->taxcode = 'vvpr-abuse'; + $dividend->setTax(30); + $dividend->setTaxCode('vvpr-abuse'); continue; } $issue_year = substr($issue_date, 0, 4); $dividend_year = substr($dividend_config['start_date'], 0, 4); if (($dividend_year - $issue_year) > 2) { - $dividend->tax = 15; - $dividend->taxcode = 'vvpr-year-2'; + $dividend->setTax(15); + $dividend->setTaxCode('vvpr-year-2'); } elseif (($dividend_year - $issue_year) > 1) { - $dividend->tax = 20; - $dividend->taxcode = 'vvpr-year-1'; + $dividend->setTax(20); + $dividend->setTaxCode('vvpr-year-1'); } else { - $dividend->tax = 30; - $dividend->taxcode = 'vvpr-year-0'; + $dividend->setTax(30); + $dividend->setTaxCode('vvpr-year-0'); } } } diff --git a/modules/shareholder_register_dividend/src/ShareDividendLine.php b/modules/shareholder_register_dividend/src/ShareDividendLine.php new file mode 100644 index 00000000..0a0e0aa5 --- /dev/null +++ b/modules/shareholder_register_dividend/src/ShareDividendLine.php @@ -0,0 +1,106 @@ +<?php + +namespace Drupal\shareholder_register_dividend; + +use Drupal\shareholder_register\ShareholderSharesLine; +use Drupal\shareholder_register\Entity\ShareInterface; + +/** + * Line describing a dividend allocation. + */ +class ShareDividendLine extends ShareholderSharesLine { + + /** + * The end date. + * + * @var string + */ + protected $end_date; + + /** + * The fraction. + * + * @var int + */ + protected $fraction; + + /** + * The tax rate. + * + * @var int + */ + protected $tax_rate; + + /** + * The tax code. + * + * @var string + */ + protected $tax_code; + + /** + * Constructs a new ShareDividendLine object. + */ + public function __construct(string $start_date, string $end_date, int $shareholder_id, ShareInterface $share, int $fraction) { + parent::__construct(FALSE, $start_date, $shareholder_id, 1, [$share->id()], $share->get('share_type_id')->target_id); + $this->end_date = $end_date; + $this->fraction = $fraction; + $this->tax_rate = 0; + } + + /** + * Get start date. + */ + public function getStartDate() { + return $this->date; + } + + /** + * Get end date. + */ + public function getEndDate() { + return $this->end_date; + } + + /** + * Get fraction. + */ + public function getFraction() { + return $this->fraction; + } + + /** + * Get tax rate. + */ + public function getTax() { + return $this->tax_rate; + } + + /** + * Set tax rate. + */ + public function setTax(int $rate) { + $this->tax_rate = $rate; + } + + /** + * Get tax code. + */ + public function getTaxCode() { + return $this->tax_code; + } + + /** + * Set tax code. + */ + public function setTaxCode(string $code) { + $this->tax_code = $code; + } + + /** + * Get share id. + */ + public function getShareId() { + return reset($this->shareIds); + } +} diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/AtEndDateTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/AtEndDateTest.php index b81aa5ad..b1ef5cf8 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/AtEndDateTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/AtEndDateTest.php @@ -79,9 +79,9 @@ class AtEndDateTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 1); - $this->assertEquals($result[0]->start_date, '2017-01-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 1); + $this->assertEquals($result[0]->getStartDate(), '2017-01-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); } /** @@ -164,9 +164,9 @@ class AtEndDateTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 1); - $this->assertEquals($result[0]->start_date, '2017-01-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 1); + $this->assertEquals($result[0]->getStartDate(), '2017-01-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); // Test payment date computation. $dividend_config['use_payment_date'] = 1; @@ -175,9 +175,9 @@ class AtEndDateTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 1); - $this->assertEquals($result[0]->start_date, '2017-01-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 1); + $this->assertEquals($result[0]->getStartDate(), '2017-01-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); } } diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/DividendTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/DividendTest.php index 2d5f06b4..dc8df0f4 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/DividendTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/DividendTest.php @@ -86,9 +86,9 @@ class DividendTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 333); - $this->assertEquals($result[0]->start_date, '2017-02-02'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 333); + $this->assertEquals($result[0]->getStartDate(), '2017-02-02'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); // Test payment date computation. $dividend_config['use_payment_date'] = 1; @@ -97,9 +97,9 @@ class DividendTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 364); - $this->assertEquals($result[0]->start_date, '2017-01-02'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 364); + $this->assertEquals($result[0]->getStartDate(), '2017-01-02'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); } /** @@ -201,9 +201,9 @@ class DividendTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 331); - $this->assertEquals($result[0]->start_date, '2017-02-02'); - $this->assertEquals($result[0]->end_date, '2017-12-30'); + $this->assertEquals($result[0]->getFraction(), 331); + $this->assertEquals($result[0]->getStartDate(), '2017-02-02'); + $this->assertEquals($result[0]->getEndDate(), '2017-12-30'); $plugin = DividendService::getDividendTaxDefinition($dividend_config['tax']); $plugin->computeDividendTaxRate( diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthExclTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthExclTest.php index e49c20e1..2475ad5c 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthExclTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthExclTest.php @@ -79,9 +79,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 12); - $this->assertEquals($result[0]->start_date, '2017-01-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 12); + $this->assertEquals($result[0]->getStartDate(), '2017-01-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); } /** @@ -125,9 +125,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 9); - $this->assertEquals($result[0]->start_date, '2017-01-01'); - $this->assertEquals($result[0]->end_date, '2017-10-05'); + $this->assertEquals($result[0]->getFraction(), 9); + $this->assertEquals($result[0]->getStartDate(), '2017-01-01'); + $this->assertEquals($result[0]->getEndDate(), '2017-10-05'); } /** @@ -171,9 +171,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 9); - $this->assertEquals($result[0]->start_date, '2017-01-01'); - $this->assertEquals($result[0]->end_date, '2017-10-01'); + $this->assertEquals($result[0]->getFraction(), 9); + $this->assertEquals($result[0]->getStartDate(), '2017-01-01'); + $this->assertEquals($result[0]->getEndDate(), '2017-10-01'); } /** @@ -212,9 +212,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 10); - $this->assertEquals($result[0]->start_date, '2017-03-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 10); + $this->assertEquals($result[0]->getStartDate(), '2017-03-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); } /** @@ -254,9 +254,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 10); - $this->assertEquals($result[0]->start_date, '2017-03-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 10); + $this->assertEquals($result[0]->getStartDate(), '2017-03-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); // Test payment date computation. $dividend_config['use_payment_date'] = 1; @@ -265,9 +265,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 11); - $this->assertEquals($result[0]->start_date, '2017-02-01'); - $this->assertEquals($result[0]->end_date, '2018-01-01'); + $this->assertEquals($result[0]->getFraction(), 11); + $this->assertEquals($result[0]->getStartDate(), '2017-02-01'); + $this->assertEquals($result[0]->getEndDate(), '2018-01-01'); } /** @@ -312,9 +312,9 @@ class ProrataMonthExclTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(count($result), 5); - $this->assertEquals($result[0]->fraction, 9); - $this->assertEquals($result[0]->start_date, '2017-03-01'); - $this->assertEquals($result[0]->end_date, '2017-12-30'); + $this->assertEquals($result[0]->getFraction(), 9); + $this->assertEquals($result[0]->getStartDate(), '2017-03-01'); + $this->assertEquals($result[0]->getEndDate(), '2017-12-30'); } } diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthTest.php index 776b8ee4..ab84dfc1 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/ProrataMonthTest.php @@ -79,9 +79,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(12, $result[0]->fraction); - $this->assertEquals('2017-01-01', $result[0]->start_date); - $this->assertEquals('2018-01-01', $result[0]->end_date); + $this->assertEquals(12, $result[0]->getFraction()); + $this->assertEquals('2017-01-01', $result[0]->getStartDate()); + $this->assertEquals('2018-01-01', $result[0]->getEndDate()); } /** @@ -120,9 +120,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(11, $result[0]->fraction); - $this->assertEquals('2017-02-01', $result[0]->start_date); - $this->assertEquals('2018-01-01', $result[0]->end_date); + $this->assertEquals(11, $result[0]->getFraction()); + $this->assertEquals('2017-02-01', $result[0]->getStartDate()); + $this->assertEquals('2018-01-01', $result[0]->getEndDate()); } /** @@ -166,9 +166,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(9, $result[0]->fraction); - $this->assertEquals('2017-01-01', $result[0]->start_date); - $this->assertEquals('2017-10-05', $result[0]->end_date); + $this->assertEquals(9, $result[0]->getFraction()); + $this->assertEquals('2017-01-01', $result[0]->getStartDate()); + $this->assertEquals('2017-10-05', $result[0]->getEndDate()); } /** @@ -212,9 +212,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(9, $result[0]->fraction); - $this->assertEquals('2017-01-01', $result[0]->start_date); - $this->assertEquals('2017-10-01', $result[0]->end_date); + $this->assertEquals(9, $result[0]->getFraction()); + $this->assertEquals('2017-01-01', $result[0]->getStartDate()); + $this->assertEquals('2017-10-01', $result[0]->getEndDate()); } /** @@ -254,9 +254,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(10, $result[0]->fraction); - $this->assertEquals('2017-03-01', $result[0]->start_date); - $this->assertEquals('2018-01-01', $result[0]->end_date); + $this->assertEquals(10, $result[0]->getFraction()); + $this->assertEquals('2017-03-01', $result[0]->getStartDate()); + $this->assertEquals('2018-01-01', $result[0]->getEndDate()); // Test payment date computation. $dividend_config['use_payment_date'] = 1; @@ -265,9 +265,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(11, $result[0]->fraction); - $this->assertEquals('2017-02-01', $result[0]->start_date); - $this->assertEquals('2018-01-01', $result[0]->end_date); + $this->assertEquals(11, $result[0]->getFraction()); + $this->assertEquals('2017-02-01', $result[0]->getStartDate()); + $this->assertEquals('2018-01-01', $result[0]->getEndDate()); } /** @@ -312,9 +312,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(9, $result[0]->fraction); - $this->assertEquals('2017-03-01', $result[0]->start_date); - $this->assertEquals('2017-12-30', $result[0]->end_date); + $this->assertEquals(9, $result[0]->getFraction()); + $this->assertEquals('2017-03-01', $result[0]->getStartDate()); + $this->assertEquals('2017-12-30', $result[0]->getEndDate()); } /** @@ -362,9 +362,9 @@ class ProrataMonthTest extends KernelTestBase { $result = $plugin->computeDividend($shareholder, $dividend_config); $this->assertEquals(5, count($result)); - $this->assertEquals(4, $result[0]->fraction); - $this->assertEquals('2017-01-01', $result[0]->start_date); - $this->assertEquals('2017-05-01', $result[0]->end_date); + $this->assertEquals(4, $result[0]->getFraction()); + $this->assertEquals('2017-01-01', $result[0]->getStartDate()); + $this->assertEquals('2017-05-01', $result[0]->getEndDate()); date_default_timezone_set($backup_tz); } diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/RegisterDividendTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/RegisterDividendTest.php index bda048df..731ffdf3 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/RegisterDividendTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/RegisterDividendTest.php @@ -85,8 +85,8 @@ class RegisterDividendTest extends KernelTestBase { // Validate registered totals. $d = ShareholderDividend::load(1); - $this->assertEquals($d->gross->value, "68.42"); - $this->assertEquals($d->net->value, "47.89", "assert 68.42 - (68.42 * 0.3) rounded = 47.89"); + $this->assertEquals("68.42", $d->gross->value); + $this->assertEquals("47.89", $d->net->value, "assert 68.42 - (68.42 * 0.3) rounded = 47.89"); } } diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php index c5cf753a..335bc893 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php @@ -104,8 +104,8 @@ class VVPRTest extends KernelTestBase { */ protected function getTaxCodeForShareId($details, $share_id) { foreach ($details as $detail) { - if ($detail->share_id == $share_id) { - return $detail->taxcode; + if ($detail->getShareId() == $share_id) { + return $detail->getTaxCode(); } } return FALSE; diff --git a/src/ShareholderSharesLine.php b/src/ShareholderSharesLine.php index c4288c7c..561ef14e 100644 --- a/src/ShareholderSharesLine.php +++ b/src/ShareholderSharesLine.php @@ -112,4 +112,13 @@ class ShareholderSharesLine { return $this->shareHash; } + /** + * Get share name range. + */ + public function getShareNameRange() { + $formatter = \Drupal::service('shareholder_register.formatter'); + return $formatter->shareIdsToRanges($this->shareIds); + } + + } -- GitLab From 671157024a39f9aaa72d0503926f2ac25769a365 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 18 Mar 2023 05:42:05 +0000 Subject: [PATCH 3/8] cleanup --- .../src/DividendService.php | 7 - .../src/Form/DividendForm.php | 124 ------------------ 2 files changed, 131 deletions(-) diff --git a/modules/shareholder_register_dividend/src/DividendService.php b/modules/shareholder_register_dividend/src/DividendService.php index 175bdcb7..8afd211b 100644 --- a/modules/shareholder_register_dividend/src/DividendService.php +++ b/modules/shareholder_register_dividend/src/DividendService.php @@ -201,13 +201,6 @@ class DividendService implements DividendServiceInterface { return $batch; } - /** - * {@inheritdoc} - */ - public function registerDividend($shareholder_number, $gross, $net, $distribution) { - - } - /** * {@inheritdoc} */ diff --git a/modules/shareholder_register_dividend/src/Form/DividendForm.php b/modules/shareholder_register_dividend/src/Form/DividendForm.php index dee84740..1d00dc26 100644 --- a/modules/shareholder_register_dividend/src/Form/DividendForm.php +++ b/modules/shareholder_register_dividend/src/Form/DividendForm.php @@ -12,130 +12,6 @@ use League\Csv\Reader; */ class DividendForm extends FormBase { - /** - * {@inheritdoc} - */ - public static function registerDividend($distribution, &$context) { - $internal_precision = 4; - - $config = $context['results']['config']; - if (!isset($context['sandbox']['current_row'])) { - $dist = DividendDistribution::create([ - 'name' => $distribution, - ]); - $dist->save(); - $context['sandbox']['distribution'] = $dist; - - $csv_file = Reader::createFromPath( - \Drupal::service('file_system')->realpath($context['results']['totals']->getFileUri()), - 'r' - ); - $context['sandbox']['current_row'] = 0; - $context['sandbox']['max_row'] = count($csv_file); - } - - $formatterService = \Drupal::service('shareholder_register.formatter'); - - $csv_file = Reader::createFromPath( - \Drupal::service('file_system')->realpath($context['results']['totals']->getFileUri()), - 'r' - ); - - for ($i = 0; $i < 100; $i++) { - if ($context['sandbox']['current_row'] >= $context['sandbox']['max_row']) { - continue; - } - $gross = '0.0'; - $tax = '0.0'; - - $line = $new_line = $csv_file->fetchOne($context['sandbox']['current_row']); - $shareholder_id = $line[6]; - $details = [ - 'shareholder_id' => $shareholder_id, - 'fraction' => 0, - 'grouped' => [], - ]; - - do { - $line = $new_line; - - $fraction = $line[2]; - $tax_rate = $line[3]; - $record = [ - 'fraction' => $fraction, - 'taxcode' => [], - 'details' => unserialize($line[5]), - ]; - $details['fraction'] += $fraction; - - $sub_gross = $formatterService->round( - bcdiv( - bcmul( - $fraction, - $config['dividend'], - $internal_precision - ), - $context['results']['base'], - $internal_precision + 1 - ), - 2 - ); - - $gross = bcadd( - $gross, - $sub_gross, - 2 - ); - - $sub_tax = $formatterService->round( - bcdiv( - bcmul( - $sub_gross, - $tax_rate, - 2), - 100, - 2 + 1 - ), - 2 - ); - - $tax = bcadd( - $tax, - $sub_tax, - 2 - ); - - $record['gross'] = $sub_gross; - $record['tax'] = $sub_tax; - $record['net'] = bcsub( - $sub_gross, - $sub_tax, - 2 - ); - - $details['grouped'][$tax_rate] = $record; - $context['sandbox']['current_row']++; - $new_line = $csv_file->fetchOne($context['sandbox']['current_row']); - } while ($context['sandbox']['current_row'] < $context['sandbox']['max_row'] && $new_line[6] == $shareholder_id); - - $div = ShareholderDividend::create([ - 'distribution_id' => $context['sandbox']['distribution']->id(), - 'shareholder_id' => $line[6], - 'gross' => $gross, - 'net' => bcsub($gross, $tax, 2), - ]); - $div->setData('details', $details); - $div->save(); - } - - if ($context['sandbox']['max_row'] > 0) { - $context['finished'] = $context['sandbox']['current_row'] / $context['sandbox']['max_row']; - } - else { - $context['finished'] = 1; - } - } - /** * {@inheritdoc} */ -- GitLab From caba77e8382c1d8c8af9283f15d2d9c5207a2d2d Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 18 Mar 2023 05:42:23 +0000 Subject: [PATCH 4/8] phpcs --- .../shareholder_register_api.services.yml | 2 +- modules/shareholder_register_api/src/JsonRequestPolicy.php | 2 +- .../src/DividendDistributionAccessControlHandler.php | 6 +++--- .../shareholder_register_dividend/src/Form/DividendForm.php | 2 -- .../src/Plugin/DividendAllocation/ProRata.php | 1 - .../shareholder_register_dividend/src/ShareDividendLine.php | 1 + modules/shareholder_register_webform/src/MappingService.php | 2 +- src/Commands/ShareholderRegisterCommands.php | 4 +--- src/ShareIssueListBuilder.php | 2 +- src/ShareholderRegisterDrushService.php | 4 ++-- src/ShareholderSharesLine.php | 1 - 11 files changed, 11 insertions(+), 16 deletions(-) diff --git a/modules/shareholder_register_api/shareholder_register_api.services.yml b/modules/shareholder_register_api/shareholder_register_api.services.yml index 84e1d2e6..2a059de6 100644 --- a/modules/shareholder_register_api/shareholder_register_api.services.yml +++ b/modules/shareholder_register_api/shareholder_register_api.services.yml @@ -7,4 +7,4 @@ services: class: 'Drupal\shareholder_register_api\JsonRequestPolicy' arguments: ['@logger.channel.shareholder_register_api', '@current_route_match'] tags: - - { name: dynamic_page_cache_request_policy } \ No newline at end of file + - { name: dynamic_page_cache_request_policy } diff --git a/modules/shareholder_register_api/src/JsonRequestPolicy.php b/modules/shareholder_register_api/src/JsonRequestPolicy.php index 6ca6e753..0d5d5e79 100644 --- a/modules/shareholder_register_api/src/JsonRequestPolicy.php +++ b/modules/shareholder_register_api/src/JsonRequestPolicy.php @@ -39,7 +39,7 @@ class JsonRequestPolicy implements RequestPolicyInterface { * @param \Drupal\Core\Routing\RouteMatchInterface $route_match * The current route match. */ - public function __construct(LoggerInterface $logger, RouteMatchInterface $route_match) { + public function __construct(LoggerInterface $logger, RouteMatchInterface $route_match) { $this->logger = $logger; $this->routeMatch = $route_match; } diff --git a/modules/shareholder_register_dividend/src/DividendDistributionAccessControlHandler.php b/modules/shareholder_register_dividend/src/DividendDistributionAccessControlHandler.php index eb78c734..9eb43109 100644 --- a/modules/shareholder_register_dividend/src/DividendDistributionAccessControlHandler.php +++ b/modules/shareholder_register_dividend/src/DividendDistributionAccessControlHandler.php @@ -19,8 +19,8 @@ class DividendDistributionAccessControlHandler extends EntityAccessControlHandle * * @var bool */ - protected $viewLabelOperation = TRUE; - + protected $viewLabelOperation = TRUE; + /** * {@inheritdoc} */ @@ -31,7 +31,7 @@ class DividendDistributionAccessControlHandler extends EntityAccessControlHandle if ($operation === 'view label') { return AccessResult::allowed(); } - + /** @var \Drupal\shareholder_register_dividend\Entity\DividendDistributionInterface $entity */ switch ($operation) { case 'view': diff --git a/modules/shareholder_register_dividend/src/Form/DividendForm.php b/modules/shareholder_register_dividend/src/Form/DividendForm.php index 1d00dc26..2a7a3264 100644 --- a/modules/shareholder_register_dividend/src/Form/DividendForm.php +++ b/modules/shareholder_register_dividend/src/Form/DividendForm.php @@ -5,8 +5,6 @@ namespace Drupal\shareholder_register_dividend\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; -use League\Csv\Reader; - /** * Class for the Dividend Form. */ diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php index 3fe38347..a049db13 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendAllocation/ProRata.php @@ -2,7 +2,6 @@ namespace Drupal\shareholder_register_dividend\Plugin\DividendAllocation; -use Drupal\shareholder_register\Entity\Share; use Drupal\shareholder_register_dividend\ShareDividendLine; use Drupal\shareholder_register_dividend\Plugin\DividendAllocationDefinitionBase; use Drupal\shareholder_register_dividend\Exception\ShareholderRegisterDividendException; diff --git a/modules/shareholder_register_dividend/src/ShareDividendLine.php b/modules/shareholder_register_dividend/src/ShareDividendLine.php index 0a0e0aa5..b87ff5c4 100644 --- a/modules/shareholder_register_dividend/src/ShareDividendLine.php +++ b/modules/shareholder_register_dividend/src/ShareDividendLine.php @@ -103,4 +103,5 @@ class ShareDividendLine extends ShareholderSharesLine { public function getShareId() { return reset($this->shareIds); } + } diff --git a/modules/shareholder_register_webform/src/MappingService.php b/modules/shareholder_register_webform/src/MappingService.php index 8e57106c..6d996c9b 100644 --- a/modules/shareholder_register_webform/src/MappingService.php +++ b/modules/shareholder_register_webform/src/MappingService.php @@ -146,7 +146,7 @@ class MappingService { if (count($property) == 1) { if (!$entity->get(trim($property[0]))->first()) { - return NULL; + return NULL; } $value_array = $entity->get(trim($property[0]))->first()->getValue(); if (count($value_array) == 1 && array_key_exists('value', $value_array)) { diff --git a/src/Commands/ShareholderRegisterCommands.php b/src/Commands/ShareholderRegisterCommands.php index 205154c8..d75a4e2b 100644 --- a/src/Commands/ShareholderRegisterCommands.php +++ b/src/Commands/ShareholderRegisterCommands.php @@ -4,10 +4,8 @@ namespace Drupal\shareholder_register\Commands; use Drush\Commands\DrushCommands; -use Drupal\shareholder_register\Entity\Shareholder; use Drupal\shareholder_register\Entity\ShareTransaction; - /** * A Drush commandfile. * @@ -88,7 +86,7 @@ class ShareholderRegisterCommands extends DrushCommands { if (!$this->io()->confirm("Are you sure you want to cancel transaction {$transaction->getName()} ({$transaction->id()}) for shareholder '{$shareholder->getNumber()}' ?")) { return; } - + \Drupal::service('shareholder_register.drush') ->cancelValidatedTransaction($id); } diff --git a/src/ShareIssueListBuilder.php b/src/ShareIssueListBuilder.php index d1cbf7e7..6d83b476 100644 --- a/src/ShareIssueListBuilder.php +++ b/src/ShareIssueListBuilder.php @@ -18,7 +18,7 @@ class ShareIssueListBuilder extends EntityListBuilder { */ public function buildHeader() { $header = []; - $header['id'] = $this->t('ID'); + $header['id'] = $this->t('ID'); $header['name'] = $this->t('Name'); $header['type'] = $this->t('Type'); $header['reserved'] = $this->t('Total reserved'); diff --git a/src/ShareholderRegisterDrushService.php b/src/ShareholderRegisterDrushService.php index 99df9cfa..e0a030db 100644 --- a/src/ShareholderRegisterDrushService.php +++ b/src/ShareholderRegisterDrushService.php @@ -129,7 +129,7 @@ class ShareholderRegisterDrushService implements ShareholderRegisterDrushService * {@inheritdoc} */ public function cancelValidatedTransaction($id) { - // TODO: add check that this is the last transaction for each share. + // @todo add check that this is the last transaction for each share. $transaction = ShareTransaction::load($id); $shareholder = $transaction->getShareholder(); @@ -156,7 +156,7 @@ class ShareholderRegisterDrushService implements ShareholderRegisterDrushService $share->save(); } } - + foreach ($group->getTransactions() as $t) { $t->getShareholder()->save(); } diff --git a/src/ShareholderSharesLine.php b/src/ShareholderSharesLine.php index 561ef14e..5ec54d6f 100644 --- a/src/ShareholderSharesLine.php +++ b/src/ShareholderSharesLine.php @@ -120,5 +120,4 @@ class ShareholderSharesLine { return $formatter->shareIdsToRanges($this->shareIds); } - } -- GitLab From f4753f67755c16a7afe57c10f90a572cb480b480 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 18 Mar 2023 07:52:46 +0100 Subject: [PATCH 5/8] phpcs --- .../src/Form/DividendSimulationForm.php | 2 +- .../src/Form/ImportDividendForm.php | 16 +++++++++++++--- .../tests/src/Kernel/VVPRTest.php | 4 ++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php index 67732af8..086c96ed 100644 --- a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php +++ b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php @@ -258,7 +258,7 @@ class DividendSimulationForm extends DividendForm { */ public function finishExportDividend($success, $results, $operations) { if (isset($results['output'])) { - \Drupal::service('messenger')->addMessage(t( + $this->messenger()->addMessage($this->t( 'Exported @number dividend lines download: @url', [ '@number' => $results['result_count'], diff --git a/modules/shareholder_register_dividend/src/Form/ImportDividendForm.php b/modules/shareholder_register_dividend/src/Form/ImportDividendForm.php index 478ac0d5..5f358323 100644 --- a/modules/shareholder_register_dividend/src/Form/ImportDividendForm.php +++ b/modules/shareholder_register_dividend/src/Form/ImportDividendForm.php @@ -6,6 +6,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\File\FileSystemInterface; use Drupal\file\Entity\File; use Drupal\shareholder_register\Entity\Shareholder; @@ -25,11 +26,19 @@ class ImportDividendForm extends FormBase { */ protected $account; + /** + * The filesystem service. + * + * @var \Drupal\Core\File\FileSystemInterface; + */ + protected $fileSystem; + /** * Class constructor. */ - public function __construct(DividendServiceInterface $account) { + public function __construct(DividendServiceInterface $account, DividendServiceInterface $fileSystem) { $this->account = $account; + $this->fileSystem = $fileSystem; } /** @@ -37,7 +46,8 @@ class ImportDividendForm extends FormBase { */ public static function create(ContainerInterface $container) { return new static( - $container->get('shareholder_register_dividend.default') + $container->get('shareholder_register_dividend.default'), + $container->get('file_system') ); } @@ -157,7 +167,7 @@ class ImportDividendForm extends FormBase { $distribution->save(); $csv_file = File::Load(reset($form_state->getValue('dividend_csv_file'))); - if (($handle = fopen(\Drupal::service('file_system')->realpath($csv_file->GetFileUri()), "r")) !== FALSE) { + if (($handle = fopen($this->fileSystem->realpath($csv_file->GetFileUri()), "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { if (!is_numeric($data[$form_state->getValue('gross_amount_column')])) { continue; diff --git a/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php b/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php index 335bc893..a950e72e 100644 --- a/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php +++ b/modules/shareholder_register_dividend/tests/src/Kernel/VVPRTest.php @@ -100,7 +100,7 @@ class VVPRTest extends KernelTestBase { } /** - * + * Get Taxcode for shareholder. */ protected function getTaxCodeForShareId($details, $share_id) { foreach ($details as $detail) { @@ -112,7 +112,7 @@ class VVPRTest extends KernelTestBase { } /** - * + * Test VVPR tax codes. */ public function testVvprCodes() { $register = $this->loadBasicRegister( -- GitLab From 13dff26a58f6bf57bbb90eebe555a21366a86cdc Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 18 Mar 2023 08:49:40 +0100 Subject: [PATCH 6/8] imp: dividend simulation with hash selection --- .../src/DividendService.php | 11 +++++++++-- .../src/Form/DividendSimulationForm.php | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/modules/shareholder_register_dividend/src/DividendService.php b/modules/shareholder_register_dividend/src/DividendService.php index 8afd211b..c756634c 100644 --- a/modules/shareholder_register_dividend/src/DividendService.php +++ b/modules/shareholder_register_dividend/src/DividendService.php @@ -167,6 +167,13 @@ class DividendService implements DividendServiceInterface { } } + /** + * {@inheritdoc} + */ + public static function dividendTotalHash($details) { + return "{$details->getShareholderId()}"; + } + /** * {@inheritdoc} */ @@ -177,8 +184,8 @@ class DividendService implements DividendServiceInterface { /** * {@inheritdoc} */ - public static function dividendTotalHash($details) { - return "{$details->getShareholderId()}"; + public static function dividendTotalHashWithShareHash($details) { + return "{$details->getShareholderId()}-{$details->getShareHash()}"; } /** diff --git a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php index 086c96ed..49dabc90 100644 --- a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php +++ b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php @@ -331,6 +331,17 @@ class DividendSimulationForm extends DividendForm { '#weight' => '90', ]; + $form['hash'] = [ + '#type' => 'select', + '#title' => $this->t('Group hash'), + '#options' => [ + '\Drupal\shareholder_register_dividend\DividendService::dividendTotalHash' => 'default', + '\Drupal\shareholder_register_dividend\DividendService::dividendTotalHashWithTaxDetails' => 'taxcode', + '\Drupal\shareholder_register_dividend\DividendService::dividendTotalHashWithShareHash' => 'share hash', + ], + '#weight' => '90', + ]; + return $form; } @@ -339,9 +350,7 @@ class DividendSimulationForm extends DividendForm { */ protected function getDividendConfig(FormStateInterface $form_state) { $dividend_config = parent::getDividendConfig($form_state); - if ($form_state->getValue('action') == '1') { - $dividend_config['total_hash'] = "\Drupal\shareholder_register_dividend\DividendService::dividendTotalHashWithTaxDetails"; - } + $dividend_config['total_hash'] = $form_state->getValue('hash'); $dividend_config['process'] = $form_state->getValue('type'); return $dividend_config; } -- GitLab From dbe2ce5042629cd472534bb587fc707b36bdbebf Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sat, 18 Mar 2023 09:30:01 +0100 Subject: [PATCH 7/8] imp: I-7426 include hash in totals export --- .../src/Form/DividendSimulationForm.php | 4 +++- .../src/Plugin/DividendProcess/ExportTotalsCsv.php | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php index 49dabc90..cb9a2a42 100644 --- a/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php +++ b/modules/shareholder_register_dividend/src/Form/DividendSimulationForm.php @@ -196,6 +196,7 @@ class DividendSimulationForm extends DividendForm { $sheet->setCellValue("F6", t('Tax Amount')); $sheet->setCellValue("G6", t('Dividend')); $sheet->setCellValue("H6", t('Tax code')); + $sheet->setCellValue("I6", t('Hash')); $context['sandbox']['row'] = 7; @@ -232,7 +233,8 @@ class DividendSimulationForm extends DividendForm { $sheet->setCellValue("E{$row}", "=ROUND(C{$row}*B3/C3, 2)"); $sheet->setCellValue("F{$row}", "=ROUND(E{$row}*(D{$row}/100), 2)"); $sheet->setCellValue("G{$row}", "=E{$row}-F{$row}"); - $sheet->setCellValue("H{$row}", $line[4]); + $sheet->setCellValue("H{$row}", $line['taxcode']); + $sheet->setCellValue("I{$row}", $line['hash']); $sheet->setCellValue("B4", "=SUM(E7:E{$row})"); diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php index b9fcd4e5..4f3dbabf 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendProcess/ExportTotalsCsv.php @@ -30,7 +30,7 @@ class ExportTotalsCsv extends DividendProcessPluginBase { */ public function init(&$context, array $dividend_config) { if (!isset($context['results']['csv_totals'])) { - $context['results']['csv_totals'] = "shareholder_number,shareholder_name,fraction,tax,taxcode,shareholder_id\n"; + $context['results']['csv_totals'] = "shareholder_number,shareholder_name,fraction,tax,taxcode,shareholder_id,hash\n"; } $this->csvWriter = Writer::createFromString( $context['results']['csv_totals']); @@ -40,7 +40,7 @@ class ExportTotalsCsv extends DividendProcessPluginBase { * {@inheritdoc} */ public function process(Shareholder $shareholder, array $results) { - foreach ($results['totals'] as $group) { + foreach ($results['totals'] as $hash => $group) { foreach ($group['grouped'] as $line) { $this->csvWriter->insertOne([ $shareholder->getNumber(), @@ -49,6 +49,7 @@ class ExportTotalsCsv extends DividendProcessPluginBase { $line['tax'], implode(", ", $line['taxcode']), $shareholder->id(), + $hash, ]); } } -- GitLab From cbb11dd625175438997071dfc44d499ba3706771 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Sun, 19 Mar 2023 08:25:59 +0100 Subject: [PATCH 8/8] phpcs --- .../src/Plugin/DividendProcessInterface.php | 4 ++-- .../src/ShareDividendLine.php | 20 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/shareholder_register_dividend/src/Plugin/DividendProcessInterface.php b/modules/shareholder_register_dividend/src/Plugin/DividendProcessInterface.php index 51073f92..ed515cb4 100644 --- a/modules/shareholder_register_dividend/src/Plugin/DividendProcessInterface.php +++ b/modules/shareholder_register_dividend/src/Plugin/DividendProcessInterface.php @@ -22,10 +22,10 @@ interface DividendProcessInterface { * * @param array $context * The batch context. - * @param mixed $dividend_config + * @param array $dividend_config * The Dividend configuration. */ - public function init(&$context, array $dividend_config); + public function init(array &$context, array $dividend_config); /** * Process the result of one shareholder. diff --git a/modules/shareholder_register_dividend/src/ShareDividendLine.php b/modules/shareholder_register_dividend/src/ShareDividendLine.php index b87ff5c4..dd455f2d 100644 --- a/modules/shareholder_register_dividend/src/ShareDividendLine.php +++ b/modules/shareholder_register_dividend/src/ShareDividendLine.php @@ -15,7 +15,7 @@ class ShareDividendLine extends ShareholderSharesLine { * * @var string */ - protected $end_date; + protected $endDate; /** * The fraction. @@ -29,23 +29,23 @@ class ShareDividendLine extends ShareholderSharesLine { * * @var int */ - protected $tax_rate; + protected $taxRate; /** * The tax code. * * @var string */ - protected $tax_code; + protected $taxCode; /** * Constructs a new ShareDividendLine object. */ public function __construct(string $start_date, string $end_date, int $shareholder_id, ShareInterface $share, int $fraction) { parent::__construct(FALSE, $start_date, $shareholder_id, 1, [$share->id()], $share->get('share_type_id')->target_id); - $this->end_date = $end_date; + $this->endDate = $end_date; $this->fraction = $fraction; - $this->tax_rate = 0; + $this->taxRate = 0; } /** @@ -59,7 +59,7 @@ class ShareDividendLine extends ShareholderSharesLine { * Get end date. */ public function getEndDate() { - return $this->end_date; + return $this->endDate; } /** @@ -73,28 +73,28 @@ class ShareDividendLine extends ShareholderSharesLine { * Get tax rate. */ public function getTax() { - return $this->tax_rate; + return $this->taxRate; } /** * Set tax rate. */ public function setTax(int $rate) { - $this->tax_rate = $rate; + $this->taxRate = $rate; } /** * Get tax code. */ public function getTaxCode() { - return $this->tax_code; + return $this->taxCode; } /** * Set tax code. */ public function setTaxCode(string $code) { - $this->tax_code = $code; + $this->taxCode = $code; } /** -- GitLab