/** * 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']); }