/**
  * GENERA LOS ALBARANES Y FACTURAS DE MANTENIMIENTOS
  * EN BASE A LOS INDICADO EN EL ARCHIVO CSV
  * 
  * @param string $fileCsv
  */
 public function mantenimientosAction($fileCsv = '')
 {
     if ($fileCsv == '') {
         $fileCsv = 'tmp/mantenimientos.csv';
     }
     $archivo = new Archivo($fileCsv);
     $archivo->setColumnsDelimiter(";");
     if ($archivo->open()) {
         while (($linea = $archivo->readLine()) !== FALSE) {
             $idSucursal = $linea[0];
             $idAlmacen = $linea[1];
             $idComercial = $linea[2];
             $idCliente = $linea[3];
             $codigoArticulo = $linea[4];
             $unidades = $linea[5];
             $precio = $linea[6];
             $cliente = new Clientes($idCliente);
             $direccionesEntrega = $cliente->getDireccionesEntrega();
             $direcEntrega = $direccionesEntrega[0];
             $albaran = new AlbaranesCab();
             $albaran->setIDCliente($cliente->getIDCliente());
             $albaran->setIDSucursal($idSucursal);
             $albaran->setFecha(date("d-m-Y"));
             $albaran->setIDDirec($direcEntrega->getIDDirec());
             $albaran->setIDAlmacen($idAlmacen);
             $albaran->setIDComercial($idComercial);
             $albaran->setIDContador(2);
             $albaran->setIDEstado(0);
             $albaran->setIDFP($cliente->getIDFP()->getIDFP());
             $idAlbaran = $albaran->create();
             if ($idAlbaran) {
                 $articulo = new Articulos();
                 $articulo = $articulo->find("Codigo", $codigoArticulo);
                 $lineas = new AlbaranesLineas();
                 $lineas->setIDAlbaran($idAlbaran);
                 $lineas->setIDArticulo($articulo->getIDArticulo());
                 $lineas->setDescripcion($articulo->getDescripcion() . " Mes " . date("m Y"));
                 $lineas->setUnidades($unidades);
                 $lineas->setPrecio($precio);
                 $lineas->setDescuento(0);
                 $lineas->setIva($articulo->getIDIva()->getIva());
                 $lineas->setImporte($unidades * $precio);
                 $ok = $lineas->create();
                 if ($ok) {
                     $albaran = new AlbaranesCab($idAlbaran);
                     $albaran->confirma();
                     if ($albaran->expide()) {
                         $albaran = new AlbaranesCab($idAlbaran);
                         $contador = new Contadores();
                         $contador = $contador->dameContador($idSucursal, 2);
                         $albaran->facturar($contador);
                     }
                 } else {
                     print_r($lineas->getErrores());
                     exit;
                 }
             } else {
                 $this->values['errores'][] = "No se ha podido crear el albarán para " . $cliente->getRazonSocial();
             }
         }
     } else {
         $this->values['errores'][] = "El fichero de importación " . $fileCsv . " no existe";
     }
 }
 /**
  * Devuelve las ventas de un cliente en el periodo por firmas
  * 
  * @param int $idCliente
  * @param int $periodo 0=todo, 1=últimos 12 meses
  * @return array
  */
 static function getVentasClienteFirmas($idCliente, $periodo = 0)
 {
     $cliente = new Clientes($idCliente);
     $razonSocial = $cliente->getRazonSocial();
     unset($cliente);
     $firma = new Firmas();
     $firmaTabla = $firma->getDataBaseName() . "." . $firma->getTableName();
     $pedidos = new PedidosCab();
     $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName();
     unset($pedidos);
     switch ($periodo) {
         case '0':
             $tituloPeriodo = "Todos los años";
             $query = "select f.RazonSocial name, sum(p.TotalBases) y " . "from {$pedidosTabla} p, {$firmaTabla} f " . "where p.IdCliente='{$idCliente}' and f.Id=p.IdFirma " . "group by f.RazonSocial " . "order by sum(p.TotalBases) DESC";
             break;
         case '1':
             $tituloPeriodo = "Últimos 12 meses";
             $fecha = new Fecha();
             $desdeFecha = $fecha->sumaDias(-365);
             unset($fecha);
             $query = "select f.RazonSocial name, sum(p.TotalBases) y " . "from {$pedidosTabla} p, {$firmaTabla} f " . "where p.IdCliente='{$idCliente}' and f.Id=p.IdFirma and p.Fecha>'{$desdeFecha}' " . "group by f.RazonSocial " . "order by sum(p.TotalBases) DESC";
             break;
         default:
     }
     $em = new EntityManager($firma->getConectionName());
     if ($em->getDbLink()) {
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
     }
     unset($firma);
     return array('title' => "Ventas del cliente {$razonSocial} desglosadas por firmas. {$tituloPeriodo}", 'serieName' => "Ventas", 'serie' => $rows, 'query' => $query);
 }
 static function RecibosAgrupados($filtro)
 {
     $recibos = new RecibosClientes();
     $clientes = new Clientes();
     $tablaRecibos = $recibos->getDataBaseName() . "." . $recibos->getTableName();
     $tablaClientes = $clientes->getDataBaseName() . "." . $clientes->getTableName();
     $em = new EntityManager($recibos->getConectionName());
     if ($em->getDbLink()) {
         $filtro .= " and (Remesar='1') and (CHAR_LENGTH(r.Iban)>23) and (r.Iban<>'ES8200000000000000000000')";
         $query = "select r.IDCliente," . "sum(r.Importe) importe," . "r.Iban iban, " . "r.Bic bic, " . "r.Mandato idMandato, " . "r.FechaMandato fechaMandato " . "from {$tablaRecibos} as r " . "left join {$tablaClientes} as c on r.IDCliente=c.IDCliente " . "where {$filtro} " . "group by r.IDCliente,r.Iban " . "having sum(r.Importe)>0 " . "order by c.RazonSocial,r.Vencimiento ASC";
         $em->query($query);
         $rows = $em->fetchResult();
     }
     unset($em);
     unset($recibos);
     unset($clientes);
     $total = 0;
     foreach ($rows as $row) {
         $cliente = new Clientes($row['IDCliente']);
         $total += $row['importe'];
         $recibos[] = array('numeroFactura' => 'Varias', 'importe' => $row['importe'], 'idMandato' => $row['idMandato'], 'fechaMandato' => $row['fechaMandato'], 'bic' => $row['bic'] == '' ? "BBBBESPP" : $row['bic'], 'iban' => $row['iban'], 'razonSocial' => $cliente->getRazonSocial(), 'direccion1' => $cliente->getDireccion(), 'direccion2' => $cliente->getIDPoblacion()->getMunicipio() . " " . $cliente->getCodigoPostal() . " " . $cliente->getIDProvincia()->getProvincia(), 'pais' => $cliente->getIDPais()->getCodigo(), 'texto' => "Varias Facturas");
     }
     unset($cliente);
     return array('nRecibos' => count($rows), 'importeTotal' => $total, 'recibos' => $recibos);
 }
 /**
  * Devuelve un array de objetos Apunte,
  * con los apuntes de iva y recargo de equivalencia
  *
  * @param integer $nAsiento
  * @param date $fecha
  * @param array $factura
  * @param Clientes $cliente
  * @return ContaPlusDiario
  */
 private function ApunteIvaEmitidas($nAsiento, $fecha, array $factura, Clientes $cliente)
 {
     $apuntes = array();
     $j = 0;
     while ($j < 3) {
         $j++;
         if ($factura['BaseImponible' . $j] != 0) {
             if ($factura['TotalRecargo'] != 0) {
                 $sufijo = $this->SufijoRecargo($factura['Iva' . $j], $factura['Recargo' . $j]);
             } else {
                 $sufijo = $this->SufijoIva($factura['Iva' . $j]);
             }
             $subcuenta = str_pad('477', $this->DIGCC - 4, '0') . $sufijo;
             $apunte = new ContaPlusDiario($nAsiento, $fecha);
             $apunte->setSubCta($subcuenta);
             $apunte->setContra($cliente->getCContable());
             $apunte->setConcepto("Ntra. Factura " . $factura['NumeroFactura']);
             $apunte->setFactura(substr($factura['NumeroFactura'], 1, strlen($factura['NumeroFactura']) - 1));
             $apunte->setSerie(substr($factura['NumeroFactura'], 0, 1));
             $apunte->setIVA($factura['Iva' . $j]);
             $apunte->setRecequiv($factura['Recargo' . $j]);
             $apunte->setDocumento($factura['NumeroFactura']);
             $apunte->setEuroHaber($factura['CuotaIva' . $j]);
             $apunte->setBaseEuro($factura['BaseImponible' . $j]);
             $apunte->setFecha_OP($fecha);
             $apunte->setFecha_EX($fecha);
             $apunte->setTerIdNif('1');
             $apunte->setTerNif($cliente->getCif());
             $apunte->setTerNom($cliente->getRazonSocial());
             $apunte->setTipoFac('E');
             $apunte->setTipoIVA('G');
             $apunte->setL340('T');
             $apuntes[] = $apunte;
             if ($factura['CuotaRecargo' . $j] != 0) {
                 $subcuenta = str_pad('475', $this->DIGCC - 4, '0') . $sufijo;
                 $apunte = new ContaPlusDiario($nAsiento, $fecha);
                 $apunte->setSubCta($subcuenta);
                 $apunte->setContra($cliente->getCContable());
                 $apunte->setConcepto("Ntra. Factura " . $factura['NumeroFactura']);
                 $apunte->setFactura(substr($factura['NumeroFactura'], 1, strlen($factura['NumeroFactura']) - 1));
                 $apunte->setSerie(substr($factura['NumeroFactura'], 0, 1));
                 $apunte->setRecequiv($factura['Recargo' . $j]);
                 $apunte->setDocumento($factura['NumeroFactura']);
                 $apunte->setEuroHaber($factura['CuotaRecargo' . $j]);
                 $apunte->setBaseEuro($factura['BaseImponible' . $j]);
                 $apunte->setFecha_OP($fecha);
                 $apunte->setFecha_EX($fecha);
                 $apunte->setTerIdNif('1');
                 $apunte->setTerNif($cliente->getCif());
                 $apunte->setTerNom($cliente->getRazonSocial());
                 $apunte->setTipoFac('E');
                 $apunte->setTipoIVA('G');
                 $apunte->setL340('T');
                 $apuntes[] = $apunte;
             }
         }
     }
     return $apuntes;
 }