formulaire ok sauf calcul totaux et btn modifier

This commit is contained in:
2026-07-05 19:22:35 +00:00
parent c252d648b8
commit 9fc641f93b
+29 -29
View File
@@ -13,7 +13,6 @@ ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); ini_set('display_startup_errors', 1);
error_reporting(E_ALL); error_reporting(E_ALL);
$pageStylesheets = ['/css/ordreGF.css']; $pageStylesheets = ['/css/ordreGF.css'];
$bodyClass = 'ordregf-page'; $bodyClass = 'ordregf-page';
@@ -59,11 +58,27 @@ require_once __DIR__ . '/header.php';
<table class="ordregf-table"> <table class="ordregf-table">
<tbody> <tbody>
<?php foreach ($ordres as $ordre): ?> <?php foreach ($ordres as $ordre): ?>
<?php
// Pré-calcul pour les boutons
$details = fetchOrdreGFPied($connection, (string)$ordre['ID']);
$totalQ = 0;
foreach ($details as $d) {
$q = (int)($d['Quantite'] ?? 0);
$oType = strtolower($d['Ordre'] ?? '');
$tOp = strtolower($d['Type'] ?? '');
if (strtolower($d['Etat'] ?? '') === 'actif') {
$totalQ += ($tOp === 'long' ? ($oType === 'achat' ? $q : -$q) : ($oType === 'achat' ? -$q : $q));
}
}
$isSold = ($totalQ === 0 && count($details) > 0);
// Désactiver si vendu OU si une plus-value existe déjà
$isDisabled = $isSold || (isset($ordre['PlusValue']) && (float)$ordre['PlusValue'] !== 0.0);
$disabledAttr = $isDisabled ? 'disabled style="opacity:0.5; cursor:not-allowed;"' : '';
?>
<tr class="ordregf-master-row ordregf-header-style"> <tr class="ordregf-master-row ordregf-header-style">
<td colspan="11" style="font-weight: bold; font-size: 1.1em; color: #fff;"> <td colspan="11" style="font-weight: bold; font-size: 1.1em; color: #fff;">
<?php <?php echo htmlspecialchars((string)$ordre['isin']) . ' --- ' . htmlspecialchars((string)$ordre['Nom']) . ' ( ' . htmlspecialchars((string)$ordre['ticker']) . ' )'; ?>
echo htmlspecialchars((string)$ordre['isin']) . ' --- ' . htmlspecialchars((string)$ordre['Nom']) . ' ( ' . htmlspecialchars((string)$ordre['ticker']) . ' )';
?>
</td> </td>
</tr> </tr>
@@ -83,8 +98,8 @@ require_once __DIR__ . '/header.php';
<th>Type</th> <th>Type</th>
<th>Etat</th> <th>Etat</th>
<th style="text-align: right;"> <th style="text-align: right;">
<button type="button" <button type="button" class="ordregf-btn-petit ordregf-btn-creer-petit"
class="ordregf-btn-petit ordregf-btn-creer-petit" <?= $disabledAttr ?>
onclick="document.getElementById('Id_entete_detail').value='<?= $ordre['ID'] ?>'; document.getElementById('modalCreerDetail').showModal();"> onclick="document.getElementById('Id_entete_detail').value='<?= $ordre['ID'] ?>'; document.getElementById('modalCreerDetail').showModal();">
Créer Créer
</button> </button>
@@ -93,10 +108,8 @@ require_once __DIR__ . '/header.php';
</thead> </thead>
<tbody> <tbody>
<?php <?php
$totalQ = 0;
$engaBrut = 0; $engaBrut = 0;
$engaNet = 0; $engaNet = 0;
$details = fetchOrdreGFPied($connection, (string)$ordre['ID']);
foreach ($details as $detail): foreach ($details as $detail):
$qte = (int)($detail['Quantite'] ?? 0); $qte = (int)($detail['Quantite'] ?? 0);
@@ -112,21 +125,17 @@ require_once __DIR__ . '/header.php';
if ($etat === 'actif') { if ($etat === 'actif') {
if ($type_op === 'long') { if ($type_op === 'long') {
if ($ordre_type === 'achat') { if ($ordre_type === 'achat') {
$totalQ += $qte;
$engaBrut += $qte * $prix; $engaBrut += $qte * $prix;
$engaNet += $qte * $prixNet; $engaNet += $qte * $prixNet;
} elseif ($ordre_type === 'vente') { } else {
$totalQ -= $qte;
$engaBrut -= $qte * $prix; $engaBrut -= $qte * $prix;
$engaNet -= $qte * $prixNet; $engaNet -= $qte * $prixNet;
} }
} elseif ($type_op === 'short') { } elseif ($type_op === 'short') {
if ($ordre_type === 'achat') { if ($ordre_type === 'achat') {
$totalQ -= $qte;
$engaBrut -= $qte * $prix; $engaBrut -= $qte * $prix;
$engaNet -= $qte * $prixNet; $engaNet -= $qte * $prixNet;
} elseif ($ordre_type === 'vente') { } else {
$totalQ += $qte;
$engaBrut += $qte * $prix; $engaBrut += $qte * $prix;
$engaNet += $qte * $prixNet; $engaNet += $qte * $prixNet;
} }
@@ -145,14 +154,16 @@ require_once __DIR__ . '/header.php';
<td><?= htmlspecialchars($detail['Type'] ?? '') ?></td> <td><?= htmlspecialchars($detail['Type'] ?? '') ?></td>
<td><?= htmlspecialchars($detail['Etat'] ?? '') ?></td> <td><?= htmlspecialchars($detail['Etat'] ?? '') ?></td>
<td style="text-align: right;"> <td style="text-align: right;">
<button type="button" class="ordregf-btn-petit ordregf-btn-modifier-petit" data-detail='<?= json_encode($detail) ?>'>Modifier</button> <button type="button" class="ordregf-btn-petit ordregf-btn-modifier-petit"
<?= $disabledAttr ?>
data-detail='<?= htmlspecialchars(json_encode($detail), ENT_QUOTES, 'UTF-8') ?>'>
Modifier
</button>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
<?php <?php
// Calcul Plus-value
$isSold = ($totalQ === 0 && count($details) > 0);
$plusvalue = 0.0000; $plusvalue = 0.0000;
if ($isSold) { if ($isSold) {
foreach ($details as $detail) { foreach ($details as $detail) {
@@ -161,21 +172,10 @@ require_once __DIR__ . '/header.php';
$eNet = round($qte * $prixNet, 4); $eNet = round($qte * $prixNet, 4);
$oType = strtolower($detail['Ordre']); $oType = strtolower($detail['Ordre']);
$tOp = strtolower($detail['Type']); $tOp = strtolower($detail['Type']);
$signe = ($tOp === 'long') ? (($oType === 'vente') ? 1 : -1) : (($oType === 'achat') ? 1 : -1);
// Logique plus claire
$signe = 0;
if ($tOp === 'long') {
$signe = ($oType === 'vente') ? 1 : -1;
} else { // short
$signe = ($oType === 'achat') ? 1 : -1;
}
$plusvalue += ($eNet * $signe); $plusvalue += ($eNet * $signe);
} }
// On arrondit le résultat final avant comparaison et insertion
$plusvalue = round($plusvalue, 4); $plusvalue = round($plusvalue, 4);
if (abs((float)$ordre['PlusValue'] - $plusvalue) > 0.0001) { if (abs((float)$ordre['PlusValue'] - $plusvalue) > 0.0001) {
$connection->prepare("UPDATE ordreGF SET PlusValue = ? WHERE ID = ?")->execute([$plusvalue, $ordre['ID']]); $connection->prepare("UPDATE ordreGF SET PlusValue = ? WHERE ID = ?")->execute([$plusvalue, $ordre['ID']]);
$connection->prepare("UPDATE ordreGF_pied SET Etat = 'soldé' WHERE Id_entete = ? AND Etat != 'soldé'")->execute([$ordre['ID']]); $connection->prepare("UPDATE ordreGF_pied SET Etat = 'soldé' WHERE Id_entete = ? AND Etat != 'soldé'")->execute([$ordre['ID']]);