You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
832 lines
33 KiB
832 lines
33 KiB
<!-- Content Wrapper. Contains page content -->
|
|
<div class="content-wrapper">
|
|
<!-- Content Header (Page header) -->
|
|
<section class="content-header">
|
|
<h1>
|
|
Gérer les
|
|
<small>Commandes</small>
|
|
</h1>
|
|
<ol class="breadcrumb">
|
|
<li><a href="#"><i class="fa fa-dashboard"></i> Accueil</a></li>
|
|
<li class="active">Commandes</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<!-- Main content -->
|
|
<section class="content">
|
|
<!-- Small boxes (Stat box) -->
|
|
<div class="row">
|
|
<div class="col-md-12 col-xs-12">
|
|
|
|
<div id="messages"></div>
|
|
|
|
<?php if (session()->getFlashdata('success')): ?>
|
|
<div class="alert alert-success alert-dismissible" role="alert">
|
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
<?php echo session()->getFlashdata('success'); ?>
|
|
</div>
|
|
<?php elseif (session()->getFlashdata('error')): ?>
|
|
<div class="alert alert-danger alert-dismissible" role="alert">
|
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
<?php echo session()->getFlashdata('error'); ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($errors = session()->getFlashdata('errors')): ?>
|
|
<div class="alert alert-danger alert-dismissible" role="alert">
|
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
<?php if (is_array($errors)): ?>
|
|
<ul>
|
|
<?php foreach ($errors as $error): ?>
|
|
<li><?= esc($error) ?></li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<?php else: ?>
|
|
<?= esc($errors) ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php
|
|
// ✅ VÉRIFIER SI LA COMMANDE EST MODIFIABLE
|
|
// Seuls les statuts 1 (Validé) et 3 (Validé et Livré) sont NON modifiables
|
|
$is_editable = isset($is_editable) ? $is_editable : true;
|
|
$paid_status = $order_data['order']['paid_status'] ?? 2;
|
|
?>
|
|
|
|
<?php if (!$is_editable): ?>
|
|
<!-- ✅ ALERTE SI NON MODIFIABLE -->
|
|
<div class="alert alert-warning alert-dismissible" role="alert">
|
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
<strong><i class="fa fa-lock"></i> Cette commande ne peut plus être modifiée</strong><br>
|
|
Elle a été <?php echo ($paid_status == 1) ? 'validée' : 'validée et livrée'; ?>.
|
|
Vous pouvez uniquement consulter les informations.
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="box">
|
|
<div class="box-header">
|
|
<h3 class="box-title">
|
|
<?php echo $is_editable ? 'Mise à jour de commande' : 'Consultation de commande'; ?>
|
|
</h3>
|
|
</div>
|
|
<!-- /.box-header -->
|
|
<form role="form"
|
|
action="<?php base_url('orders/create') ?>"
|
|
method="post"
|
|
class="form-horizontal"
|
|
<?php echo !$is_editable ? 'onsubmit="return false;"' : ''; ?>>
|
|
<div class="box-body">
|
|
|
|
<div class="form-group">
|
|
<label for="date" class="col-sm-12 control-label">Date: <?php echo date('Y-m-d') ?></label>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="time" class="col-sm-12 control-label">Heure: <?php echo date('h:i a') ?></label>
|
|
</div>
|
|
|
|
<div class="col-md-4 col-xs-12 pull pull-left">
|
|
|
|
<div class="form-group">
|
|
<label for="types" class="col-sm-5 control-label" style="text-align:left;">Types</label>
|
|
<div class="col-sm-7">
|
|
<select name="" id="typesCommande" class="form-control" <?php echo !$is_editable ? 'disabled' : ''; ?>>
|
|
<option value="1">Facture</option>
|
|
<option value="2">Bon de Livraison & Facture</option>
|
|
<option value="3">Bon de Livraison</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="customer_name" class="col-sm-5 control-label" style="text-align:left;">Nom du client</label>
|
|
<div class="col-sm-7">
|
|
<input type="text"
|
|
class="form-control"
|
|
id="customer_name"
|
|
name="customer_name"
|
|
placeholder="Enter Customer Name"
|
|
value="<?php echo $order_data['order']['customer_name'] ?>"
|
|
autocomplete="off"
|
|
<?php echo !$is_editable ? 'disabled readonly' : ''; ?> />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="gross_amount" class="col-sm-5 control-label" style="text-align:left;">Adresse du client</label>
|
|
<div class="col-sm-7">
|
|
<input type="text"
|
|
class="form-control"
|
|
id="customer_address"
|
|
name="customer_address"
|
|
placeholder="Enter Customer Address"
|
|
value="<?php echo $order_data['order']['customer_address'] ?>"
|
|
autocomplete="off"
|
|
<?php echo !$is_editable ? 'disabled readonly' : ''; ?>>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="gross_amount" class="col-sm-5 control-label" style="text-align:left;">Téléphone du client</label>
|
|
<div class="col-sm-7">
|
|
<input type="text"
|
|
class="form-control"
|
|
id="customer_phone"
|
|
name="customer_phone"
|
|
placeholder="Enter Customer Phone"
|
|
value="<?php echo $order_data['order']['customer_phone'] ?>"
|
|
autocomplete="off"
|
|
<?php echo !$is_editable ? 'disabled readonly' : ''; ?>>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="gross_amount" class="col-sm-5 control-label" style="text-align:left;">CIN du client</label>
|
|
<div class="col-sm-7">
|
|
<input type="text"
|
|
class="form-control"
|
|
id="customer_cin"
|
|
name="customer_cin"
|
|
placeholder="Enter Customer CIN"
|
|
value="<?php echo $order_data['order']['customer_cin'] ?>"
|
|
autocomplete="off"
|
|
<?php echo !$is_editable ? 'disabled readonly' : ''; ?>>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<br /> <br />
|
|
<table class="table table-bordered" id="product_info_table">
|
|
<thead>
|
|
<tr>
|
|
<th style="width:50%">Produit</th>
|
|
<th style="width:10%">Quantité</th>
|
|
<th style="width:10%">Prix unitaire</th>
|
|
<th style="width:20%">Montant</th>
|
|
<th style="width:10%">
|
|
<?php if ($is_editable): ?>
|
|
<button type="button" id="add_row" class="btn btn-default"><i class="fa fa-plus"></i></button>
|
|
<?php endif; ?>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<?php if (isset($order_data['order_item'])): ?>
|
|
<?php $x = 1; ?>
|
|
<?php foreach ($order_data['order_item'] as $key => $val): ?>
|
|
<tr id="row_<?php echo $x; ?>">
|
|
<td>
|
|
<select class="form-control select_group product"
|
|
data-row-id="row_<?php echo $x; ?>"
|
|
id="product_<?php echo $x; ?>"
|
|
name="product[]"
|
|
style="width:100%;"
|
|
onchange="getProductData(<?php echo $x; ?>)"
|
|
<?php echo !$is_editable ? 'disabled' : 'required'; ?>>
|
|
<option value=""></option>
|
|
<?php foreach ($products as $k => $v): ?>
|
|
<option value="<?php echo $v['id'] ?>" <?php if ($val['product_id'] == $v['id']) { echo "selected='selected'"; } ?>><?php echo $v['name'] ?></option>
|
|
<?php endforeach ?>
|
|
</select>
|
|
</td>
|
|
<td>
|
|
<input type="number"
|
|
name="qty[]"
|
|
id="qty_<?php echo $x; ?>"
|
|
class="form-control"
|
|
onkeyup="getTotal(<?php echo $x; ?>)"
|
|
value="<?php echo $val['qty'] ?>"
|
|
autocomplete="off"
|
|
<?php echo !$is_editable ? 'disabled readonly' : 'required'; ?>>
|
|
</td>
|
|
<td>
|
|
<input type="text"
|
|
name="rate[]"
|
|
id="rate_<?php echo $x; ?>"
|
|
class="form-control"
|
|
disabled
|
|
value="<?php echo $val['rate'] ?>"
|
|
autocomplete="off">
|
|
<input type="hidden"
|
|
name="rate_value[]"
|
|
id="rate_value_<?php echo $x; ?>"
|
|
class="form-control"
|
|
value="<?php echo $val['rate'] ?>"
|
|
autocomplete="off">
|
|
</td>
|
|
<td>
|
|
<input type="text"
|
|
name="amount[]"
|
|
id="amount_<?php echo $x; ?>"
|
|
class="form-control"
|
|
disabled
|
|
value="<?php echo $val['amount'] ?>"
|
|
autocomplete="off">
|
|
<input type="hidden"
|
|
name="amount_value[]"
|
|
id="amount_value_<?php echo $x; ?>"
|
|
class="form-control"
|
|
value="<?php echo $val['amount'] ?>"
|
|
autocomplete="off">
|
|
</td>
|
|
<td>
|
|
<?php if ($is_editable): ?>
|
|
<button type="button" class="btn btn-default" onclick="removeRow('<?php echo $x; ?>')">
|
|
<i class="fa fa-close"></i>
|
|
</button>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php $x++; ?>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
|
|
<br /> <br />
|
|
|
|
<div class="col-md-6 col-xs-12 pull pull-right">
|
|
|
|
<div class="form-group">
|
|
<label for="gross_amount" class="col-sm-5 control-label">Prix affiché</label>
|
|
<div class="col-sm-7">
|
|
<input type="text"
|
|
class="form-control"
|
|
id="gross_amount"
|
|
name="gross_amount"
|
|
disabled
|
|
value="<?php echo $order_data['order']['gross_amount'] ?>"
|
|
autocomplete="off">
|
|
<input type="hidden"
|
|
class="form-control"
|
|
id="gross_amount_value"
|
|
name="gross_amount_value"
|
|
value="<?php echo $order_data['order']['gross_amount'] ?>"
|
|
autocomplete="off">
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ✅ ALERTE VISUELLE INTÉGRÉE -->
|
|
<div id="price_alert" style="display: none; margin-bottom: 15px;">
|
|
<div class="col-sm-offset-5 col-sm-7">
|
|
<div style="background-color: #f8d7da; border: 1px solid #f5c6cb; color: #721c24; padding: 10px 15px; border-radius: 4px; animation: slideDown 0.3s ease-out;">
|
|
<i class="fa fa-exclamation-triangle" style="margin-right: 8px;"></i>
|
|
<strong>Attention !</strong> <span id="price_alert_message"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="discount" class="col-sm-5 control-label">Prix demandé</label>
|
|
<div class="col-sm-7">
|
|
<?php
|
|
$users = session()->get('user');
|
|
if($users && $users['group_name'] == 'COMMERCIALE' && $is_editable):
|
|
?>
|
|
<input type="text"
|
|
class="form-control"
|
|
id="discount"
|
|
name="discount"
|
|
placeholder="Discount"
|
|
onkeyup="subAmount()"
|
|
value="<?php echo $order_data['order']['discount'] ?>"
|
|
autocomplete="off">
|
|
<?php else: ?>
|
|
<input type="text"
|
|
class="form-control"
|
|
id="discount"
|
|
name="discount"
|
|
readonly
|
|
value="<?php echo $order_data['order']['discount'] ?>"
|
|
autocomplete="off">
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="net_amount" class="col-sm-5 control-label">Remise</label>
|
|
<div class="col-sm-7">
|
|
<input type="text"
|
|
class="form-control"
|
|
id="net_amount"
|
|
name="net_amount"
|
|
disabled
|
|
value="<?php echo $order_data['order']['net_amount'] ?>"
|
|
autocomplete="off">
|
|
<input type="hidden"
|
|
class="form-control"
|
|
id="net_amount_value"
|
|
name="net_amount_value"
|
|
value="<?php echo $order_data['order']['net_amount'] ?>"
|
|
autocomplete="off">
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
$users = session()->get('user');
|
|
if ($users && $users['group_name'] !== 'COMMERCIALE'):
|
|
?>
|
|
|
|
<div class="form-group">
|
|
<label for="paid_status" class="col-sm-5 control-label">Tranche de paiement</label>
|
|
<div class="col-sm-7">
|
|
<select class="form-control"
|
|
id="payment_mode"
|
|
name="payment_mode"
|
|
<?php echo !$is_editable ? 'disabled' : ''; ?>>
|
|
<option value="1" selected>une tranche</option>
|
|
<option value="2">deux tranches</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group" id="montant_reference" style="display: none">
|
|
<label class="col-sm-5 control-label">Montant à répartir</label>
|
|
<div class="col-sm-7">
|
|
<input type="text" class="form-control" id="montant_total_tranches" disabled>
|
|
<input type="hidden" id="montant_total_tranches_value">
|
|
<small class="text-muted" id="montant_source_label"></small>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="payment-tranches">
|
|
<div class="form-group" id="paid_status_1" style="display: none">
|
|
<label for="paid_status_1" class="col-sm-5 control-label">Tranche 1</label>
|
|
<div class="col-sm-3">
|
|
<select class="form-control"
|
|
id="payment_mode_1"
|
|
name="order_payment_mode_1"
|
|
<?php echo !$is_editable ? 'disabled' : ''; ?>>
|
|
<option value="MVOLA">MVOLA</option>
|
|
<option value="Virement Bancaire">Virement Bancaire</option>
|
|
<option value="En espèce">En espèce</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<input type="number"
|
|
class="form-control"
|
|
id="payment_amount_1"
|
|
name="tranche_1"
|
|
placeholder="Montant"
|
|
onkeyup="calculerTranche2()"
|
|
<?php echo !$is_editable ? 'disabled readonly' : ''; ?>>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group" id="paid_status_2" style="display: none">
|
|
<label for="paid_status_2" class="col-sm-5 control-label">Tranche 2 (Reste)</label>
|
|
<div class="col-sm-3">
|
|
<select class="form-control"
|
|
id="payment_mode_2"
|
|
name="order_payment_mode_2"
|
|
<?php echo !$is_editable ? 'disabled' : ''; ?>>
|
|
<option value="MVOLA">MVOLA</option>
|
|
<option value="Virement Bancaire">Virement Bancaire</option>
|
|
<option value="En espèce">En espèce</option>
|
|
</select>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<input type="number"
|
|
class="form-control"
|
|
id="payment_amount_2"
|
|
name="tranche_2"
|
|
placeholder="Montant"
|
|
readonly>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="paid_status" class="col-sm-5 control-label">Statut payant</label>
|
|
<div class="col-sm-7">
|
|
<select type="text"
|
|
class="form-control"
|
|
id="paid_status"
|
|
name="paid_status"
|
|
<?php echo !$is_editable ? 'disabled' : ''; ?>>
|
|
<option value="1">Validé</option>
|
|
<option value="2">Refusé</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- /.box-body -->
|
|
|
|
<div class="box-footer">
|
|
<input type="hidden" name="service_charge_rate" value="<?php echo $company_data['service_charge_value'] ?>" autocomplete="off">
|
|
<input type="hidden" name="vat_charge_rate" value="<?php echo $company_data['vat_charge_value'] ?>" autocomplete="off">
|
|
|
|
<a target="__blank" id="Imprimente" href="<?php echo base_url() . 'orders/printDiv/' . $order_data['order']['id'] ?>" class="btn btn-default">Imprimer</a>
|
|
|
|
<?php if ($is_editable): ?>
|
|
<button type="submit" class="btn btn-primary">Enregistrer</button>
|
|
<?php endif; ?>
|
|
|
|
<a href="<?php echo base_url('orders/') ?>" class="btn btn-warning">Retour</a>
|
|
</div>
|
|
</form>
|
|
<!-- /.box-body -->
|
|
</div>
|
|
<!-- /.box -->
|
|
</div>
|
|
<!-- col-md-12 -->
|
|
</div>
|
|
<!-- /.row -->
|
|
</section>
|
|
<!-- /.content -->
|
|
</div>
|
|
<!-- /.content-wrapper -->
|
|
|
|
<style>
|
|
/* ✅ Animation pour l'alerte */
|
|
@keyframes slideDown {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-10px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
/* ✅ Style pour l'input en erreur */
|
|
.input-error {
|
|
border: 2px solid #dc3545 !important;
|
|
box-shadow: 0 0 8px rgba(220, 53, 69, 0.5) !important;
|
|
animation: pulse 0.5s ease-in-out;
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% { box-shadow: 0 0 8px rgba(220, 53, 69, 0.5); }
|
|
50% { box-shadow: 0 0 15px rgba(220, 53, 69, 0.8); }
|
|
}
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
var base_url = "<?php echo base_url(); ?>";
|
|
var idData = "<?php echo $order_data['order']['id']; ?>";
|
|
var is_editable = <?php echo $is_editable ? 'true' : 'false'; ?>;
|
|
|
|
let Imprimente = document.getElementById('Imprimente');
|
|
let typesCommande = document.getElementById('typesCommande');
|
|
|
|
typesCommande.addEventListener('change', function () {
|
|
if (typesCommande.value == 1) {
|
|
Imprimente.removeAttribute("href");
|
|
Imprimente.setAttribute("href", base_url +'orders/printDiv/' + idData);
|
|
} else if(typesCommande.value == 3) {
|
|
Imprimente.removeAttribute("href");
|
|
Imprimente.setAttribute("href", base_url +'orders/printDivBL/' + idData);
|
|
} else {
|
|
Imprimente.removeAttribute("href");
|
|
Imprimente.setAttribute("href", base_url +'orders/printDivBLF/' + idData);
|
|
}
|
|
});
|
|
|
|
// ============================================
|
|
// 🔹 FONCTION D'ALERTE VISUELLE
|
|
// ============================================
|
|
function showPriceAlert(message) {
|
|
const alertBox = $('#price_alert');
|
|
const discountInput = $('#discount');
|
|
|
|
$('#price_alert_message').text(message);
|
|
alertBox.slideDown(300);
|
|
discountInput.addClass('input-error');
|
|
|
|
setTimeout(function() {
|
|
alertBox.slideUp(300);
|
|
discountInput.removeClass('input-error');
|
|
}, 3500);
|
|
}
|
|
|
|
function hidePriceAlert() {
|
|
$('#price_alert').slideUp(300);
|
|
$('#discount').removeClass('input-error');
|
|
}
|
|
|
|
// ============================================
|
|
// 🔹 VALIDATION DU PRIX DEMANDÉ
|
|
// ============================================
|
|
function validateDiscount() {
|
|
if (!is_editable) return true; // ✅ Pas de validation si non éditable
|
|
|
|
var discount = parseFloat($('#discount').val());
|
|
var grossAmount = parseFloat($('#gross_amount_value').val()) || 0;
|
|
|
|
if (discount < 0) {
|
|
showPriceAlert("Le prix demandé ne peut pas être négatif !");
|
|
$('#discount').val('');
|
|
return false;
|
|
}
|
|
|
|
if (discount > grossAmount) {
|
|
showPriceAlert("Le prix demandé ne peut pas dépasser le prix affiché (" + grossAmount.toFixed(2) + ") !");
|
|
$('#discount').val(grossAmount.toFixed(2));
|
|
subAmount();
|
|
return false;
|
|
}
|
|
|
|
hidePriceAlert();
|
|
return true;
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
$(".select_group").select2();
|
|
|
|
$("#mainOrdersNav").addClass('active');
|
|
$("#manageOrdersNav").addClass('active');
|
|
|
|
// ✅ Désactiver toutes les interactions si non éditable
|
|
if (!is_editable) {
|
|
$('input, select, textarea').prop('disabled', true);
|
|
$('#add_row').hide();
|
|
$('.btn-default[onclick^="removeRow"]').hide();
|
|
}
|
|
|
|
// ✅ Validation en temps réel du prix demandé
|
|
if (is_editable) {
|
|
$('#discount').on('keyup change', function() {
|
|
validateDiscount();
|
|
});
|
|
}
|
|
|
|
// ============================================
|
|
// 🔹 GESTION DES TRANCHES DE PAIEMENT
|
|
// ============================================
|
|
var paymentTranche = 1;
|
|
var netAmount = parseFloat($('#net_amount_value').val()) || 0;
|
|
$('#payment_amount_1').val(netAmount);
|
|
|
|
function addPaymentTranche(paymentTranche) {
|
|
if (parseInt(paymentTranche) === 2) {
|
|
$("#paid_status_1").show();
|
|
$("#paid_status_2").show();
|
|
|
|
var amount1 = parseFloat($('#payment_amount_1').val()) || 0;
|
|
var amount2 = netAmount - amount1;
|
|
$('#payment_amount_2').val(amount2);
|
|
} else {
|
|
$("#paid_status_1").show();
|
|
$("#paid_status_2").hide();
|
|
$('#payment_mode_2').val('');
|
|
}
|
|
}
|
|
|
|
$("#payment_mode").on("change", function() {
|
|
if (is_editable) {
|
|
addPaymentTranche($(this).val());
|
|
updateMontantTranches();
|
|
}
|
|
});
|
|
|
|
$('#payment_amount_1').on("input", function() {
|
|
if (is_editable) {
|
|
var amount1 = parseFloat($(this).val()) || 0;
|
|
var amount2 = netAmount - amount1;
|
|
$('#payment_amount_2').val(amount2);
|
|
}
|
|
});
|
|
|
|
addPaymentTranche(paymentTranche);
|
|
|
|
// ============================================
|
|
// 🔹 TABLEAU DE PRODUITS
|
|
// ============================================
|
|
if (is_editable) {
|
|
$("#add_row").unbind('click').bind('click', function() {
|
|
var table = $("#product_info_table");
|
|
var count_table_tbody_tr = $("#product_info_table tbody tr").length;
|
|
var row_id = count_table_tbody_tr + 1;
|
|
|
|
$.ajax({
|
|
url: base_url + '/orders/getTableProductRow/',
|
|
type: 'post',
|
|
dataType: 'json',
|
|
success: function(response) {
|
|
var html = '<tr id="row_' + row_id + '">' +
|
|
'<td>' +
|
|
'<select class="form-control select_group product" data-row-id="' + row_id + '" id="product_' + row_id + '" name="product[]" style="width:100%;" onchange="getProductData(' + row_id + ')">' +
|
|
'<option value=""></option>';
|
|
$.each(response, function(index, value) {
|
|
html += '<option value="' + value.id + '">' + value.name + '</option>';
|
|
});
|
|
|
|
html += '</select>' +
|
|
'</td>' +
|
|
'<td><input type="number" name="qty[]" id="qty_' + row_id + '" class="form-control" onkeyup="getTotal(' + row_id + ')"></td>' +
|
|
'<td><input type="text" name="rate[]" id="rate_' + row_id + '" class="form-control" disabled><input type="hidden" name="rate_value[]" id="rate_value_' + row_id + '" class="form-control"></td>' +
|
|
'<td><input type="text" name="amount[]" id="amount_' + row_id + '" class="form-control" disabled><input type="hidden" name="amount_value[]" id="amount_value_' + row_id + '" class="form-control"></td>' +
|
|
'<td><button type="button" class="btn btn-default" onclick="removeRow(\'' + row_id + '\')"><i class="fa fa-close"></i></button></td>' +
|
|
'</tr>';
|
|
|
|
if (count_table_tbody_tr >= 1) {
|
|
$("#product_info_table tbody tr:last").after(html);
|
|
} else {
|
|
$("#product_info_table tbody").html(html);
|
|
}
|
|
|
|
$(".product").select2();
|
|
}
|
|
});
|
|
|
|
return false;
|
|
});
|
|
}
|
|
}); // /document.ready
|
|
|
|
// ============================================
|
|
// 🔹 CALCUL DU TOTAL
|
|
// ============================================
|
|
function getTotal(row = null) {
|
|
if (!is_editable) return; // ✅ Bloquer si non éditable
|
|
|
|
if (row) {
|
|
var total = Number($("#rate_value_" + row).val()) * Number($("#qty_" + row).val());
|
|
total = total.toFixed(2);
|
|
$("#amount_" + row).val(total);
|
|
$("#amount_value_" + row).val(total);
|
|
subAmount();
|
|
} else {
|
|
alert('no row !! please refresh the page');
|
|
}
|
|
}
|
|
|
|
// 🔹 OBTENIR LES DONNÉES PRODUIT
|
|
function getProductData(row_id) {
|
|
if (!is_editable) return; // ✅ Bloquer si non éditable
|
|
|
|
var product_id = $("#product_" + row_id).val();
|
|
if (product_id == "") {
|
|
$("#rate_" + row_id).val("");
|
|
$("#rate_value_" + row_id).val("");
|
|
$("#qty_" + row_id).val("");
|
|
$("#amount_" + row_id).val("");
|
|
$("#amount_value_" + row_id).val("");
|
|
} else {
|
|
$.ajax({
|
|
url: base_url + 'orders/getProductValueById',
|
|
type: 'post',
|
|
data: { product_id: product_id },
|
|
dataType: 'json',
|
|
success: function(response) {
|
|
$("#rate_" + row_id).val(response.price);
|
|
$("#rate_value_" + row_id).val(response.price);
|
|
$("#qty_" + row_id).val(1);
|
|
$("#qty_value_" + row_id).val(1);
|
|
var total = Number(response.price) * 1;
|
|
total = total.toFixed(2);
|
|
$("#amount_" + row_id).val(total);
|
|
$("#amount_value_" + row_id).val(total);
|
|
subAmount();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// ============================================
|
|
// 🔹 CALCUL DU MONTANT TOTAL (AVEC TVA, REMISE, ETC.)
|
|
// ============================================
|
|
function subAmount() {
|
|
if (!is_editable) return; // ✅ Bloquer si non éditable
|
|
|
|
var service_charge = <?php echo ($company_data['service_charge_value'] > 0) ? $company_data['service_charge_value'] : 0; ?>;
|
|
var vat_charge = <?php echo ($company_data['vat_charge_value'] > 0) ? $company_data['vat_charge_value'] : 0; ?>;
|
|
|
|
var tableProductLength = $("#product_info_table tbody tr").length;
|
|
var totalSubAmount = 0;
|
|
for (x = 0; x < tableProductLength; x++) {
|
|
var tr = $("#product_info_table tbody tr")[x];
|
|
var count = $(tr).attr('id');
|
|
count = count.substring(4);
|
|
totalSubAmount = Number(totalSubAmount) + Number($("#amount_" + count).val());
|
|
}
|
|
|
|
totalSubAmount = totalSubAmount.toFixed(2);
|
|
$("#gross_amount").val(totalSubAmount);
|
|
$("#gross_amount_value").val(totalSubAmount);
|
|
|
|
var vat = (Number($("#gross_amount").val()) / 100) * vat_charge;
|
|
vat = vat.toFixed(2);
|
|
$("#vat_charge").val(vat);
|
|
$("#vat_charge_value").val(vat);
|
|
|
|
var service = (Number($("#gross_amount").val()) / 100) * service_charge;
|
|
service = service.toFixed(2);
|
|
$("#service_charge").val(service);
|
|
$("#service_charge_value").val(service);
|
|
|
|
var totalAmount = (Number(totalSubAmount));
|
|
totalAmount = totalAmount.toFixed(2);
|
|
|
|
var discount = $("#discount").val();
|
|
if (discount) {
|
|
if (validateDiscount()) {
|
|
var grandTotal = Number(totalAmount) - Number(discount);
|
|
grandTotal = grandTotal.toFixed(2);
|
|
$("#net_amount").val(grandTotal);
|
|
$("#net_amount_value").val(grandTotal);
|
|
}
|
|
} else {
|
|
$("#net_amount").val(totalAmount);
|
|
$("#net_amount_value").val(totalAmount);
|
|
}
|
|
|
|
var paid_amount = Number($("#paid_amount").val());
|
|
if (paid_amount) {
|
|
var net_amount_value = Number($("#net_amount_value").val());
|
|
var remaning = net_amount_value - paid_amount;
|
|
$("#remaining").val(remaning.toFixed(2));
|
|
$("#remaining_value").val(remaning.toFixed(2));
|
|
}
|
|
|
|
updateMontantTranches();
|
|
}
|
|
|
|
// ============================================
|
|
// 🔹 AUTRES FONCTIONS
|
|
// ============================================
|
|
function paidAmount() {
|
|
if (!is_editable) return;
|
|
|
|
var grandTotal = $("#net_amount_value").val();
|
|
if (grandTotal) {
|
|
var dueAmount = Number($("#net_amount_value").val()) - Number($("#paid_amount").val());
|
|
dueAmount = dueAmount.toFixed(2);
|
|
$("#remaining").val(dueAmount);
|
|
$("#remaining_value").val(dueAmount);
|
|
}
|
|
}
|
|
|
|
function removeRow(tr_id) {
|
|
if (!is_editable) return; // ✅ Bloquer si non éditable
|
|
|
|
$("#product_info_table tbody tr#row_" + tr_id).remove();
|
|
subAmount();
|
|
}
|
|
|
|
// ============================================
|
|
// 🔹 GESTION MONTANT DE TRANCHES
|
|
// ============================================
|
|
function getMontantPourTranches() {
|
|
var discount = parseFloat($("#discount").val()) || 0;
|
|
var grossAmount = parseFloat($("#gross_amount_value").val()) || 0;
|
|
return discount > 0 ? discount : grossAmount;
|
|
}
|
|
|
|
function updateMontantTranches() {
|
|
if (!is_editable) return;
|
|
|
|
var montant = getMontantPourTranches();
|
|
var discount = parseFloat($("#discount").val()) || 0;
|
|
|
|
$("#montant_total_tranches").val(montant.toFixed(2));
|
|
$("#montant_total_tranches_value").val(montant);
|
|
|
|
if (discount > 0) {
|
|
$("#montant_source_label").text("(Prix avec remise acceptée)");
|
|
} else {
|
|
$("#montant_source_label").text("(Montant brut)");
|
|
}
|
|
|
|
if ($("#payment_amount_1").val()) {
|
|
calculerTranche2();
|
|
}
|
|
}
|
|
|
|
function calculerTranche2() {
|
|
if (!is_editable) return;
|
|
|
|
var montantTotal = getMontantPourTranches();
|
|
var tranche1 = parseFloat($("#payment_amount_1").val()) || 0;
|
|
var tranche2 = montantTotal - tranche1;
|
|
if (tranche2 < 0) tranche2 = 0;
|
|
$("#payment_amount_2").val(tranche2.toFixed(2));
|
|
}
|
|
|
|
if (is_editable) {
|
|
$("#discount").on('keyup', function() {
|
|
updateMontantTranches();
|
|
});
|
|
}
|
|
|
|
const net_amount_value = document.getElementById('net_amount_value');
|
|
const net_amount = document.getElementById('net_amount');
|
|
const payment_amount_1 = document.getElementById('payment_amount_1');
|
|
if (payment_amount_1 && net_amount) {
|
|
payment_amount_1.value = net_amount.value;
|
|
}
|
|
</script>
|