/**
  * Recalcula los importes del pedido en base a sus lineas
  * Actualiza las propiedades de totales pero no salva los datos.
  * IMPORTANTE: Para que los calculos tomen efecto hay que llamar al método save()
  */
 public function recalcula()
 {
     //Fuerzo el almacen al de la cabecera del pedido
     $lineas = new PedidosLineas();
     $lineas->queryUpdate(array("IDAlmacen" => $this->IDAlmacen), "`IDPedido`='{$this->IDPedido}'");
     unset($lineas);
     //Si el proveedor no está sujeto a iva
     //pongo el iva a cero en las líneas para evitar que por cambio
     //de proveedor se aplique indebidamente
     $proveedor = new Proveedores($this->IDProveedor);
     if ($proveedor->getIva()->getIDTipo() == '0') {
         $lineas = new PedidosLineas();
         $lineas->queryUpdate(array("Iva" => 0, "Recargo" => 0), "`IDPedido`='{$this->IDPedido}'");
         unset($lineas);
     }
     unset($proveedor);
     //SI TIENE DESCUENTO, CALCULO EL PORCENTAJE QUE SUPONE RESPECTO AL IMPORTE BRUTO
     //PARA REPERCUTUIRLO PORCENTUALMENTE A CADA BASE
     $pordcto = 0;
     if ($this->getDescuento() != 0) {
         $pordcto = round(100 * ($this->getDescuento() / $this->getImporte()), 2);
     }
     //Calcular los totales, desglosados por tipo de iva.
     $lineas = new PedidosLineas();
     $rows = $lineas->cargaCondicion("sum(importe) as Bruto", "IDPedido='{$this->IDPedido}'");
     $bruto = $rows[0]['Bruto'] ? $rows[0]['Bruto'] : 0;
     $rows = $lineas->cargaCondicion("Iva, Recargo, sum(Importe) as Importe", "(IDPedido='{$this->IDPedido}') group by Iva, Recargo order by Iva");
     $totbases = 0;
     $totiva = 0;
     $totrec = 0;
     $bases[0] = $bases[1] = $bases[2] = array('b' => 0, 'i' => 0, 'ci' => 0, 'r' => 0, 'cr' => 0);
     foreach ($rows as $key => $row) {
         $importe = $row['Importe'] * (1 - $pordcto / 100);
         $cuotaiva = round($importe * $row['Iva'] / 100, 2);
         $cuotarecargo = round($importe * $row['Recargo'] / 100, 2);
         $totbases += $importe;
         $totiva += $cuotaiva;
         $totrec += $cuotarecargo;
         $bases[$key] = array('b' => $importe, 'i' => $row['Iva'], 'ci' => $cuotaiva, 'r' => $row['Recargo'], 'cr' => $cuotarecargo);
     }
     $total = $totbases + $totiva + $totrec;
     //Calcular el peso, volumen y n. de bultos de los productos inventariables
     //$query = "select sum(articulos.Peso*pedidos_lineas.Unidades) as Peso, sum(articulos.volumen*pedidos_lineas.Unidades) as Volumen, sum(Unidades) as Bultos from articulos,pedidos_lineas where (pedidos_lineas.IDArticulo=articulos.IDArticulo) and (articulos.Inventario='1') and (pedidos_lineas.IDPedido='" . $this->getIDPedido() . "')";
     //$this->_em->query($query);
     //$rows = $this->_em->fetchResult();
     $this->setImporte($bruto);
     $this->setBaseImponible1($bases[0]['b']);
     $this->setIva1($bases[0]['i']);
     $this->setCuotaIva1($bases[0]['ci']);
     $this->setRecargo1($bases[0]['r']);
     $this->setCuotaRecargo1($bases[0]['cr']);
     $this->setBaseImponible2($bases[1]['b']);
     $this->setIva2($bases[1]['i']);
     $this->setCuotaIva2($bases[1]['ci']);
     $this->setRecargo2($bases[1]['r']);
     $this->setCuotaRecargo2($bases[1]['cr']);
     $this->setBaseImponible3($bases[2]['b']);
     $this->setIva3($bases[2]['i']);
     $this->setCuotaIva3($bases[2]['ci']);
     $this->setRecargo3($bases[2]['r']);
     $this->setCuotaRecargo3($bases[2]['cr']);
     $this->setTotalBases($totbases);
     $this->setTotalIva($totiva);
     $this->setTotalRecargo($totrec);
     $this->setTotal($total);
     //$this->setPeso($rows[0]['Peso']);
     //$this->setVolumen($rows[0]['Volumen']);
     //$this->setBultos($rows[0]['Bultos']);
 }