// $action=$_GET['p']??'home'; $err=''; // if($_SERVER['REQUEST_METHOD']==='POST'){ // check_csrf(); // if($action==='client-save'){ // $id=(int)($_POST['id']??0);$v=[trim($_POST['nom']??''),trim($_POST['adresse']??''),trim($_POST['code_postal']??''),trim($_POST['ville']??''),trim($_POST['telephone']??''),trim($_POST['email']??''),trim($_POST['siret']??''),trim($_POST['tva_intracom']??'')]; // if(!$v[0])$err='Le nom est obligatoire.';else {if($id){$v[]=$id;$pdo->prepare('UPDATE clients SET nom=?,adresse=?,code_postal=?,ville=?,telephone=?,email=?,siret=?,tva_intracom=? WHERE id=?')->execute($v);}else $pdo->prepare('INSERT INTO clients(nom,adresse,code_postal,ville,telephone,email,siret,tva_intracom) VALUES(?,?,?,?,?,?,?,?)')->execute($v);header('Location: index.php?p=clients');exit;} // } // if($action==='quote-save'){ // $id=(int)($_POST['id']??0);$client=(int)($_POST['client_id']??0);$date=$_POST['date_devis']?:date('Y-m-d');$valid=max(1,(int)($_POST['validite_jours']??30));$type=in_array($_POST['type']??'',['PLAT','BOBINE','STANDARD'],true)?$_POST['type']:'STANDARD'; // $pdo->beginTransaction();try{ // if($id){$pdo->prepare('UPDATE devis SET type=?,client_id=?,date_devis=?,validite_jours=?,reference_client=?,commercial=?,objet=?,statut=?,commentaire=?,conditions=? WHERE id=?')->execute([$type,$client,$date,$valid,$_POST['reference_client']?:null,$_POST['commercial']?:null,$_POST['objet']?:null,$_POST['statut'],$_POST['commentaire']?:null,$_POST['conditions']?:null,$id]);$pdo->prepare('DELETE FROM devis_lignes WHERE devis_id=?')->execute([$id]);} // else{$pdo->prepare('INSERT INTO devis(type,client_id,date_devis,validite_jours,reference_client,commercial,objet,statut,commentaire,conditions) VALUES(?,?,?,?,?,?,?,?,?,?)')->execute([$type,$client,$date,$valid,$_POST['reference_client']?:null,$_POST['commercial']?:null,$_POST['objet']?:null,$_POST['statut'],$_POST['commentaire']?:null,$_POST['conditions']?:null]);$id=(int)$pdo->lastInsertId();$pdo->prepare('UPDATE devis SET numero=? WHERE id=?')->execute(['DEV-'.date('Y').'-'.str_pad((string)$id,5,'0',STR_PAD_LEFT),$id]);} // $ht=0;$tax=0;$q=$pdo->prepare('INSERT INTO devis_lignes(devis_id,ordre,designation,description,quantite,unite,prix_unitaire,remise,tva,total_ht,prix_mille,prix_total) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)'); // foreach($_POST['designation']??[] as $i=>$label){$label=trim($label);if(!$label)continue;$qty=max(0,(float)($_POST['quantite'][$i]??0));$pu=max(0,(float)($_POST['prix_unitaire'][$i]??0));$disc=min(100,max(0,(float)($_POST['remise'][$i]??0)));$vat=max(0,(float)($_POST['tva'][$i]??20));$line=round($qty*$pu*(1-$disc/100),2);$tax+=round($line*$vat/100,2);$ht+=$line;$q->execute([$id,$i+1,$label,$_POST['description'][$i]??null,$qty,$_POST['unite'][$i]??'u',$pu,$disc,$vat,$line,$qty?round($pu*1000,2):0,$line]);} // $pdo->prepare('UPDATE devis SET total_ht=?,total_tva=?,total_ttc=? WHERE id=?')->execute([$ht,$tax,$ht+$tax,$id]);$pdo->commit();header('Location: index.php?p=quotes');exit; // }catch(Throwable $e){$pdo->rollBack();throw $e;} // } // } // function layout(string $title,string $body):void{echo '
| Client | Coordonnées | |
|---|---|---|
| '.h($r['nom']).' | '.h($r['email']).' · '.h($r['telephone']).' '.h($r['ville']).' | Modifier |
| Numéro | Type | Date | Client | Statut | HT | TTC | |
|---|---|---|---|---|---|---|---|
| '.h($r['numero']).' | '.h($r['type']).' | '.h($r['date_devis']).' | '.h($r['nom']).' | '.h($r['statut']).' | '.euro($r['total_ht']).' | '.euro($r['total_ttc']).' | Modifier · PDF |
'.h($d['date_devis']).' · Valable '.$d['validite_jours'].' jours
'.h($d['adresse']).'
'.h($d['code_postal']).' '.h($d['ville']).'
| Désignation | Qté | PU HT | Total HT |
|---|---|---|---|
| '.h($l['designation']).' | '.h($l['quantite']).' '.h($l['unite']).' | '.euro($l['prix_unitaire']).' | '.euro($l['total_ht']).' |
'.nl2br(h($d['conditions'])).'
Suivi de vos clients et propositions commerciales.