179 lines
6.2 KiB
PHP
Executable File
179 lines
6.2 KiB
PHP
Executable File
<?php
|
|
require_once ('fixed/config/go_con.php');
|
|
ini_set('memory_limit', '512M');
|
|
$data = [];
|
|
$get_invoices_sql = mysqli_query(
|
|
$db,
|
|
"SELECT
|
|
`invoices`.`id`,
|
|
`invoices`.`number`,
|
|
`invoices`.number_style,
|
|
-- tretment_id,
|
|
`invoices`.price,
|
|
`invoices_details`.`pay`,
|
|
`invoices_details`.branch_id,
|
|
`invoices_details_has_how_pay`.how_pay_id,
|
|
`invoices_details_has_how_pay`.`pay`,
|
|
invoices_status_id,
|
|
`invoices_details`.`date_time`
|
|
|
|
FROM `invoices`
|
|
LEFT JOIN `invoices_details` ON `invoices_details`.`invoices_id` = `invoices`.`id`
|
|
LEFT JOIN `invoices_details_has_how_pay` ON `invoices_details_has_how_pay`.`invoices_details_id` = `invoices_details`.`id`
|
|
WHERE invoices_status_id = 1
|
|
AND `invoices_details_has_how_pay`.how_pay_id IN (1,2,6,7,8,9,10)
|
|
-- AND (`invoices_details`.`date_time` BETWEEN '2023-01-01 00:00:00' AND '2023-03-31 23:59:59')
|
|
AND `invoices_details`.`date_time` < '2023-12-31 23:59:59'
|
|
ORDER BY `invoices_details`.`date_time` ASC
|
|
"
|
|
);
|
|
|
|
// -- نموذج الفواتير
|
|
|
|
while ($get_invoices = mysqli_fetch_assoc($get_invoices_sql)) {
|
|
if (!array_key_exists($get_invoices['id'], $data)) {
|
|
$data[$get_invoices['id']] = [];
|
|
}
|
|
array_push($data[$get_invoices['id']], $get_invoices);
|
|
}
|
|
$number = 0;
|
|
$err = [
|
|
'select' => 0,
|
|
'insrt' => 0
|
|
];
|
|
foreach ($data as $key => $value) {
|
|
$total = 0;
|
|
if (count($data[$key]) > 1) {
|
|
foreach ($data[$key] as $key2 => $value2) {
|
|
$total += $data[$key][$key2]['pay'];
|
|
}
|
|
} else {
|
|
$total += $data[$key][0]['pay'];
|
|
}
|
|
$word_tag = 'I' . '';
|
|
switch ($data[$key][0]['branch_id']) {
|
|
case '2':
|
|
$word_tag = '1501';
|
|
break;
|
|
case '3':
|
|
$word_tag = '0701';
|
|
break;
|
|
case '4':
|
|
$word_tag = '2901';
|
|
break;
|
|
case '5':
|
|
$word_tag = '0602';
|
|
break;
|
|
case '6':
|
|
$word_tag = 'KM01';
|
|
break;
|
|
case '7':
|
|
$word_tag = 'VS01';
|
|
break;
|
|
case '8':
|
|
$word_tag = 'VS02';
|
|
break;
|
|
case '9':
|
|
$word_tag = 'PT07';
|
|
break;
|
|
case '12':
|
|
$word_tag = '2902';
|
|
break;
|
|
case '13':
|
|
$word_tag = '1502';
|
|
break;
|
|
|
|
default:
|
|
$err['select'] += 1;
|
|
break;
|
|
}
|
|
$date_time = $data[$key][0]['date_time'];
|
|
$id = $data[$key][0]['id'];
|
|
$number += 1;
|
|
$number_style = date('y', strtotime($date_time)) . $word_tag . str_pad($number, 7, '0', STR_PAD_LEFT);
|
|
$tretment_id = $data[$key][0]['tretment_id'];
|
|
$price = $total;
|
|
$branch_id = $data[$key][0]['branch_id'];
|
|
|
|
// if (
|
|
// !mysqli_query(
|
|
// $db,
|
|
// "INSERT INTO `VAT_report_2024_I`(`pay`, `number`, `number_style`, `invoices_id`, `branch_id`, `date_time`, `user_id`, `activation_id`)
|
|
// VALUE ('$price','$number','$number_style','$id','$branch_id','$date_time','1','2')
|
|
// "
|
|
// )
|
|
// ) {
|
|
// $err['insrt'] += 1;
|
|
// }
|
|
|
|
}
|
|
|
|
print_r($err);
|
|
print_r($data);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* دالة لحساب الخصم المطلوب لتحقيق السعر الثابت بعد الضريبة.
|
|
*
|
|
* @param float $totalPrice السعر الشامل للضريبة.
|
|
* @param float $taxRate نسبة ضريبة القيمة المضافة.
|
|
* @param float $fixedTotalPrice السعر الثابت المطلوب بعد الضريبة.
|
|
* @return array مصفوفة تحتوي على السعر الأساسي، الخصم المطلوب، السعر بعد الخصم، مبلغ الضريبة، والسعر النهائي.
|
|
*/
|
|
function calculateFixedPriceDiscount($totalPrice, $taxRate, $fixedTotalPrice)
|
|
{
|
|
// حساب السعر الأساسي من السعر الشامل للضريبة
|
|
$basePrice = $totalPrice / (1 + $taxRate / 100);
|
|
|
|
// حساب السعر الأساسي الذي يجب أن يكون بعد الخصم ليكون السعر النهائي هو السعر الثابت
|
|
$basePriceForFixedPrice = $fixedTotalPrice / (1 + $taxRate / 100);
|
|
|
|
// حساب الخصم المطلوب للوصول إلى السعر الثابت
|
|
$fixedPriceDiscount = $basePrice - $basePriceForFixedPrice;
|
|
|
|
// التأكد من أن الخصم الثابت لا يتجاوز السعر الأساسي
|
|
if ($fixedPriceDiscount > $basePrice) {
|
|
$fixedPriceDiscount = $basePrice;
|
|
}
|
|
|
|
// حساب السعر بعد تطبيق الخصم
|
|
$priceAfterDiscount = $basePrice - $fixedPriceDiscount;
|
|
|
|
// حساب الضريبة على السعر بعد الخصم
|
|
$taxAmount = $priceAfterDiscount * ($taxRate / 100);
|
|
|
|
// حساب السعر النهائي بعد الخصم والضريبة
|
|
$finalPrice = $priceAfterDiscount + $taxAmount;
|
|
|
|
// التقريب لأقرب رقمين بعد الفاصلة العشرية
|
|
$basePrice = round($basePrice, 2);
|
|
$fixedPriceDiscount = round($fixedPriceDiscount, 2);
|
|
$priceAfterDiscount = round($priceAfterDiscount, 2);
|
|
$taxAmount = round($taxAmount, 2);
|
|
$finalPrice = round($finalPrice, 2);
|
|
|
|
return [
|
|
'base_price' => $basePrice,
|
|
'fixed_price_discount' => $fixedPriceDiscount,
|
|
'price_after_discount' => $priceAfterDiscount,
|
|
'tax_amount' => $taxAmount,
|
|
'final_price' => $finalPrice
|
|
];
|
|
}
|
|
|
|
// مثال للاستخدام
|
|
$totalPrice = 172.5; // السعر الشامل للضريبة
|
|
$taxRate = 15.0; // نسبة الضريبة
|
|
$fixedTotalPrice = 115.0; // السعر الثابت المطلوب بعد الضريبة
|
|
|
|
// $result = calculateFixedPriceDiscount($totalPrice, $taxRate, $fixedTotalPrice);
|
|
|
|
// echo "السعر الأساسي: " . $result['base_price'] . "\n";
|
|
// echo "الخصم المطلوب لتحقيق السعر الثابت: " . $result['fixed_price_discount'] . "\n";
|
|
// echo "السعر بعد الخصم: " . $result['price_after_discount'] . "\n";
|
|
// echo "مبلغ الضريبة: " . $result['tax_amount'] . "\n";
|
|
// echo "السعر النهائي بعد الخصم والضريبة: " . $result['final_price'] . "\n";
|
|
?>
|