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.
342 lines
16 KiB
342 lines
16 KiB
<!-- Content Wrapper. Contains page content -->
|
|
<div class="content-wrapper">
|
|
<?php
|
|
function stringToArray($data)
|
|
{
|
|
// Ensure the string is properly formatted for JSON decoding
|
|
$data = str_replace("'", '"', $data); // Convert single quotes to double quotes
|
|
return json_decode($data, true);
|
|
}
|
|
?>
|
|
<!-- Content Header (Page header) -->
|
|
<section class="content-header">
|
|
<h1>
|
|
Gérer les
|
|
<small>Produits</small>
|
|
</h1>
|
|
<ol class="breadcrumb">
|
|
<li><a href="#"><i class="fa fa-dashboard"></i> Accueil</a></li>
|
|
<li class="active">Produits</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<!-- Main content -->
|
|
<section class="content">
|
|
<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-error 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; ?>
|
|
|
|
<div class="box">
|
|
<div class="box-header">
|
|
<h3 class="box-title">Mise à jours Moto</h3>
|
|
</div>
|
|
|
|
<form role="form" action="<?php base_url('users/update') ?>" method="post" enctype="multipart/form-data">
|
|
<div class="box-body">
|
|
<!-- Image actuelle -->
|
|
<div class="form-group">
|
|
<label>Image: </label>
|
|
<img src="<?php echo base_url() . 'assets/images/product_image/' . $product_data['image'] ?>" width="150" height="150" class="img-circle">
|
|
</div>
|
|
|
|
<!-- Nouvelle Image -->
|
|
<div class="form-group">
|
|
<label for="product_image">Nouvelle Image</label>
|
|
<div class="kv-avatar">
|
|
<div class="file-loading">
|
|
<input id="product_image" name="product_image" type="file" accept="image/*">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Nom du produit -->
|
|
<div class="form-group">
|
|
<label for="product_name">Nom de Moto</label>
|
|
<input type="text" class="form-control" id="product_name" name="nom_de_produit" placeholder="Nom du moto" autocomplete="off" value="<?php echo $product_data['name']; ?>" />
|
|
</div>
|
|
|
|
<!-- Marque -->
|
|
<div class="form-group">
|
|
<label for="marque">Marque</label>
|
|
<select class="form-control" id="marque" name="marque">
|
|
<?php foreach ($marque as $k => $v): ?>
|
|
<option value="<?php echo $v['id'] ?>" <?php if ($product_data['marque'] == $v['id']) echo "selected"; ?>><?php echo $v['name'] ?></option>
|
|
<?php endforeach ?>
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Numéro de moteur -->
|
|
<div class="form-group">
|
|
<label for="moteur">Numéro de moteur</label>
|
|
<input type="text" class="form-control" id="moteur" name="numero_de_moteur" placeholder="Numéro de série" autocomplete="off" value="<?php echo $product_data['numero_de_moteur']; ?>" />
|
|
</div>
|
|
|
|
<!-- Châssis -->
|
|
<div class="form-group">
|
|
<label for="chassis">Châssis</label>
|
|
<input type="text" class="form-control" id="chassis" name="chasis" placeholder="Chassis" autocomplete="off" value="<?php echo $product_data['chasis']; ?>" />
|
|
</div>
|
|
|
|
<!-- Prix d'achat -->
|
|
<div class="form-group">
|
|
<label for="price">Prix d'Achat</label>
|
|
<input type="number" min="0" class="form-control" id="price" name="price" placeholder="Prix d'achat" autocomplete="off" value="<?php echo $product_data['price']; ?>" />
|
|
</div>
|
|
|
|
<!-- Prix de vente -->
|
|
<div class="form-group">
|
|
<label for="price_vente">Prix de Vente</label>
|
|
<input type="number" min="0" class="form-control" id="price_vente" name="price_vente" placeholder="Prix de vente" autocomplete="off" value="<?php echo $product_data['prix_vente']; ?>" required />
|
|
</div>
|
|
|
|
<!-- Prix minimal -->
|
|
<div class="form-group">
|
|
<label for="price_min">Prix Minimal</label>
|
|
<input type="number" min="0" class="form-control" id="price_min" name="price_min" placeholder="Prix de vente minimal autorisé" autocomplete="off" value="<?= old('price_min') ?: $prix_minimal ?>" required />
|
|
<small id="price_min_error" style="color:red; display:none;">Le prix minimal ne peut pas être supérieur au prix de vente</small>
|
|
</div>
|
|
|
|
<!-- Date d'arrivage -->
|
|
<div class="form-group">
|
|
<label for="datea">Date d'arrivage</label>
|
|
<input type="date" class="form-control" id="datea" name="datea" autocomplete="off" value="<?php echo $product_data['date_arivage']; ?>" />
|
|
</div>
|
|
|
|
<!-- Puissance -->
|
|
<div class="form-group">
|
|
<label for="puissance">Puissances</label>
|
|
<input type="text" class="form-control" id="puissance" name="puissance" placeholder="Puissances" autocomplete="off" value="<?php echo $product_data['puissance']; ?>" />
|
|
</div>
|
|
|
|
<!-- Clé -->
|
|
<div class="form-group">
|
|
<label for="cler">Clé</label>
|
|
<input type="text" class="form-control" id="cler" name="cler" placeholder="Type de clé" autocomplete="off" value="<?php echo $product_data['cler']; ?>" />
|
|
</div>
|
|
|
|
<!-- Description -->
|
|
<div class="form-group">
|
|
<label for="description">Description</label>
|
|
<textarea type="text" class="form-control" id="description" name="description" placeholder="Description" autocomplete="off"><?php echo $product_data['description']; ?></textarea>
|
|
</div>
|
|
|
|
<!-- Numéro de série -->
|
|
<div class="form-group">
|
|
<label for="sku">Numéro de série</label>
|
|
<input type="text" class="form-control" id="sku" name="numero_de_serie" placeholder="Numéro de série" autocomplete="off" value="<?php echo $product_data['sku']; ?>" />
|
|
</div>
|
|
|
|
<!-- Catégories -->
|
|
<div class="form-group">
|
|
<label for="categorie">Catégories</label>
|
|
<?php
|
|
$rawCats = $product_data['categorie_id'] ?? null;
|
|
if (is_array($rawCats)) {
|
|
$catIds = array_map('intval', $rawCats);
|
|
} elseif (is_string($rawCats)) {
|
|
$catIds = array_filter(array_map('intval', explode(',', $rawCats)), fn($id) => $id > 0);
|
|
} elseif (is_int($rawCats) || ctype_digit((string)$rawCats)) {
|
|
$catIds = [(int) $rawCats];
|
|
} else {
|
|
$catIds = [];
|
|
}
|
|
?>
|
|
<select class="form-control select_group" id="categorie" name="categorie[]" multiple="multiple">
|
|
<?php foreach ($categorie as $k => $v): ?>
|
|
<option value="<?= $v['id']; ?>" <?= in_array($v['id'], $catIds, true) ? 'selected="selected"' : '' ?>><?= esc($v['name']); ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Magasin -->
|
|
<div class="form-group">
|
|
<label for="store">Magasin</label>
|
|
<select class="form-control select_group" id="store" name="store">
|
|
<?php foreach ($stores as $k => $v): ?>
|
|
<option value="<?php echo $v['id'] ?>" <?php if ($product_data['store_id'] == $v['id']) echo "selected"; ?>><?php echo $v['name'] ?></option>
|
|
<?php endforeach ?>
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Disponibilité -->
|
|
<div class="form-group">
|
|
<label for="availability">Disponibilité</label>
|
|
<select class="form-control" id="availability" name="availability">
|
|
<option value="1" <?php if ($product_data['availability'] == 1) echo "selected"; ?>>Oui</option>
|
|
<option value="0" <?php if ($product_data['availability'] == 0) echo "selected"; ?>>Non</option>
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Etats -->
|
|
<div class="form-group">
|
|
<label for="etat">Etats</label>
|
|
<select class="form-control" id="etat" name="etats">
|
|
<option value="1" <?php if ($product_data['etats'] == 1) echo "selected"; ?>>Kit</option>
|
|
<option value="2" <?php if ($product_data['etats'] != 1) echo "selected"; ?>>Non Kit</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group" id="boxsuplementairekit"></div>
|
|
|
|
<!-- Pièce manquante -->
|
|
<div class="form-group">
|
|
<label for="info">Pièce Manquant</label>
|
|
<select class="form-control" id="info" name="info">
|
|
<option value="2" <?php if ($product_data['info'] != 1) echo "selected"; ?>>Non</option>
|
|
<option value="1" <?php if ($product_data['info'] == 1) echo "selected"; ?>>Oui</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group" id="boxsuplementaire"></div>
|
|
|
|
<!-- Type -->
|
|
<div class="form-group">
|
|
<label for="type">Type</label>
|
|
<select class="form-control" id="type" name="type">
|
|
<option value="A" <?php if ($product_data['type'] == "A") echo "selected"; ?>>A</option>
|
|
<option value="B" <?php if ($product_data['type'] == "B") echo "selected"; ?>>B</option>
|
|
<option value="C" <?php if ($product_data['type'] == "C") echo "selected"; ?>>C</option>
|
|
<option value="D" <?php if ($product_data['type'] == "D") echo "selected"; ?>>D</option>
|
|
</select>
|
|
</div>
|
|
|
|
</div> <!-- /.box-body -->
|
|
|
|
<div class="box-footer">
|
|
<button type="submit" class="btn btn-primary">Enregistrer</button>
|
|
<a href="<?php echo base_url('products/') ?>" class="btn btn-warning">Retour</a>
|
|
</div>
|
|
</form>
|
|
</div> <!-- /.box -->
|
|
</div> <!-- /.col-md-12 -->
|
|
</div> <!-- /.row -->
|
|
</section> <!-- /.content -->
|
|
</div> <!-- /.content-wrapper -->
|
|
|
|
<script type="text/javascript">
|
|
$(document).ready(function() {
|
|
// --- Initialisations ---
|
|
$(".select_group").select2();
|
|
$("#description").wysihtml5();
|
|
$("#mainProductNav").addClass('active');
|
|
$("#manageProductNav").addClass('active');
|
|
|
|
// --- Gestion image ---
|
|
var btnCust = '<button type="button" class="btn btn-secondary" title="Add picture tags" ' +
|
|
'onclick="alert(\'Call your custom code here.\')">' +
|
|
'<i class="glyphicon glyphicon-tag"></i>' +
|
|
'</button>';
|
|
$("#product_image").fileinput({
|
|
overwriteInitial: true,
|
|
maxFileSize: 1500,
|
|
showClose: false,
|
|
showCaption: false,
|
|
browseLabel: '',
|
|
removeLabel: '',
|
|
browseIcon: '<i class="glyphicon glyphicon-folder-open"></i>',
|
|
removeIcon: '<i class="glyphicon glyphicon-remove"></i>',
|
|
removeTitle: 'Cancel or reset changes',
|
|
elErrorContainer: '#kv-avatar-errors-1',
|
|
msgErrorClass: 'alert alert-block alert-danger',
|
|
layoutTemplates: { main2: '{preview} ' + btnCust + ' {remove} {browse}' },
|
|
allowedFileExtensions: ["jpg", "png", "gif", "jpeg", "webp"]
|
|
});
|
|
|
|
// --- Gestion champs supplémentaires ---
|
|
const info = document.getElementById('info');
|
|
const divSupp = document.getElementById('boxsuplementaire');
|
|
const etat = document.getElementById('etat');
|
|
const boxsuplementairekit = document.getElementById('boxsuplementairekit');
|
|
|
|
function afficherSupplements() {
|
|
if (info && info.value == 1) {
|
|
divSupp.innerHTML = `<label for="infoManque">Information</label>
|
|
<textarea type="text" class="form-control" id="infoManque" name="infoManque" placeholder="Description sur des trucs manquants" autocomplete="off"><?php echo $product_data['infoManque']; ?></textarea>`;
|
|
} else {
|
|
divSupp.innerHTML = '';
|
|
}
|
|
|
|
if (etat && etat.value == 1) {
|
|
boxsuplementairekit.innerHTML = `<label for="infoManquekit">Information sur le kit</label>
|
|
<textarea type="text" class="form-control" id="infoManquekit" name="infoManquekit" placeholder="Description sur le kit" autocomplete="off"><?php echo $product_data['infoManquekit']; ?></textarea>`;
|
|
} else {
|
|
boxsuplementairekit.innerHTML = '';
|
|
}
|
|
}
|
|
|
|
window.addEventListener('load', afficherSupplements);
|
|
if (info) info.addEventListener('change', afficherSupplements);
|
|
if (etat) etat.addEventListener('change', afficherSupplements);
|
|
|
|
// --- Vérification prix minimal < prix de vente ---
|
|
const priceMinInput = document.getElementById('price_min');
|
|
const priceVenteInput = document.getElementById('price_vente');
|
|
const priceMinError = document.getElementById('price_min_error');
|
|
|
|
function verifierPrix() {
|
|
let prixMin = parseFloat(priceMinInput.value.replace(/\s/g, '')) || 0;
|
|
let prixVente = parseFloat(priceVenteInput.value.replace(/\s/g, '')) || 0;
|
|
if (prixMin > prixVente) {
|
|
priceMinError.style.display = 'block';
|
|
} else {
|
|
priceMinError.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
if (priceMinInput) priceMinInput.addEventListener('input', verifierPrix);
|
|
if (priceVenteInput) priceVenteInput.addEventListener('input', verifierPrix);
|
|
|
|
// --- Formatage automatique des prix (avec affichage initial) ---
|
|
['price', 'price_vente', 'price_min'].forEach(id => {
|
|
const input = document.getElementById(id);
|
|
if (input) {
|
|
// Si c’est un input number, on le convertit en texte pour garder les espaces
|
|
if (input.type === "number") input.type = "text";
|
|
|
|
// 🟢 Formate dès la frappe
|
|
input.addEventListener('input', function(e) {
|
|
let val = e.target.value.replace(/\D/g, ''); // garde seulement les chiffres
|
|
e.target.value = val.replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
|
|
});
|
|
|
|
// 🟢 Formate aussi dès le chargement de la page (valeurs de la base)
|
|
let initialVal = input.value.replace(/\D/g, '');
|
|
if (initialVal) {
|
|
input.value = initialVal.replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
|
|
}
|
|
}
|
|
});
|
|
|
|
// --- Nettoyage des espaces avant soumission du formulaire ---
|
|
$("form").on('submit', function(e) {
|
|
let prixMin = parseFloat(priceMinInput.value.replace(/\s/g, '')) || 0;
|
|
let prixVente = parseFloat(priceVenteInput.value.replace(/\s/g, '')) || 0;
|
|
|
|
if (prixMin > prixVente) {
|
|
e.preventDefault();
|
|
alert("❌ Le prix minimal ne peut pas être supérieur au prix de vente !");
|
|
priceMinInput.focus();
|
|
return false;
|
|
}
|
|
|
|
// 🧹 Supprime les espaces avant envoi
|
|
['price', 'price_vente', 'price_min'].forEach(id => {
|
|
const input = document.getElementById(id);
|
|
if (input) {
|
|
input.value = input.value.replace(/\s/g, '');
|
|
}
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
|