feat(v2.0.3): Marchés hybrides et améliorations multiples
Fonctionnalités principales : 1. Marchés hybrides - Onglet Mercurial - Ajout onglet Mercurial avec style distinct (vert, gras, blanc) - Affichage des produits mercuriaux pour marchés hybrides - Filtrage automatique des produits "Hors Marché 999" - Documentation Phase 2 avec CAS 1 et CAS 2 de marchés hybrides - Règles métier pour validation différenciée (devis 100% mercurial vs mixte) 2. Corrections bugs - Fix flag chkChange sur onglet "Sélection Produits" (callback asynchrone) - Plus d'alerte intempestive après sauvegarde des produits 3. Outils de déploiement - Nouveau script deploy-file.sh pour déploiement unitaire (DEV/PROD) - Amélioration deploy-cleo.sh 4. Gestion multi-contacts (v2.0.3) - Contrôleur AJAX cjxcontacts.php - Script migration clients_contacts - Documentation complète 5. Documentation - Mise à jour TODO.md avec Phase 2 marchés hybrides - Mise à jour README.md v2.0.3 - Ajout RULES.md - Ajout migration_clients_contacts.sql 6. Nettoyage - Suppression fichiers obsolètes (conf_new.php, conf_old.php, uof_linet_20250911.sql) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
176
views/vdevis.php
176
views/vdevis.php
@@ -376,34 +376,34 @@ ob_start();
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2" for="inp_contact_nom">Contact :</label>
|
||||
<label class="control-label col-md-2" for="sel_contact">Contact :</label>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" id="inp_contact_nom" name="contact_nom" placeholder="Nom" required="required"/>
|
||||
<p class="help-block">Nom du contact</p>
|
||||
<select class="form-control" id="sel_contact" name="fk_contact" required="required">
|
||||
<option value="0">- Sélectionner un contact -</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="form-control" id="inp_contact_prenom" name="contact_prenom" placeholder="Prénom" required="required"/>
|
||||
<p class="help-block">Prénom du contact</p>
|
||||
<div class="col-md-3">
|
||||
<button type="button" class="btn btn-primary" id="btnGererContacts" disabled>Gérer les contacts</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2" for="inp_contact_fonction">Fonction du contact :</label>
|
||||
<div class="col-md-3">
|
||||
<input type="text" class="form-control" id="inp_contact_fonction" name="contact_fonction" required="required"/>
|
||||
</div>
|
||||
<label class="control-label col-md-2" for="inp_email">Email :</label>
|
||||
<div class="col-md-3">
|
||||
<input type="text" class="form-control" id="inp_email" name="email" required="required"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class=" form-group">
|
||||
<label class=" control-label col-md-2" for="inp_telephone">Tél :</label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control" id="inp_telephone" name="telephone" size="10" maxlength="18" placeholder="Fixe"/>
|
||||
</div>
|
||||
<label class=" control-label col-md-2" for="inp_mobile">Mob :</label>
|
||||
<div class="col-md-2">
|
||||
<input type="text" class="form-control" id="inp_mobile" name="mobile" size=" 10" maxlength="18" placeholder="Mobile"/>
|
||||
<div id="divContactInfos" style="display: none;">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2"></label>
|
||||
<div class="col-md-8">
|
||||
<div class="well well-sm">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<p class="mb-0"><strong>Nom et Prénom :</strong> <span id="info_contact_nom_prenom"></span></p>
|
||||
<p class="mb-0"><strong>Fonction :</strong> <span id="info_contact_fonction"></span></p>
|
||||
<p class="mb-0"><strong>Email :</strong> <span id="info_contact_email"></span></p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="mb-0"><strong>Téléphone :</strong> <span id="info_contact_telephone"></span></p>
|
||||
<p class="mb-0"><strong>Mobile :</strong> <span id="info_contact_mobile"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -556,25 +556,14 @@ ob_start();
|
||||
<input type="text" class="form-control numeric" id="inpTotalHT" name="inpTotalHT" readonly="readonly" tabindex="-1" size="12" maxlength="12"/>
|
||||
<div class="input-group-addon">€</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if ($Conf->_devIp) {
|
||||
echo '<div class="form-group">';
|
||||
echo '<label for="inpCoutTotalAchat">Coût total achat :</label>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if ($Conf->_devIp) {
|
||||
echo '<div class="input-group">';
|
||||
echo '<input type="text" class="form-control numeric" id="inpCoutTotalAchat" name="inpCoutTotalAchat" readonly="readonly" tabindex="-1" size="12" maxlength="12"/>';
|
||||
echo '<div class="input-group-addon">€</div>';
|
||||
echo '</div></div>';
|
||||
echo '<input type="hidden" id="inpCoutTotalAchat" name="inpCoutTotalAchat"/>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@@ -952,6 +941,117 @@ ob_start();
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal draggable fade" id="modalGererContacts" tabindex="-1" role="dialog" aria-labelledby="modalGererContactsTitre" data-backdrop="static">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" id="modGererContactsTitre"><i class="fa fa-address-book fa-lg"></i> Gestion des contacts du client</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="inp_fk_client_contacts" value="0"/>
|
||||
<div class="row mb-2">
|
||||
<div class="col-md-12">
|
||||
<button type="button" class="btn btn-success btn-sm" id="btnNouveauContact"><i class="fa fa-plus"></i> Nouveau contact</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped" id="tblContacts">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="20%">Nom</th>
|
||||
<th width="15%">Prénom</th>
|
||||
<th width="20%">Fonction</th>
|
||||
<th width="15%">Téléphone</th>
|
||||
<th width="20%">Email</th>
|
||||
<th width="10%" class="text-center">Principal</th>
|
||||
<th width="15%" class="text-center">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" id="btnFermerContacts">Fermer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal draggable fade" id="modalEditContact" tabindex="-1" role="dialog" aria-labelledby="modalEditContactTitre" data-backdrop="static">
|
||||
<div class="modal-dialog modal-md">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title" id="modEditContactTitre"><i class="fa fa-user fa-lg"></i> <span id="modEditContactTitreText">Nouveau contact</span></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="frmEditContact" class="form-horizontal" autocomplete="off">
|
||||
<input type="hidden" id="inp_contact_rowid" name="rowid" value="0"/>
|
||||
<input type="hidden" id="inp_contact_fk_client" name="fk_client" value="0"/>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_nom_edit">Nom :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="text" class="form-control" id="inp_contact_nom_edit" name="nom" maxlength="50" required/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_prenom_edit">Prénom :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="text" class="form-control" id="inp_contact_prenom_edit" name="prenom" maxlength="50" required/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_fonction_edit">Fonction :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="text" class="form-control" id="inp_contact_fonction_edit" name="fonction" maxlength="50"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_email_edit">Email :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="email" class="form-control" id="inp_contact_email_edit" name="email" maxlength="75"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_telephone_edit">Téléphone :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="text" class="form-control" id="inp_contact_telephone_edit" name="telephone" maxlength="20"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_mobile_edit">Mobile :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="text" class="form-control" id="inp_contact_mobile_edit" name="mobile" maxlength="20"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3" for="inp_contact_principal_edit">Contact principal :</label>
|
||||
<div class="col-md-8">
|
||||
<input type="checkbox" id="inp_contact_principal_edit" name="principal" value="1"/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" id="btnCancelEditContact">Annuler</button>
|
||||
<button type="button" class="btn btn-success" id="btnSaveEditContact">Enregistrer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$modal = ob_get_contents();
|
||||
ob_clean();
|
||||
|
||||
Reference in New Issue
Block a user