mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-07-27 15:17:09 -04:00
- Created app/Traits/Controller/Shared.php with helper methods for supplier info, sale mode labels, company info, and tax code data - Created app/Traits/Models/Reports/ReportDateFilter.php for date filtering logic across reports - Created app/Traits/Models/Reports/SaleTypeFilter.php for sale type filtering pattern - Created app/Traits/Database/SalesTaxMigration.php for migration tax handling - Refactored Sales.php to use Shared trait for mode labels and company info - Refactored Taxes.php to use Shared trait for tax code initialization - Refactored Receivings.php to use Shared trait for supplier info building - Refactored Summary_report.php, Summary_payments.php, Summary_sales_taxes.php, Summary_expenses_categories.php to use ReportDateFilter and SaleTypeFilter traits - Refactored Detailed_sales.php to use SaleTypeFilter trait - Refactored both tax migrations to use SalesTaxMigration trait - Removed 39 TODO: Duplicated code comments across 19 files Closes #4490
72 lines
2.6 KiB
PHP
72 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Traits\Database;
|
|
|
|
trait SalesTaxMigration
|
|
{
|
|
protected function cleanIdentifier(string $string): string
|
|
{
|
|
$string = str_replace(' ', '-', $string);
|
|
return preg_replace('/[^A-Za-z0-9\-]/', '', $string);
|
|
}
|
|
|
|
protected function applyInvoiceTaxing(array &$salesTaxes): void
|
|
{
|
|
if (!empty($salesTaxes)) {
|
|
$sort = [];
|
|
foreach ($salesTaxes as $k => $v) {
|
|
$sort['print_sequence'][$k] = $v['print_sequence'];
|
|
}
|
|
array_multisort($sort['print_sequence'], SORT_ASC, $salesTaxes);
|
|
}
|
|
|
|
$decimals = totals_decimals();
|
|
|
|
foreach ($salesTaxes as $rowNumber => $salesTax) {
|
|
$salesTaxes[$rowNumber]['sale_tax_amount'] = $this->getSalesTaxForAmount(
|
|
$salesTax['sale_tax_basis'],
|
|
$salesTax['tax_rate'],
|
|
$salesTax['rounding_code'],
|
|
$decimals
|
|
);
|
|
}
|
|
}
|
|
|
|
protected function roundSalesTaxes(array &$salesTaxes, int $halfUp = 1, int $roundUp = 5, int $roundDown = 6, int $halfFive = 7): void
|
|
{
|
|
if (!empty($salesTaxes)) {
|
|
$sort = [];
|
|
foreach ($salesTaxes as $k => $v) {
|
|
$sort['print_sequence'][$k] = $v['print_sequence'];
|
|
}
|
|
array_multisort($sort['print_sequence'], SORT_ASC, $salesTaxes);
|
|
}
|
|
|
|
$decimals = totals_decimals();
|
|
|
|
foreach ($salesTaxes as $rowNumber => $salesTax) {
|
|
$saleTaxAmount = (float)$salesTax['sale_tax_amount'];
|
|
$roundingCode = $salesTax['rounding_code'];
|
|
$roundedSaleTaxAmount = $saleTaxAmount;
|
|
|
|
if (
|
|
$roundingCode == PHP_ROUND_HALF_UP
|
|
|| $roundingCode == PHP_ROUND_HALF_DOWN
|
|
|| $roundingCode == PHP_ROUND_HALF_EVEN
|
|
|| $roundingCode == PHP_ROUND_HALF_ODD
|
|
) {
|
|
$roundedSaleTaxAmount = round($saleTaxAmount, $decimals, $roundingCode);
|
|
} elseif ($roundingCode == $roundUp) {
|
|
$fig = (int) str_pad('1', $decimals, '0');
|
|
$roundedSaleTaxAmount = (ceil($saleTaxAmount * $fig) / $fig);
|
|
} elseif ($roundingCode == $roundDown) {
|
|
$fig = (int) str_pad('1', $decimals, '0');
|
|
$roundedSaleTaxAmount = (floor($saleTaxAmount * $fig) / $fig);
|
|
} elseif ($roundingCode == $halfFive) {
|
|
$roundedSaleTaxAmount = round($saleTaxAmount / 5) * 5;
|
|
}
|
|
|
|
$salesTaxes[$rowNumber]['sale_tax_amount'] = $roundedSaleTaxAmount;
|
|
}
|
|
}
|
|
} |