示例#1
0
 /**
  * Recalcula los importes de la factura en base a sus lineas
  * Se utiliza durante el proceso de facturacion agrupada
  */
 public function recalcula()
 {
     //Si el cliente no está sujeto a iva
     //pongo el iva a cero en las líneas para evitar que por cambio
     //de cliente se aplique indebidamente
     $cliente = new Clientes($this->IDCliente);
     if ($cliente->getIva()->getIDTipo() == '0') {
         $lineas = new FemitidasLineas();
         $lineas->queryUpdate(array("Iva" => 0, "Recargo" => 0), "`IDFactura`= '{$this->IDFactura}'");
         unset($lineas);
     } elseif ($cliente->getRecargoEqu()->getIDTipo() == '0') {
         $lineas = new FemitidasLineas();
         $lineas->queryUpdate(array("Recargo" => 0), "`IDFactura`= '{$this->IDFactura}'");
         unset($lineas);
     }
     unset($cliente);
     //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.
     $this->conecta();
     if (is_resource($this->_dbLink)) {
         $lineas = new FemitidasLineas();
         $tableLineas = "{$lineas->getDataBaseName()}.{$lineas->getTableName()}";
         $articulos = new Articulos();
         $tableArticulos = "{$articulos->getDataBaseName()}.{$articulos->getTableName()}";
         unset($lineas);
         unset($articulos);
         $query = "select sum(Importe) as Bruto,sum(ImporteCosto) as Costo from {$tableLineas} where (IDFactura='" . $this->getIDFactura() . "')";
         $this->_em->query($query);
         $rows = $this->_em->fetchResult();
         $bruto = $rows[0]['Bruto'];
         $query = "select Iva,Recargo, sum(Importe) as Importe from {$tableLineas} where (IDFactura='" . $this->getIDFactura() . "') group by Iva,Recargo order by Iva";
         $this->_em->query($query);
         $rows = $this->_em->fetchResult();
         $totbases = 0;
         $totiva = 0;
         $totrec = 0;
         $bases = array();
         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);
         }
         $subtotal = $totbases + $totiva + $totrec;
         // Calcular el recargo financiero según la forma de pago
         $formaPago = new FormasPago($this->IDFP);
         $recFinanciero = $formaPago->getRecargoFinanciero();
         $cuotaRecFinanciero = $subtotal * $recFinanciero / 100;
         unset($formaPago);
         $total = $subtotal + $cuotaRecFinanciero;
         //Calcular el peso, volumen y n. de bultos de los productos inventariables
         switch ($_SESSION['ver']) {
             case '1':
                 //Cristal
                 $columna = "MtsAl";
             case '0':
                 //Estandar
             //Estandar
             default:
                 $columna = "Unidades";
         }
         $em = new EntityManager($this->getConectionName());
         $query = "select sum(a.Peso*l.{$columna}) as Peso,\n                        sum(a.Volumen*l.{$columna}) as Volumen,\n                        sum(Unidades) as Bultos \n                      from {$tableArticulos} as a,{$tableLineas} as l\n                      where (l.IDArticulo=a.IDArticulo)\n                        and (a.Inventario='1')\n                        and (l.IDFactura='{$this->IDFactura}')";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         $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->setRecargoFinanciero($recFinanciero);
         $this->setCuotaRecargoFinanciero($cuotaRecFinanciero);
         $this->setTotal($total);
         $this->setPeso($rows[0]['Peso']);
         $this->setVolumen($rows[0]['Volumen']);
         $this->setBultos($rows[0]['Bultos']);
         $this->save();
     }
 }