Comunidad de diseño web y desarrollo en internet online

DomPDF - Catchable fatal error

Citar            
MensajeEscrito el 22 Oct 2015 12:42 pm
Hola, tengo esta pagina .php que os dejare a continuación y quiero que me cree un pdf con el dompdf de la pagina que se esta viendo. El caso es que hay 3 tablas principales en la pagina que se crean las filas con funciones y consultas php y javascript. Si una de las 2 primeras tablas tiene mas de una fila el pdf no se crea y me lanza este error:

Catchable fatal error: Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, null given, called in C:\Users\jcirc\Dropbox\JORDI\WWW\dompdf\include\table_frame_decorator.cls.php on line 304 and defined in C:\Users\jcirc\Dropbox\JORDI\WWW\dompdf\include\frame.cls.php on line 726

Y si tienen una fila o ninguna se crea el pdf perfectamente.

Por lo que he leído es un error en el php, pero he hecho un test de validación y todo esta correcto, ya no se que hacer. Os dejo el código de la pagina php, a ver si vosotros veis algo que a mi se me escapa.

Código PHP :

<?php 
ob_start();

include('convertToPDF.php'); 

?>

<?php

   session_start();
   /*
   $idPerfil = $_SESSION['idPerfil'];
   */
   $idProj = $_GET['idProjecte'];
   $ref = $_GET['ref'];
   $style = $_GET['style'];
   
   include_once "conexion.php";
   
   $admin = $_SESSION['admin'];
   
   /////Si no hi ha sessio...////
   if ($admin != "no" & $admin != "si") {
      header("location:index.php");
   }

   //Consulta que ens retornara totes categories del perfil corresponent
   $liniesOperari = mysql_query("SELECT * FROM liniaoperari WHERE idProjecte = ".$idProj);
   $liniesMaquina = mysql_query("SELECT * FROM liniamaquina WHERE idProjecte = ".$idProj);
   $liniesMaterial = mysql_query("SELECT * FROM liniamaterial WHERE idProjecte = ".$idProj);
   
   //Consulta que ens retornara tots els operaris
   $operaris = mysql_query("SELECT * FROM operaris");
   
   //Consulta que ens retornara totes les maquines
   $maquines = mysql_query("SELECT * FROM maquines");
      
   $horesOperaris = 0;
   $horesMaquines = 0;
   $material = 0;
   
   //Consulta que ens retornara el preu total de les hores d'operaris calculades segons el projecte seleccionat
   $sumaHoresOperaris = mysql_query("SELECT SUM(operaris.preuHora * liniaoperari.hores) AS Total
                        FROM operaris, liniaoperari
                        WHERE operaris.id = liniaoperari.idOperari AND liniaoperari.idProjecte = ".$idProj);   
   
   $sumaHoresOperaris = mysql_fetch_assoc($sumaHoresOperaris);
    $sumaHoresOperaris = $sumaHoresOperaris['Total'];
   
   //Consulta que ens retornara el preu total de les hores de maquines calculades segons el projecte seleccionat
   $sumaHoresMaquines = mysql_query("SELECT SUM(maquines.preuHora * liniamaquina.hores) AS Total
                        FROM maquines, liniamaquina
                        WHERE maquines.id = liniamaquina.idMaquina AND liniamaquina.idProjecte = ".$idProj);   
   
   $sumaHoresMaquines = mysql_fetch_assoc($sumaHoresMaquines);
    $sumaHoresMaquines = $sumaHoresMaquines['Total'];
   
   //Consulta que ens retornara el preu total dels materials calculades segons el projecte seleccionat
   $sumaMaterial = mysql_query("SELECT SUM(import) AS Total
                        FROM liniamaterial
                        WHERE idProjecte = ".$idProj);   
   
   $sumaMaterial = mysql_fetch_assoc($sumaMaterial);
    $sumaMaterial = $sumaMaterial['Total'];
   
   //total sera la variable que guardara la suma dels 3 valors anteriors
   $total = $sumaHoresOperaris + $sumaHoresMaquines + $sumaMaterial;
   
   //Guardem els calculs de l'iva i total amb iva
   $iva = $total * 0.21;
   $totalAmbIva = $total * 1.21;
   
   //preu del pressupost entrat al crear el projecte
   $pressupost = mysql_query("SELECT pressupost AS importPresu FROM projectes WHERE id = ".$idProj);
   $pressupost = mysql_fetch_assoc($pressupost);
    $pressupost = $pressupost['importPresu'];
   
   //Guardarem tots els valors amb 2 digits decimals
   $sumaHoresOperaris = number_format($sumaHoresOperaris,2,".",",");
   $sumaHoresMaquines = number_format($sumaHoresMaquines,2,".",",");
   $sumaMaterial = number_format($sumaMaterial,2,".",",");
   $totalAmbIva = number_format($totalAmbIva,2,".",",");
   $iva = number_format($iva,2,".",",");
   $pressupost = number_format($pressupost,2,".",",");
   
   //Calcularem el 10% i el 20% del pressupost
   $diferencia = $pressupost - $totalAmbIva;
   $total20 = (20 * $pressupost) / 100;
   $total10 = (10 * $pressupost) / 100;
      
?>
<html>
<head>
<meta charset="UTF-8">

<?php
//Depenent de si ens envien style=pdf o no carregarem uns estils o uns altres
if($style != "pdf"){
   echo '   <link rel="stylesheet" type="text/css" href="style/css/index.css" />
         <link rel="stylesheet" type="text/css" href="style/css/projecte.css" />';
   }
else {
   echo '   <link rel="stylesheet" type="text/css" href="style/css/indexPDF.css" />
         <link rel="stylesheet" type="text/css" href="style/css/projectePDF.css" />';
   }
?>



<script language="javascript">
   //BORRAR LINIA OPERARI//
   function borrarLiniaOperari(id) { 
      if (confirm("Estas segur de borrar?")) {
         //Inicialització de l'objecte de petició de la pàgina.
         xmlhttp = new XMLHttpRequest();     
         xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
               //Cargarem tota la pagina dins de body
               document.getElementById("body").innerHTML = xmlhttp.responseText;
            }
         }
      xmlhttp.open("GET","liniaOperariDelete.php?idLiniaOperari="+id+"&idProjecte=<?= $idProj ?>",true);
      xmlhttp.send();
      }
   }
   
   //BORRAR LINIA MAQUINA//
   function borrarLiniaMaquina(id) { 
      if (confirm("Estas segur de borrar?")) {
         //Inicialització de l'objecte de petició de la pàgina.
         xmlhttp = new XMLHttpRequest();     
         xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
               //Cargarem tota la pagina dins de body
               document.getElementById("body").innerHTML = xmlhttp.responseText;
            }
         }
      xmlhttp.open("GET","liniaMaquinaDelete.php?idLiniaMaquina="+id+"&idProjecte=<?= $idProj ?>",true);
      xmlhttp.send();
      }
   }
   
   //BORRAR LINIA MATERIAL//
   function borrarLiniaMaterial(id) { 
      if (confirm("Estas segur de borrar?")) {
         //Inicialització de l'objecte de petició de la pàgina.
         xmlhttp = new XMLHttpRequest();     
         xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
               //Cargarem tota la pagina dins de body
               document.getElementById("body").innerHTML = xmlhttp.responseText;
            }
         }
      xmlhttp.open("GET","liniaMaterialDelete.php?idLiniaMaterial="+id+"&idProjecte=<?= $idProj ?>",true);
      xmlhttp.send();
      }
   }
   
   //CREAR NOVA LINIA OPERARI//
   function crearLiniaOperari() {
      // inicialització de l'objecte de petició de la pàgina.
      xmlhttp=new XMLHttpRequest();     
      xmlhttp.onreadystatechange=function() {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) {
         //Cargarem tota la pagina dins de body
         document.getElementById("body").innerHTML=xmlhttp.responseText;
         }
      }
      //Agafa els valors del formulari i ho enviem a maquinaNew.php
      xmlhttp.open("GET","liniaOperariNew.php?idOperari="+ document.getElementById("idOperari").value
                  +"&hores="+ document.getElementById("horesOperari").value
                  +"&feinaFeta="+ document.getElementById("feinaFetaOperari").value
                  +"&idProjecte="+ document.getElementById("idProjecte").value,true);
      xmlhttp.send();   
   }
   
   //CREAR NOVA LINIA MAQUINA//
   function crearLiniaMaquina() {
      // inicialització de l'objecte de petició de la pàgina.
      xmlhttp=new XMLHttpRequest();     
      xmlhttp.onreadystatechange=function() {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) {
         //Cargarem tota la pagina dins de body
         document.getElementById("body").innerHTML=xmlhttp.responseText;
         }
      }
      //Agafa els valors del formulari i ho enviem a maquinaNew.php
      xmlhttp.open("GET","liniaMaquinaNew.php?idMaquina="+ document.getElementById("idMaquina").value
                  +"&hores="+ document.getElementById("horesMaquina").value
                  +"&feinaFeta="+ document.getElementById("feinaFetaMaquina").value
                  +"&idProjecte="+ document.getElementById("idProjecte").value,true);
      xmlhttp.send();   
   }
   
   //CREAR NOVA LINIA MATERIAL//
   function crearLiniaMaterial() {
      // inicialització de l'objecte de petició de la pàgina.
      xmlhttp=new XMLHttpRequest();     
      xmlhttp.onreadystatechange=function() {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) {
         //Cargarem tota la pagina dins de body
         document.getElementById("body").innerHTML=xmlhttp.responseText;
         }
      }
      //Agafa els valors del formulari i ho enviem a maquinaNew.php
      xmlhttp.open("GET","liniaMaterialNew.php?material="+ document.getElementById("material").value
                  +"&import="+ document.getElementById("import").value
                  +"&idProjecte="+ document.getElementById("idProjecte").value,true);
      xmlhttp.send();   
   }

   //AL FER DOBLE CLICK SOBRE L'IMPORT
   function dbleClickImport(id,idProjecte) {
      //alert("Me haz dado un click"+id);
      
      // inicialització de l'objecte de petició de la pàgina.
      xmlhttp=new XMLHttpRequest();     
      xmlhttp.onreadystatechange=function() {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) {
         //Cargarem tota la pagina dins de body
         document.getElementById("import"+id).innerHTML=xmlhttp.responseText;
         }
      }
      //Agafa els valors del formulari i ho enviem a maquinaNew.php
      xmlhttp.open("GET","importEditar1.php?id="+ id +"&idProjecte="+ idProjecte,true);
      xmlhttp.send();   
      
   }
   
   //MODIFICAR IMPORT EN CONCRET//
   function modImport(id,idProjecte) {
      // inicialització de l'objecte de petició de la pàgina.
      xmlhttp=new XMLHttpRequest();     
      xmlhttp.onreadystatechange=function() {
         if (xmlhttp.readyState==4 && xmlhttp.status==200) {
         //Cargarem tota la pagina dins de body
         document.getElementById("body").innerHTML=xmlhttp.responseText;
         }
      }
      //Agafa els valors del formulari i ho enviem a importEditar2.php
      xmlhttp.open("GET","importEditar2.php?id="+ id
                  +"&import="+ document.getElementById("import").value
                  +"&idProjecte="+ idProjecte,true);
      xmlhttp.send();   
   }
</script>










</head>
<body id="body">
   <div id="nav">
      <form id="cerrarSesion" action="logout.php"><button type="submit">Cerrar sesión</button></form>
        <a hreF="perfil.php" class="boton">
         <div class="botoMenu">
               <img src="img/icons/perfil.png" width="80" height="80"  alt=""/>
            </div>
      </a>
        <a hreF="projectes.php" class="boton">
           <div class="botoMenu">
               <img src="img/icons/serveis.png" width="80" height="80"  alt=""/>
            </div>
      </a>
      <a hreF="operaris.php" class="boton">
           <div class="botoMenu">
               <img src="img/icons/operaris.png" width="80" height="80"  alt=""/>
            </div>
      </a>
      <a hreF="maquines.php" class="boton">
         <div class="botoMenu">
            <img src="img/icons/maquines.png" width="80" height="80"  alt=""/>
         </div>
      </a>
        <a hreF="generarPDF.php" class="boton">
            <div>
                Imprimir PDF / Marcar com inactiu
            </div>
        </a>
   </div>
    
    <!-------- TAULA DE LA FEINA DELS OPERARIS -------->
    <div class="taulaProjectes1">
        <table border="1px">
            <tr>
                <th width="140px">OPERARIO</th>
                <th width="52px">HORAS</th>
                <th width="264px">TRABAJO REALIZADO</th>
                <th width="115px">FECHA Y HORA</th>
                <th width="30px"></th>
            </tr>
            <tr>
<?php

   //Bucle per recorrer totes les liniesOperari
   while($liniaOperari = mysql_fetch_array($liniesOperari)) { 
   
   //Consulta per buscar el nom de l'operari segons el seu id
   $operariis = mysql_query("SELECT nom,cognom FROM operaris WHERE id = ".$liniaOperari['idOperari']);
   $operarii = mysql_fetch_array($operariis);
   $operariNom = $operarii['nom'];
   $operariCognom = $operarii['cognom'];
   
   //Sumarem les hores a cada volta i les guardarem a la variable $horesOperaris
   $horesOperaris = $horesOperaris + $liniaOperari['hores'] ;
?>
                <td><?= $operariNom ." ". $operariCognom ?></td>
                <td><?= $liniaOperari['hores'] ?></td>
                <td><?= $liniaOperari['feinaFeta'] ?></td>
                <td><?= $liniaOperari['dataHora'] ?></td>
                <td class="iconoBorrar"><a href="javascript:borrarLiniaOperari(<?= $liniaOperari['id'] ?>)"><img src="img/icons/delete.png" width="25" height="25"  alt=""/></a></td>
            </tr>
<?php   
    }
?>
        </table>
   <form name="formLiniaOperari" action="javascript:crearLiniaOperari()" method="POST">
      <select id="idOperari" name="idOperari">
      <?php
         //Bucle per recorrer tots els operaris
         while($operari = mysql_fetch_array($operaris)) { 
      ?>
         <option value="<?= $operari['id'] ?>"><?= $operari['nom'] ?> <?= $operari['cognom'] ?></option>
      <?php   
         }
      ?>
      </select>
        <input size="2" type="text" id="horesOperari" name="horesOperari" placeholder="Horas">
        <input size="50" type="text" id="feinaFetaOperari" name="feinaFetaOperari" placeholder="Descripción del trabajo realizado">
        <input type="hidden" id="idProjecte" name="idProjecte" value="<?= $idProj ?>">
        <input class="botoOk" type="submit" value="OK">
    </form>
</div>

<!-------- TAULA DE LA FEINA DE LES MAQUINES -------->
<div class="taulaProjectes2">
    <table border="1px">
        <tr>
            <th width="150px">MAQUINA</th>
            <th width="52px">HORAS</th>
            <th width="264px">TRABAJO REALIZADO</th>
            <th width="115px">FECHA Y HORA</th>
            <th width="30px"></th>
        </tr>
        <tr>
<?php
   //Bucle per recorrer totes les liniesMaquina
   while($liniaMaquina = mysql_fetch_array($liniesMaquina)) { 
   
   //Consulta per buscar el nom de la maquina segons el seu id
   $maquinees = mysql_query("SELECT nom FROM maquines WHERE id = ".$liniaMaquina['idMaquina']);
   $maquinaa = mysql_fetch_array($maquinees);
   $maquinaNom = $maquinaa['nom'];
   
   //Sumarem les hores a cada volta i les guardarem a la variable $horesMaquines
   $horesMaquines = $horesMaquines + $liniaMaquina['hores'];
?>
      <td><?= $maquinaNom ?></td>
      <td><?= $liniaMaquina['hores'] ?></td>
      <td><?= $liniaMaquina['feinaFeta'] ?></td>
      <td><?= $liniaMaquina['dataHora'] ?></td>
        <td class="iconoBorrar"><a href="javascript:borrarLiniaMaquina(<?= $liniaMaquina['id'] ?>)"><img src="img/icons/delete.png" width="25" height="25"  alt=""/></a></td>
   </tr>
<?php   
    }
?>
    </table>
    <form name="formLiniaMaquina" action="javascript:crearLiniaMaquina()" method="POST">
      <select id="idMaquina" name="idMaquina">
      <?php
         //Bucle per recorrer totes les maquines
         while($maquina = mysql_fetch_array($maquines)) { 
      ?>
         <option value="<?= $maquina['id'] ?>"><?= $maquina['nom'] ?></option>
      <?php   
         }
      ?>
      </select>
        <input size="2" type="text" id="horesMaquina" name="horesMaquina" placeholder="Horas">
        <input size="50" type="text" id="feinaFetaMaquina" name="feinaFetaMaquina" placeholder="Descripción del trabajo realizado">
        <input type="hidden" id="idProjecte" name="idProjecte" value="<?= $idProj ?>">
        <input class="botoOk" type="submit" value="OK">
    </form>
</div>
    
<!--------------- TAULA DEL MATERIAL --------------->
<div class="taulaProjectes3">
    <table border="1px">
        <tr>
            <th width="188px">MATERIAL</th>
            <th width="35px">IMPORTE</th>
            <th width="30px"></th>
        </tr>
<?php
   //Bucle per recorrer totes les liniesMaterial
   while($liniaMaterial = mysql_fetch_array($liniesMaterial)) { 
?>
   <tr>
      <td><?= $liniaMaterial['material'] ?></td>
      <td id="import<?= $liniaMaterial['id'] ?>" ondblclick="dbleClickImport(<?= $liniaMaterial['id'] ?>,<?= $idProj ?>)"><?= $liniaMaterial['import'] ?></td>
        <td class="iconoBorrar"><a href="javascript:borrarLiniaMaterial(<?= $liniaMaterial['id'] ?>)"><img src="img/icons/delete.png" width="25" height="25"  alt=""/></a></td>
   </tr>
<?php   
    }
?>
    </table>
    <form name="formLiniaMaterial" action="javascript:crearLiniaMaterial()" method="POST">
        <input size="21" type="text" id="material" name="material" placeholder="Material">
        <input size="4" type="text" id="import" name="import" placeholder="Importe €">
        <input type="hidden" id="idProjecte" name="idProjecte" value="<?= $idProj ?>">
        <input class="botoOk" type="submit" value="OK">
    </form>
</div>

<!-- Capa on es mostraran els resultats, calculs i comparacions del projecte -->
      <div id="calculs">
           <table>
               <tr>
                   <td><?= $horesOperaris ?> h</td><td>OPERARIOS</td><td align="right"><?= $sumaHoresOperaris ?> €</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>TOTAL</td><td align="right"><?= $total ?> €</td>
                </tr>
                <tr>
                   <td><?= $horesMaquines ?> h</td><td>MAQUINARIA</td><td align="right"><?= $sumaHoresMaquines ?> €</td><td></td><td>IVA</td><td align="right"><?= $iva ?> €</td>
                </tr>
                <tr>
                   <td></td><td>MATERIAL</td><td align="right"><?= $sumaMaterial ?> €</td><td></td><td>IMPORTE TOTAL</td><td align="right"><?= $totalAmbIva ?> €</td>
                </tr>
                <tr>
                   <td></td><td></td><td></td><td></td><td>PRESUPUESTO</td>
                                                         <?php 
                                                            //Si el pressupost es menor de un 20% (taronja) si es menor de 10% (vermell)
                                                            if(($diferencia <= $total20) and ($diferencia > $total10)){ 
                                                               echo "<td align='right' style='color:#FFA500'>".$diferencia." €</td>"; 
                                                            }
                                                            if($diferencia <= $total10){ 
                                                               echo "<td align='right' style='color:#F00'>".$diferencia." €</td>"; 
                                                            } 
                                                            if($diferencia > $total20) { 
                                                               echo "<td align='right'>".$diferencia." €</td>"; 
                                                            } 
                                                         ?>
                </tr>
            </table>
        </div>
  
  
<?php 


$html = ob_get_contents();
ob_end_clean();


             
if ( isset($_POST['PDF_4']) ) 
    doPDF('nombre'.$_POST['PDF_4'],$html,true,'',false,'letter','landscape');      
?>  
        
<?php echo $html ?> 
 
<form  action="<?php echo $_SERVER['PHP_SELF'] ?>?idProjecte=<?= $idProj ?>&ref=<?= $ref ?>&style=pdf" method="POST"> 
<input name="PDF_4" type="submit" value="CREAR" />
</form> 
        
</body>
</html>




Gracias y un saludo!!!

Por circunsxik

32 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Oct 2015 12:18 pm
Bueno, veo varios problemas acá.

El llamado a la función ob_start() no debería estar donde está. Debería estar inmediatamente antes del tag <html>.

Estás enviando un espacio en blanco o un retorno de carro antes de session_start(), eso debería estar causando un error por headers ya enviados.

DomPDF, por lo que pude leer en la documentación, no ejecuta JavaScript, por lo tanto todo ese código JavaScript está interfiriendo con DomPDF.

Pero en el fondo veo que pretendes hacer un script que lo hace todo. El mismo script hace la consulta, presenta el resultado, interactúa con el visitante y es diseño de un archivo PDF. No me extraña que te esté volviendo loco.

Deberías escribir un script que SOLAMENTE haga la salida para el PDF y quitar esa funcionalidad de acá.

PD: Me ha causado mucha gracia lo del <form> final :).

Por DriverOp

Claber

2510 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Oct 2015 12:49 pm

DriverOp escribió:

Bueno, veo varios problemas acá.

El llamado a la función ob_start() no debería estar donde está. Debería estar inmediatamente antes del tag <html>.

Estás enviando un espacio en blanco o un retorno de carro antes de session_start(), eso debería estar causando un error por headers ya enviados.

DomPDF, por lo que pude leer en la documentación, no ejecuta JavaScript, por lo tanto todo ese código JavaScript está interfiriendo con DomPDF.

Pero en el fondo veo que pretendes hacer un script que lo hace todo. El mismo script hace la consulta, presenta el resultado, interactúa con el visitante y es diseño de un archivo PDF. No me extraña que te esté volviendo loco.

Deberías escribir un script que SOLAMENTE haga la salida para el PDF y quitar esa funcionalidad de acá.

PD: Me ha causado mucha gracia lo del <form> final :).



Perdona por tardar tanto en contestar, me cuesta mucho encontrar un rato para ponerme con esto.

el ob_start() lo he puesto justo antes del <html> pero hace lo mismo. El problema sera con los scripts...

Como dices que escriba un script que haga la salida?? No te entiendo

Y lo del form porque lo dices? Por no hacerlo con un simple vinculo? :lol:

Por circunsxik

32 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Oct 2015 01:03 pm
He probado de crear otra pagina que no tenga javascript, no se si es lo que querías decir, pero sigue igual. Mira te dejo aquí el código a ver si ves algo.

Código :

<?php 
ob_start();

include('convertToPDF.php'); 

?>

<?php

   session_start();
   /*
   $idPerfil = $_SESSION['idPerfil'];
   */
   $idProj = $_GET['idProjecte'];
   $ref = $_GET['ref'];
   $style = $_GET['style'];
   
   include_once "conexion.php";
   
   $admin = $_SESSION['admin'];
   
   /////Si no hi ha sessio...////
   if ($admin != "no" & $admin != "si") {
      header("location:index.php");
   }

   //Consulta que ens retornara totes categories del perfil corresponent
   $liniesOperari = mysql_query("SELECT * FROM liniaoperari WHERE idProjecte = ".$idProj);
   $liniesMaquina = mysql_query("SELECT * FROM liniamaquina WHERE idProjecte = ".$idProj);
   $liniesMaterial = mysql_query("SELECT * FROM liniamaterial WHERE idProjecte = ".$idProj);
   
   //Consulta que ens retornara tots els operaris
   $operaris = mysql_query("SELECT * FROM operaris");
   
   //Consulta que ens retornara totes les maquines
   $maquines = mysql_query("SELECT * FROM maquines");
      
   $horesOperaris = 0;
   $horesMaquines = 0;
   $material = 0;
   
   //Consulta que ens retornara el preu total de les hores d'operaris calculades segons el projecte seleccionat
   $sumaHoresOperaris = mysql_query("SELECT SUM(operaris.preuHora * liniaoperari.hores) AS Total
                        FROM operaris, liniaoperari
                        WHERE operaris.id = liniaoperari.idOperari AND liniaoperari.idProjecte = ".$idProj);   
   
   $sumaHoresOperaris = mysql_fetch_assoc($sumaHoresOperaris);
    $sumaHoresOperaris = $sumaHoresOperaris['Total'];
   
   //Consulta que ens retornara el preu total de les hores de maquines calculades segons el projecte seleccionat
   $sumaHoresMaquines = mysql_query("SELECT SUM(maquines.preuHora * liniamaquina.hores) AS Total
                        FROM maquines, liniamaquina
                        WHERE maquines.id = liniamaquina.idMaquina AND liniamaquina.idProjecte = ".$idProj);   
   
   $sumaHoresMaquines = mysql_fetch_assoc($sumaHoresMaquines);
    $sumaHoresMaquines = $sumaHoresMaquines['Total'];
   
   //Consulta que ens retornara el preu total dels materials calculades segons el projecte seleccionat
   $sumaMaterial = mysql_query("SELECT SUM(import) AS Total
                        FROM liniamaterial
                        WHERE idProjecte = ".$idProj);   
   
   $sumaMaterial = mysql_fetch_assoc($sumaMaterial);
    $sumaMaterial = $sumaMaterial['Total'];
   
   //total sera la variable que guardara la suma dels 3 valors anteriors
   $total = $sumaHoresOperaris + $sumaHoresMaquines + $sumaMaterial;
   
   //Guardem els calculs de l'iva i total amb iva
   $iva = $total * 0.21;
   $totalAmbIva = $total * 1.21;
   
   //preu del pressupost entrat al crear el projecte
   $pressupost = mysql_query("SELECT pressupost AS importPresu FROM projectes WHERE id = ".$idProj);
   $pressupost = mysql_fetch_assoc($pressupost);
    $pressupost = $pressupost['importPresu'];
   
   //Guardarem tots els valors amb 2 digits decimals
   $sumaHoresOperaris = number_format($sumaHoresOperaris,2,".",",");
   $sumaHoresMaquines = number_format($sumaHoresMaquines,2,".",",");
   $sumaMaterial = number_format($sumaMaterial,2,".",",");
   $totalAmbIva = number_format($totalAmbIva,2,".",",");
   $iva = number_format($iva,2,".",",");
   $pressupost = number_format($pressupost,2,".",",");
   
   //Calcularem el 10% i el 20% del pressupost
   $diferencia = $pressupost - $totalAmbIva;
   $total20 = (20 * $pressupost) / 100;
   $total10 = (10 * $pressupost) / 100;
      
?>
<html>
<head>
<meta charset="UTF-8">

<?php
//Depenent de si ens envien style=pdf o no carregarem uns estils o uns altres
if($style != "pdf"){
   echo '   <link rel="stylesheet" type="text/css" href="style/css/index.css" />
         <link rel="stylesheet" type="text/css" href="style/css/projecte.css" />';
   }
else {
   echo '   <link rel="stylesheet" type="text/css" href="style/css/indexPDF.css" />
         <link rel="stylesheet" type="text/css" href="style/css/projectePDF.css" />';
   }
?>

</head>
<body id="body">    
    <!-------- TAULA DE LA FEINA DELS OPERARIS -------->
    <div class="taulaProjectes1">
        <table border="1px">
            <tr>
                <th width="140px">OPERARIO</th>
                <th width="52px">HORAS</th>
                <th width="264px">TRABAJO REALIZADO</th>
                <th width="115px">FECHA Y HORA</th>
            </tr>
            <tr>
<?php

   //Bucle per recorrer totes les liniesOperari
   while($liniaOperari = mysql_fetch_array($liniesOperari)) { 
   
   //Consulta per buscar el nom de l'operari segons el seu id
   $operariis = mysql_query("SELECT nom,cognom FROM operaris WHERE id = ".$liniaOperari['idOperari']);
   $operarii = mysql_fetch_array($operariis);
   $operariNom = $operarii['nom'];
   $operariCognom = $operarii['cognom'];
   
   //Sumarem les hores a cada volta i les guardarem a la variable $horesOperaris
   $horesOperaris = $horesOperaris + $liniaOperari['hores'] ;
?>
                <td><?= $operariNom ." ". $operariCognom ?></td>
                <td><?= $liniaOperari['hores'] ?></td>
                <td><?= $liniaOperari['feinaFeta'] ?></td>
                <td><?= $liniaOperari['dataHora'] ?></td>
            </tr>
<?php   
    }
?>
        </table>
</div>

<!-------- TAULA DE LA FEINA DE LES MAQUINES -------->
<div class="taulaProjectes2">
    <table border="1px">
        <tr>
            <th width="150px">MAQUINA</th>
            <th width="52px">HORAS</th>
            <th width="264px">TRABAJO REALIZADO</th>
            <th width="115px">FECHA Y HORA</th>
        </tr>
        <tr>
<?php
   //Bucle per recorrer totes les liniesMaquina
   while($liniaMaquina = mysql_fetch_array($liniesMaquina)) { 
   
   //Consulta per buscar el nom de la maquina segons el seu id
   $maquinees = mysql_query("SELECT nom FROM maquines WHERE id = ".$liniaMaquina['idMaquina']);
   $maquinaa = mysql_fetch_array($maquinees);
   $maquinaNom = $maquinaa['nom'];
   
   //Sumarem les hores a cada volta i les guardarem a la variable $horesMaquines
   $horesMaquines = $horesMaquines + $liniaMaquina['hores'];
?>
      <td><?= $maquinaNom ?></td>
      <td><?= $liniaMaquina['hores'] ?></td>
      <td><?= $liniaMaquina['feinaFeta'] ?></td>
      <td><?= $liniaMaquina['dataHora'] ?></td>
   </tr>
<?php   
    }
?>
    </table>
</div>
    
<!--------------- TAULA DEL MATERIAL --------------->
<div class="taulaProjectes3">
    <table border="1px">
        <tr>
            <th width="188px">MATERIAL</th>
            <th width="35px">IMPORTE</th>
        </tr>
<?php
   //Bucle per recorrer totes les liniesMaterial
   while($liniaMaterial = mysql_fetch_array($liniesMaterial)) { 
?>
   <tr>
      <td><?= $liniaMaterial['material'] ?></td>
      <td id="import<?= $liniaMaterial['id'] ?>"><?= $liniaMaterial['import'] ?></td>
   </tr>
<?php   
    }
?>
    </table>
</div>

<!-- Capa on es mostraran els resultats, calculs i comparacions del projecte -->
      <div id="calculs">
           <table>
               <tr>
                   <td><?= $horesOperaris ?> h</td><td>OPERARIOS</td><td align="right"><?= $sumaHoresOperaris ?> €</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>TOTAL</td><td align="right"><?= $total ?> €</td>
                </tr>
                <tr>
                   <td><?= $horesMaquines ?> h</td><td>MAQUINARIA</td><td align="right"><?= $sumaHoresMaquines ?> €</td><td></td><td>IVA</td><td align="right"><?= $iva ?> €</td>
                </tr>
                <tr>
                   <td></td><td>MATERIAL</td><td align="right"><?= $sumaMaterial ?> €</td><td></td><td>IMPORTE TOTAL</td><td align="right"><?= $totalAmbIva ?> €</td>
                </tr>
                <tr>
                   <td></td><td></td><td></td><td></td><td>PRESUPUESTO</td>
                                                         <?php 
                                                            //Si el pressupost es menor de un 20% (taronja) si es menor de 10% (vermell)
                                                            if(($diferencia <= $total20) and ($diferencia > $total10)){ 
                                                               echo "<td align='right' style='color:#FFA500'>".$diferencia." €</td>"; 
                                                            }
                                                            if($diferencia <= $total10){ 
                                                               echo "<td align='right' style='color:#F00'>".$diferencia." €</td>"; 
                                                            } 
                                                            if($diferencia > $total20) { 
                                                               echo "<td align='right'>".$diferencia." €</td>"; 
                                                            } 
                                                         ?>
                </tr>
            </table>
        </div>
  
  
<?php 


$html = ob_get_contents();
ob_end_clean();


             
if ( isset($_POST['PDF_4']) ) 
    doPDF('nombre'.$_POST['PDF_4'],$html,true,'',false,'letter','landscape');      
?>  
        
<?php echo $html ?> 
 
<form  action="<?php echo $_SERVER['PHP_SELF'] ?>?idProjecte=<?= $idProj ?>&ref=<?= $ref ?>&style=pdf" method="POST"> 
<input name="PDF_4" type="submit" value="CREAR" />
</form> 
        
</body>
</html>

Por circunsxik

32 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.