public function __construct($request)
 {
     if ($request['filter']['valuesSelected']['0'] == '') {
         $idSucursal = $_SESSION['suc'];
     } else {
         $idSucursal = $request['filter']['valuesSelected']['0'];
     }
     $tpv = new Tpvs();
     $tpvs = $tpv->fetchAll($idSucursal);
     $tpvs[] = array('Id' => '%', 'Value' => '** Todos **');
     $this->values['tpvs'] = $tpvs;
     unset($tpv);
     // Sucursales destino para el traspaso
     $sucursal = new Sucursales();
     $sucursales = $sucursal->getSucursalesUsuario($_SESSION['usuarioPortal']['Id'], false);
     $this->values['sucursalesDestino'] = $sucursales;
     // Cerrar las eventuales cajas abiertas de dias anterios
     $arqueo = new CajaArqueos();
     $arqueosAbiertos = $arqueo->getArqueosAbiertos('%', '%');
     foreach ($arqueosAbiertos as $arqueoAbierto) {
         $arqueo = new CajaArqueos($arqueoAbierto['IDArqueo']);
         if ($arqueo->cierra()) {
             $this->values['alertas'][] = "Se ha cerrado el arquero '{$arqueo->getIDTpv()->getNombre()}' del día {$arqueo->getDia()}";
         }
     }
     unset($arqueo);
     parent::__construct($request);
 }
 /**
  * Remove the specified resource from storage.
  */
 public function destroy(Sucursales $sucursales)
 {
     if ($sucursales->delete(['id'])) {
         return Redirect::back()->with('msg', 'Sucursal eliminada con éxito.')->with('class', 'success');
     } else {
         return Redirect::back()->with('msg', '¡Algo salió mal! La sucursal no pudo ser eliminada.')->with('class', 'error');
     }
 }
Example #3
0
 /**
  * Devuelve un array con los tpvs definidos para la sucursal $idSucursal
  *
  * Si no se indica la sucursal, se toma la sucursal en curso
  *
  * @param integer $idSucursal El id de sucursal (opcional)
  * @return array Array de Tpvs
  */
 public function getTpvsSucursal($idSucursal = '')
 {
     if ($idSucursal == '') {
         $idSucursal = $_SESSION['suc'];
     }
     $sucursal = new Sucursales($idSucursal);
     $rows = $sucursal->getTpvs();
     unset($sucursal);
     $rows[] = array('Id' => '%', 'Value' => '* Todos');
     return $rows;
 }
 public function getEdit(Pedidos $pedidos)
 {
     $platillos = Platillos::all();
     $listaplatillos = Pedidosplat::where('id_pedido', '=', $pedidos->id)->get();
     $sucursales = Sucursales::all();
     return View::make('dashboard/pedidos/edit', compact('pedidos', 'platillos', 'listaplatillos', 'sucursales'));
 }
Example #5
0
 /**
  * Devuelve un array con todas las sucursales de la empresa indicada
  * a las que tiene acceso el usuario logeado.
  *
  * Si no se indica empresa, se toma la actual: $_SESSION['emp']
  *
  * Si el usuario puede acceder a todas las sucursales y se activa a TRUE
  * el parámetro $opcionTodas, se añade un valor más en el array
  * con la opcion '** Todas **'
  *
  * @param integer $idEmpresa
  * @param boolean $opcionTodas
  * @return array
  */
 public function getSucursales($idEmpresa = '', $opcionTodas = TRUE)
 {
     if ($idEmpresa == '') {
         $idEmpresa = $_SESSION['emp'];
     }
     if ($this->IDSucursal < 1) {
         //Puede acceder a todas
         $sucursal = new Sucursales();
         $sucursales = $sucursal->cargaCondicion("IDSucursal as Id, Nombre as Value");
         if ($opcionTodas) {
             $sucursales[] = array('Id' => '', 'Value' => '** Todas **');
         }
         unset($sucursal);
     } else {
         //Puede acceder solo a una
         $sucursal = $this->getIDSucursal();
         $sucursales[] = array('Id' => $sucursal->getIDSucursal(), 'Value' => $sucursal->getNombre());
     }
     return $sucursales;
 }
 function Header()
 {
     $empresa = new PcaeEmpresas($_SESSION['emp']);
     $sucursal = new Sucursales($_SESSION['suc']);
     $logo = $empresa->getLogo();
     if (file_exists($logo)) {
         $this->Image($empresa->getLogo(), 10, 8, 23);
     }
     $this->SetFont('Arial', 'B', 12);
     $this->Cell(0, 5, $empresa->getRazonSocial(), 0, 1, "R");
     $this->SetFont('Arial', '', 8);
     $this->Cell(0, 5, $sucursal->getNombre(), 0, 1, "R");
     $this->SetFont('Arial', 'B', 11);
     $this->Cell(0, 5, $this->opciones['title'], 0, 1, "C");
     $this->Ln(5);
     $this->SetFont('Courier', 'B', 8);
     //PINTAR LOS TITULOS DE LAS COLUMNAS
     $this->Cell(10, 4, "Hora", 0, 0, "C");
     $this->Cell(100, 4, "Cliente", 0, 0, "C");
     $this->Cell(20, 4, "Poblacion", 0, 0, "C");
     $this->Cell(45, 4, "Telefonos", 0, 0, "C");
     $this->Cell(10, 4, "Riesgo", 0, 0, "C");
     $this->Cell(0, 4, "Comentarios", 0, 0, "C");
     $this->Ln();
 }
Example #7
0
/**
 * Construye un tag html <select> con todas las sucursales de una empresa dada.
 * @param integer $idEmpresa ID de la empresa
 * @return string Codigo html con el tag select
 */
function sucursalesEmpresa($idEmpresa)
{
    $sucursal = new Sucursales();
    $rows = $sucursal->fetchAll($idEmpresa);
    unset($sucursal);
    $ch = "<div class='Etiqueta'>Sucursal</div>";
    $ch .= "<select name='" . $_GET['nameselect'] . "' id='" . $_GET['idselect'] . "' class='Select'>";
    foreach ($rows as $row) {
        $ch .= "<option value='" . $row['Id'] . "'>" . $row['Value'] . "</option>";
    }
    $ch .= "</select>";
    return $ch;
}
Example #8
0
 function Header()
 {
     $empresa = new PcaeEmpresas($_SESSION['emp']);
     $sucursal = new Sucursales($_SESSION['suc']);
     $this->Image($empresa->getLogo(), 10, 8, 23);
     $this->SetFont('Arial', 'B', 12);
     $this->Cell(0, 5, $empresa->getRazonSocial(), 0, 1, "R");
     $this->SetFont('Arial', '', 8);
     $this->Cell(0, 5, $sucursal->getNombre(), 0, 1, "R");
     $this->SetFont('Arial', 'B', 12);
     $this->Cell(0, 5, $this->opciones['title'], 0, 1, "C");
     // Pintar la leyenda del filtro en la primera pagina
     if ($this->page == 1) {
         $this->Ln(5);
         $this->SetFont('Arial', '', '8');
         foreach ($this->opciones['leyendaFiltro'] as $filtro) {
             $this->Cell(25, 4, $filtro['Column'], 0, 0);
             $this->Cell(0, 4, $filtro['Value'], 0, 1);
         }
     }
     // Para los títulos pongo el mismo font que para el cuerpo del listado
     $this->Ln(5);
     $this->SetFont($this->opciones['titleFont'][0], $this->opciones['titleFont'][1], $this->opciones['titleFont'][2]);
     //PINTAR LOS TITULOS DE LAS COLUMNAS
     foreach ($this->opciones['columns'] as $value) {
         $caracteres = (int) $value['length'];
         $texto = trim((string) $value['title']);
         $ancho = $this->getStringWidth(str_pad(" ", $caracteres)) + 1;
         $this->Cell($ancho, 4, $this->DecodificaTexto($texto, $caracteres), 0, 0, "C", 1);
     }
     $this->Ln();
     //$this->Line($this->GetX(), $this->GetY(), $this->GetX() + 190, $this->GetY());
 }
 /**
  * Carga facturas recibidas desde un archivo de texto externo
  * Las columnas deben venir separadas por tabuladores
  * Las facturas se cargan en la sucursal en curso
  *
  * @param string $fileName El path completo del archivo a importar
  * @return array
  */
 public function ImportarAction($fileName = '')
 {
     if ($this->values['permisos']['permisosModulo']['IN']) {
         if ($fileName == '') {
             $fileName = $this->request[2];
         }
         if ($fileName != '') {
             $fileName = "docs/docs{$_SESSION['emp']}/tmp/" . $fileName;
         }
         $archivo = new Archivo($fileName);
         if ($archivo->open("r")) {
             set_time_limit(0);
             // Lee contador
             $contador = new Contadores();
             $contador = $contador->dameContador($_SESSION['suc'], 4);
             $idContador = $contador->getIDContador();
             // Buscar la cuenta contable de compras para la sucursal
             $sucursal = new Sucursales($_SESSION['suc']);
             $ctaCompras = $sucursal->getCtaContableCompras();
             unset($sucursal);
             while (($linea = $archivo->readLine()) !== FALSE) {
                 $fecha = explode("-", $linea[1]);
                 $proveedor = new Proveedores();
                 $proveedor = $proveedor->find('CContable', $linea[2]);
                 if ($proveedor->getIDProveedor() != '') {
                     $b1 = $linea[5];
                     $i1 = $linea[6];
                     $ci1 = round($b1 * $i1 / 100, 2);
                     $r1 = $linea[7];
                     $cr1 = round($b1 * $r1 / 100, 2);
                     $b2 = $linea[8];
                     $i2 = $linea[9];
                     $ci2 = round($b2 * $i2 / 100, 2);
                     $r2 = $linea[10];
                     $cr2 = round($b2 * $r2 / 100, 2);
                     $factura = new FrecibidasCab();
                     $factura->setIDContador($idContador);
                     $factura->setIDSucursal($_SESSION['suc']);
                     $factura->setNumeroFactura($contador->asignaContador());
                     $factura->setSuFactura($linea[0]);
                     $factura->setFecha($fecha[0] . "/" . $fecha[1] . "/20" . $fecha[2]);
                     $factura->setIDProveedor($proveedor->getIDProveedor());
                     $factura->setImporte($b1 + $b2);
                     $factura->setBaseImponible1($b1);
                     $factura->setIva1($i1);
                     $factura->setCuotaIva1($ci1);
                     $factura->setRecargo1($r1);
                     $factura->setCuotaRecargo1($cr1);
                     $factura->setBaseImponible2($b2);
                     $factura->setIva2($i2);
                     $factura->setCuotaIva2($ci2);
                     $factura->setRecargo2($r2);
                     $factura->setCuotaRecargo2($cr2);
                     $factura->setTotalBases($b1 + $b2);
                     $factura->setTotalIva($ci1 + $ci2);
                     $factura->setTotalRecargo($cr1 + $cr2);
                     $factura->setTotal($b1 + $b2 + $ci1 + $ci2 + $cr1 + $cr2);
                     $factura->setIDFP(1);
                     $factura->setAsiento(9999);
                     $factura->setCuentaCompras($ctaCompras);
                     if ($factura->create()) {
                         $factura->creaVctos();
                     } else {
                         $this->values['errores'][] = $factura->getErrores();
                     }
                     //print_r($factura->getErrores());
                 } else {
                     $this->values['errores'][] = "No existe el proveedor " . $linea[2] . " " . $linea[4] . ". No se carga la factura " . $linea[0];
                 }
             }
             $archivo->close();
         } else {
             $this->values['errores'][] = "El fichero de importación " . $fileName . " no existe";
         }
         unset($archivo);
         return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
     } else {
         return array('template' => '_global/forbiden.html.twig');
     }
 }
Example #10
0
     $getter->registrar_sucursal($sucursal);
     break;
 case '4':
     /*Obtiene las sucursales más cercanas segun unas coordenadas y un radio otorgado*/
     if (!isset($_REQUEST['lat']) || !isset($_REQUEST['lon'])) {
         $datos['success'] = 0;
         echo json_encode($datos);
         exit;
     } else {
         if ($_REQUEST['lat'] == '' || $_REQUEST['lon'] == '' || $_REQUEST['lat'] == 0 || $_REQUEST['lon'] == 0) {
             $datos['success'] = 0;
             echo json_encode($datos);
             exit;
         }
         require 'sucursal.model.php';
         $getter = new Sucursales();
         $getter->set_host(1);
         $latitud = $getter->limpiar_variable($_REQUEST['lat']);
         $longitud = $getter->limpiar_variable($_REQUEST['lon']);
         if ($latitud == undefined || $latitud == null || $longitud == undefined || $longitud == null) {
             $latitud = -33.437924;
             $longitud = -70.650485;
         }
         if (isset($_REQUEST['rad'])) {
             $radio = $getter->limpiar_variable($_REQUEST['rad']);
         } else {
             $radio = 0;
         }
         if (isset($_REQUEST['lim'])) {
             $limite = $getter->limpiar_variable($_REQUEST['lim']);
         } else {
Example #11
0
 /**
  * Facturar el pedido
  * Según la forma de pago, se actualiza la cartera de efectos.
  * Recibe el objeto contador que se utilizará para obtener el nº de factura.
  *
  * @param Contadores $contador El objeto contador
  * @param date $fecha La fecha de la factura (opcional, toma la del sistema)
  * @param string $suFactura El numero de factura del proveedor (opcional)
  * @param integer $idFp El id de la forma de pago (opcional)
  * @return int El id de la factura generada
  */
 public function facturar(Contadores $contador, $fecha = '', $suFactura = '', $idFp = '')
 {
     if ($fecha == '') {
         $fecha = date('d-m-Y');
     }
     $idFactura = 0;
     if ($this->getIDEstado()->getIDTipo() == 2 and $this->getIDFactura()->getIDFactura() == 0) {
         // Buscar la cuenta contable de compras para la sucursal
         $sucursal = new Sucursales($this->IDSucursal);
         $ctaCompras = $sucursal->getCtaContableCompras();
         unset($sucursal);
         // Lee contador
         $idContador = $contador->getIDContador();
         $numeroFactura = $contador->asignaContador();
         unset($contador);
         // Crear la cabecera de la factura
         $factura = new FrecibidasCab();
         $factura->setIDSucursal($this->IDSucursal);
         $factura->setIDContador($idContador);
         $factura->setNumeroFactura($numeroFactura);
         $factura->setSuFactura($suFactura);
         $factura->setFecha($fecha);
         $factura->setIDProveedor($this->IDProveedor);
         $factura->setImporte($this->Importe);
         $factura->setDescuento($this->Descuento);
         $factura->setBaseImponible1($this->BaseImponible1);
         $factura->setIva1($this->Iva1);
         $factura->setCuotaIva1($this->CuotaIva1);
         $factura->setRecargo1($this->Recargo1);
         $factura->setCuotaRecargo1($this->CuotaRecargo1);
         $factura->setBaseImponible2($this->BaseImponible2);
         $factura->setIva2($this->Iva2);
         $factura->setCuotaIva2($this->CuotaIva2);
         $factura->setRecargo2($this->Recargo2);
         $factura->setCuotaRecargo2($this->CuotaRecargo2);
         $factura->setBaseImponible3($this->BaseImponible3);
         $factura->setIva3($this->Iva3);
         $factura->setCuotaIva3($this->CuotaIva3);
         $factura->setRecargo3($this->Recargo3);
         $factura->setCuotaRecargo3($this->CuotaRecargo3);
         $factura->setTotalBases($this->TotalBases);
         $factura->setTotalIva($this->TotalIva);
         $factura->setTotalRecargo($this->TotalRecargo);
         $factura->setTotal($this->Total);
         $factura->setReferencia($this->Referencia);
         $factura->setCuentaCompras($ctaCompras);
         if ($idFp == '') {
             $factura->setIDFP($this->IDFP);
         } else {
             $factura->setIDFP($idFp);
         }
         $idFactura = $factura->create();
         if ($idFactura != 0) {
             // Crear las lineas de factura
             $linPedido = new PedidosLineas();
             $rows = $linPedido->cargaCondicion("*", "IDPedido='{$this->IDPedido}'", "IDLinea ASC");
             unset($linPedido);
             foreach ($rows as $row) {
                 $importe = $row['UnidadesRecibidas'] * $row['Precio'] * (1 - $row['Descuento'] / 100);
                 $linFactura = new FrecibidasLineas();
                 $linFactura->setIDFactura($idFactura);
                 $linFactura->setIDArticulo($row['IDArticulo']);
                 $linFactura->setDescripcion($row['Descripcion']);
                 $linFactura->setUnidades($row['UnidadesRecibidas']);
                 $linFactura->setPrecio($row['Precio']);
                 $linFactura->setDescuento($row['Descuento']);
                 $linFactura->setImporte($importe);
                 $linFactura->setIDPedido($row['IDPedido']);
                 $linFactura->setIDLineaPedido($row['IDLinea']);
                 $linFactura->setIva($row['Iva']);
                 if ($linFactura->create()) {
                     // Pongo el estado de la linea de pedido a "Facturado"
                     $lineaPedido = new PedidosLineas($row['IDLinea']);
                     $lineaPedido->setIDEstado(3);
                     $lineaPedido->setUnidadesPtesFacturar(0);
                     $lineaPedido->save();
                     unset($lineaPedido);
                 }
                 unset($linFactura);
             }
             // Recalcula la factura:
             // puede que las cantidades facturas sean distintas a las pedidas
             $factura->recalcula();
             // Crear vencimientos
             $factura->creaVctos();
             // Anotar en caja si procede
             $factura->anotaEnCaja();
             // Actualiza la cabecera del pedido
             $this->setIDFactura($idFactura);
             $this->setIDEstado(3);
             $this->save();
         }
         unset($factura);
     }
     return $idFactura;
 }
 public function xxgetShowexcel(Orden $orden)
 {
     $ordenpedido = Ordenpedido::where('id_orden', '=', $orden->id)->get();
     $a = 0;
     $b = 0;
     $c = 0;
     $d = 0;
     $e = 0;
     $f = 0;
     foreach ($ordenpedido as $ord) {
         $orde[$a] = $ord;
         foreach (Pedidos::where('id', '=', $ord->id_pedido)->get() as $ped) {
             $pedido[$b] = $ped->sucursal;
             foreach (Pedidosplat::where('id_pedido', '=', $ped->id)->get() as $pedplat) {
                 $pedidosplatillos[$c] = $pedplat;
                 foreach (Platillos::where('id', '=', $pedplat->id_platillo)->get() as $plat) {
                     $plats[$d] = $plat;
                     foreach (PlatillosMp::where('platillos_id', '=', $plat->id)->get() as $platmp) {
                         $platsmp[$e] = $platmp;
                         foreach (Materias::where('id', '=', $platmp->materia_prima)->get() as $materia) {
                             $materias[$f] = $materia->id;
                             $f++;
                         }
                         $e++;
                     }
                     $d++;
                 }
                 $c++;
             }
             $b++;
         }
         $a++;
     }
     $materiasall = Materias::whereIn('id', $materias)->get();
     $sucursales = Sucursales::whereIn('id', $pedido)->get();
     return view::make('pruebas.excelprueba', ['orden' => $orden, 'ordenpedido' => $ordenpedido, 'materiasall' => $materiasall, 'orde' => $orde, 'pedido' => $pedido, 'pedidosplatillos' => $pedidosplatillos, 'plats' => $plats, 'platsmp' => $platsmp, 'sucursales' => $sucursales]);
 }
 public function getShowexcel(Orden $orden)
 {
     $excel = App::make('excel');
     Excel::create('orden-' . $orden->id, function ($excel) use($orden) {
         $excel->sheet('First sheet', function ($sheet) use($orden) {
             $ordenpedido = Ordenpedido::where('id_orden', '=', $orden->id)->get();
             $a = 0;
             $b = 0;
             $c = 0;
             $d = 0;
             $e = 0;
             $f = 0;
             foreach ($ordenpedido as $ord) {
                 $orde[$a] = $ord;
                 foreach (Pedidos::where('id', '=', $ord->id_pedido)->get() as $ped) {
                     $pedido[$b] = $ped->sucursal;
                     foreach (Pedidosplat::where('id_pedido', '=', $ped->id)->get() as $pedplat) {
                         $pedidosplatillos[$c] = $pedplat;
                         foreach (Platillos::where('id', '=', $pedplat->id_platillo)->get() as $plat) {
                             $plats[$d] = $plat;
                             foreach (PlatillosMp::where('platillos_id', '=', $plat->id)->get() as $platmp) {
                                 $platsmp[$e] = $platmp;
                                 foreach (Materias::where('id', '=', $platmp->materia_prima)->get() as $materia) {
                                     $materias[$f] = $materia->id;
                                     $f++;
                                 }
                                 $e++;
                             }
                             $d++;
                         }
                         $c++;
                     }
                     $b++;
                 }
                 $a++;
             }
             $materiasall = Materias::whereIn('id', $materias)->get();
             $sucursales = Sucursales::whereIn('id', $pedido)->get();
             //variables para orden general
             $total_g = 0;
             $total_gen[] = 0;
             $cant_gen = 0;
             $sobrante_gen = 0;
             $ordenpedido = Ordenpedido::where('id_orden', '=', $orden->id)->get();
             $a = 0;
             $b = 0;
             $c = 0;
             $d = 0;
             $e = 0;
             $f = 0;
             //para compra general
             foreach ($materiasall as $mat) {
                 foreach ($ordenpedido as $ord) {
                     $orde1[$a] = $ord;
                     foreach (Pedidos::where('id', '=', $ord->id_pedido)->get() as $ped) {
                         $pedido1[$b] = $ped->sucursal;
                         foreach (Pedidosplat::where('id_pedido', '=', $ped->id)->get() as $pedplat) {
                             $pedidosplatillos1[$c] = $pedplat;
                             foreach (Platillos::where('id', '=', $pedplat->id_platillo)->get() as $plat) {
                                 $plats1[$d] = $plat;
                                 foreach (PlatillosMp::where('platillos_id', '=', $plat->id)->get() as $platmp) {
                                     $platsmp1[$e] = $platmp;
                                     if ($mat->id == $platmp->materia_prima) {
                                         $total_g = $total_g + $platmp->cantidad_mp * $pedplat->cantidad;
                                     }
                                     $e++;
                                 }
                                 $d++;
                             }
                             $c++;
                         }
                         $b++;
                     }
                     $a++;
                 }
                 $total_general[$f] = $total_g . ' ' . $mat->Unidades->nombre;
                 $f++;
             }
             $sheet->loadView('dashboard.orden.showexcel', ['orden' => $orden, 'ordenpedido' => $ordenpedido, 'materiasall' => $materiasall, 'orde' => $orde, 'pedido' => $pedido, 'total_general' => $total_general, 'pedidosplatillos' => $pedidosplatillos, 'plats' => $plats, 'platsmp' => $platsmp, 'sucursales' => $sucursales]);
         });
     })->download('xls');
 }
 function Header()
 {
     $empresa = new PcaeEmpresas($_SESSION['emp']);
     $sucursal = new Sucursales($_SESSION['suc']);
     $this->Image($empresa->getLogo(), 10, 8, 23);
     $this->SetFont('Arial', 'B', 12);
     $this->Cell(0, 5, $empresa->getRazonSocial(), 0, 1, "R");
     $this->SetFont('Arial', '', 8);
     $this->Cell(0, 5, $sucursal->getNombre(), 0, 1, "R");
     $this->SetFont('Arial', 'B', 12);
     $this->Cell(0, 5, "ORDEN DE REPARTO " . $this->opciones['almacen'] . " " . $this->opciones['dia'] . " Ruta: " . $this->opciones['ruta'], 0, 1, "C");
     $this->SetFont('Arial', 'B', 9);
     $this->Cell(15, 4, "Orden", 1, 0, "C");
     $this->Cell(15, 4, "Hora", 1, 0, "C");
     $this->Cell(150, 4, "Cliente / Direccion", 1, 0, "C");
     $this->Cell(50, 4, "Comercial", 1, 0, "C");
     $this->Cell(50, 4, "Observaciones", 1, 0, "C");
     $this->Ln();
     $this->SetFont('Arial', '', 8);
 }
 /**
  * Carga facturas emitidas desde un archivo de texto externo
  * Las columnas deben venir separadas por tabuladores
  * Las facturas se cargan en la sucursal en curso
  *
  * @param string $fileName El path completo del archivo a importar
  */
 private function importarArchivo($fileName)
 {
     $archivo = new Archivo($fileName);
     if ($archivo->open("r")) {
         set_time_limit(0);
         // Lee contador
         $contador = new Contadores();
         $contador = $contador->dameContador($_SESSION['suc'], 2);
         $idContador = $contador->getIDContador();
         // Buscar la cuenta contable de ventas para la sucursal
         $sucursal = new Sucursales($_SESSION['suc']);
         $ctaVentas = $sucursal->getCtaContableVentas();
         unset($sucursal);
         while (($linea = $archivo->readLine()) !== FALSE) {
             $fecha = explode("-", $linea[2]);
             $cliente = new Clientes();
             $cliente = $cliente->find('CContable', $linea[3]);
             if ($cliente->getIDCliente() != '') {
                 // Pongo los valores a cero en caso de que no venga nada
                 for ($i = 6; $i <= 11; $i++) {
                     if ($linea[$i] == '') {
                         $linea[$i] = 0;
                     }
                 }
                 $b1 = $linea[6];
                 $i1 = $linea[7];
                 $ci1 = round($b1 * $i1 / 100, 2);
                 $r1 = $linea[8];
                 $cr1 = round($b1 * $r1 / 100, 2);
                 $b2 = $linea[9];
                 $i2 = $linea[10];
                 $ci2 = round($b2 * $i2 / 100, 2);
                 $r2 = $linea[11];
                 $cr2 = round($b2 * $r2 / 100, 2);
                 $factura = new FemitidasCab();
                 $factura->setIDContador($idContador);
                 if ($this->request['RespectarNumerosFactura'] == 'on') {
                     $numeroFactura = $contador->getSerie() . (1200000 + $linea[1]);
                 } else {
                     $numeroFactura = $contador->asignaContador();
                 }
                 $factura->setNumeroFactura($numeroFactura);
                 $factura->setIDSucursal($_SESSION['suc']);
                 $factura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                 $factura->setIDComercial(1);
                 $factura->setFecha($fecha[0] . "/" . $fecha[1] . "/20" . $fecha[2]);
                 $factura->setIDCliente($cliente->getIDCliente());
                 $factura->setImporte($b1 + $b2);
                 $factura->setBaseImponible1($b1);
                 $factura->setIva1($i1);
                 $factura->setCuotaIva1($ci1);
                 $factura->setRecargo1($r1);
                 $factura->setCuotaRecargo1($cr1);
                 $factura->setBaseImponible2($b2);
                 $factura->setIva2($i2);
                 $factura->setCuotaIva2($ci2);
                 $factura->setRecargo2($r2);
                 $factura->setCuotaRecargo2($cr2);
                 $factura->setTotalBases($b1 + $b2);
                 $factura->setTotalIva($ci1 + $ci2);
                 $factura->setTotalRecargo($cr1 + $cr2);
                 $factura->setTotal($b1 + $b2 + $ci1 + $ci2 + $cr1 + $cr2);
                 $factura->setIDFP($this->request['IDFP']);
                 $factura->setAsiento(9999);
                 $factura->setCuentaVentas($ctaVentas);
                 if ($factura->create()) {
                     $factura->creaVctos();
                 } else {
                     $this->values['errores'] = $factura->getErrores();
                 }
             } else {
                 $this->values['errores'][] = "No existe el cliente " . $linea[3] . " " . $linea[5] . ". No se carga la factura " . $linea[1];
             }
         }
         $archivo->close();
     } else {
         $this->values['errores'][] = "El fichero de importación " . $fileName . " no existe";
     }
     unset($archivo);
 }
 /**
  * Proceso de facturacion.
  * Puede ser facturación separada: Una factura por cada albarán
  * o facturación agrupada: Una factura con todos los albaranes, con las siguientes salvedades:
  *
  * Se agrupan las facturas en base a la forma de pago, comercial y al flag "Facturación agrupada"
  * de la ficha del cliente.
  *
  * @return <type>
  */
 public function facturarAction()
 {
     $facturados = array();
     $filtro = $this->request['filtro'];
     $fecha = new Fecha($filtro['desdeFecha']);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($filtro['hastaFecha']);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     switch ($this->request['tipo']) {
         case '0':
             // Facturación individual. Se genera una factura por cada albarán
             $filter = "IDFactura='0' and IDEstado='2' and IDCliente='{$filtro['idCliente']}' and FechaEntrega>='{$desdeFecha}' and FechaEntrega<'{$hastaFecha}' and FlagFacturar='1'";
             $albaran = new AlbaranesCab();
             $rows = $albaran->cargaCondicion("IDAlbaran", $filter, "FechaEntrega ASC");
             foreach ($rows as $row) {
                 $albaran = new AlbaranesCab($row['IDAlbaran']);
                 $idFactura = $albaran->facturar(new Contadores($this->request['idContador']), $this->request['fecha']);
                 if (count($albaran->getErrores()) != 0) {
                     $this->values['errores'] = $albaran->getErrores();
                     break;
                 } else {
                     $facturados[] = $idFactura;
                 }
             }
             unset($albaran);
             break;
         case '1':
             // Agrupada. Se agrupan los albaranes por forma de pago, comercial
             $filter = "c.IDFactura='0' and c.IDEstado='2' and c.IDCliente='{$filtro['idCliente']}' and c.FechaEntrega>='{$desdeFecha}' and c.FechaEntrega<'{$hastaFecha}' and c.FlagFacturar='1'";
             //COMPRUEBO QUE NO HAYA MAS DE TRES TIPOS DE IVA ENTRE TODOS LOS ALBARANES A FACTURAR
             $albaran = new AlbaranesCab();
             $albaranTabla = $albaran->getDataBaseName() . "." . $albaran->getTableName();
             $lineas = new AlbaranesLineas();
             $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
             $em = new EntityManager($albaran->getConectionName());
             if (!$em->getDbLink()) {
                 $this->values['errores'] = $em->getError();
                 return $this->listAction();
             }
             $query = "select l.Iva from {$lineasTabla} as l, {$albaranTabla} as c\n                        where {$filter} and c.IDAlbaran=l.IDAlbaran\n                        group by l.Iva";
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
             if (count($rows) > 3) {
                 $this->values['alertas'] = "Hay más de tres tipos de iva distintos. No se puede agrupar";
                 return $this->listAction();
             }
             $contador = new Contadores($this->request['idContador']);
             // Buscar la cuenta contable de ventas para la sucursal
             $sucursal = new Sucursales($filtro['idSucursal']);
             $ctaVentas = $sucursal->getCtaContableVentas();
             unset($sucursal);
             $cliente = new Clientes($filtro['idCliente']);
             $agruparDireccionEntrega = $cliente->getFacturacionAgrupada()->getIDTipo() == '1';
             unset($cliente);
             $query = $agruparDireccionEntrega ? "select c.IDFP,c.IDComercial, sum(c.Importe) as Importe, sum(Descuento) as Descuento from {$albaranTabla} c where {$filter} GROUP BY c.IDFP, c.IDComercial;" : "select c.IDFP,c.IDComercial, c.IDDirec, sum(c.Importe) as Importe, sum(Descuento) as Descuento from {$albaranTabla} c where {$filter} GROUP BY c.IDFP, c.IDComercial, c.IDDirec;";
             unset($cliente);
             //AGRUPO LOS ALBARANES POR FORMA DE PAGO, COMERCIAL Y (si procede) DIRECCION DE ENTREGA.
             $em = new EntityManager($albaran->getConectionName());
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
             foreach ($rows as $row) {
                 $numeroFactura = $contador->asignaContador();
                 $factura = new FemitidasCab();
                 $factura->setIDSucursal($filtro['idSucursal']);
                 $factura->setIDContador($this->request['idContador']);
                 $factura->setNumeroFactura($numeroFactura);
                 $factura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                 $factura->setIDComercial($row['IDComercial']);
                 $factura->setFecha($this->request['fecha']);
                 $factura->setIDCliente($filtro['idCliente']);
                 $factura->setCuentaVentas($ctaVentas);
                 $factura->setDescuento($row['Descuento']);
                 $factura->setImporte($row['Importe']);
                 $factura->setIDFP($row['IDFP']);
                 $idFactura = $factura->create();
                 // Guardo en un array los id's de facturas generadas
                 $facturados[] = $idFactura;
                 if ($idFactura != 0) {
                     // Crear las lineas de factura
                     // No incluyo las lineas de albaran cuyas unidades sean 0
                     $em = new EntityManager($albaran->getConectionName());
                     $query = $agruparDireccionEntrega ? "select l.* from {$lineasTabla} l, {$albaranTabla} c where (c.IDAlbaran=l.IDAlbaran) and (c.IDFP='{$row['IDFP']}') and (l.Unidades<>0) and {$filter}" : "select l.* from {$lineasTabla} l, {$albaranTabla} c where (c.IDAlbaran=l.IDAlbaran) and (c.IDFP='{$row['IDFP']}') and (c.IDDirec='{$row['IDDirec']}') and (l.Unidades<>0) and {$filter}";
                     $em->query($query);
                     $lineas = $em->fetchResult();
                     $em->desConecta();
                     foreach ($lineas as $linea) {
                         $linFactura = new FemitidasLineas();
                         $linFactura->setIDFactura($idFactura);
                         $linFactura->setIDArticulo($linea['IDArticulo']);
                         $linFactura->setDescripcion($linea['Descripcion']);
                         $linFactura->setUnidades($linea['Unidades']);
                         $linFactura->setPrecio($linea['Precio']);
                         $linFactura->setDescuento($linea['Descuento']);
                         $linFactura->setImporte($linea['Importe']);
                         $linFactura->setImporteCosto($linea['ImporteCosto']);
                         $linFactura->setIDAlbaran($linea['IDAlbaran']);
                         $linFactura->setIDLineaAlbaran($linea['IDLinea']);
                         $linFactura->setIva($linea['Iva']);
                         $linFactura->setRecargo($linea['Recargo']);
                         $linFactura->setIDVenta($linea['IDVenta']);
                         $linFactura->setComisionAgente($linea['ComisionAgente']);
                         $linFactura->setComisionMontador($linea['ComisionMontador']);
                         $linFactura->setComisionar($linea['Comisionar']);
                         $linFactura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                         $linFactura->setIDComercial($linea['IDComercial']);
                         $linFactura->setIDPromocion($linea['IDPromocion']);
                         $linFactura->setAltoAl($linea['AltoAl']);
                         $linFactura->setAnchoAl($linea['AnchoAl']);
                         $linFactura->setMtsAl($linea['MtsAl']);
                         $linFactura->setAltoFa($linea['AltoFa']);
                         $linFactura->setAnchoFa($linea['AnchoFa']);
                         $linFactura->setMtsFa($linea['MtsFa']);
                         if ($linFactura->create()) {
                             // Pongo el estado de la linea de albaran a "Facturado"
                             $lineaAlbaran = new AlbaranesLineas($linea['IDLinea']);
                             $lineaAlbaran->setIDEstado(3);
                             $lineaAlbaran->save();
                         } else {
                             print_r($linFactura->getErrores());
                         }
                         unset($linFactura);
                     }
                     // Totalizar la factura
                     $factura->recalcula();
                     // Crear vencimientos
                     $factura->creaVctos();
                     // Anotar en caja sin procede
                     $factura->anotaEnCaja();
                     // Actualiza las cabecera del grupo de albaranes
                     $em = new EntityManager($albaran->getConectionName());
                     $query = $agruparDireccionEntrega ? "update {$albaranTabla} c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and ({$filter})" : "update {$albaranTabla} c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and (c.IDDirec='{$row['IDDirec']}') and ({$filter})";
                     $em->query($query);
                     $em->desConecta();
                     unset($factura);
                 } else {
                     $this->values['errores'] = $factura->getErrores();
                 }
             }
             break;
     }
     if ($this->request['imprimir'] == 'on' and count($facturados) > 0) {
         $this->values['archivo'] = $this->generaPdf('FemitidasCab', $facturados);
     }
     if (count($facturados) > 0) {
         $this->values['alertas'][] = "Se han generado las siguientes facturas:";
         foreach ($facturados as $item) {
             $this->values['alertas'][] = $item;
         }
     }
     return $this->listAction();
 }
 /**
  * Proceso de facturación agrupada.
  *
  * Se pueden agrupar pedidos de distintas sucursales, en cuyo caso
  * la factura generada se asignará a la sucursal en curso.
  *
  * Se agrupan las facturas en base a la forma de pago.
  *
  * @return <type>
  */
 public function ConformarAction()
 {
     $facturados = array();
     $filtro = $this->request['filtro'];
     $fecha = new Fecha($filtro['desdeFecha']);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($filtro['hastaFecha']);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     if ($filtro['idSucursal'] == '') {
         $filterSucursal = "(1)";
         $idSucursal = $_SESSION['suc'];
     } else {
         $filterSucursal = "(IDSucursal='{$filtro['idSucursal']}')";
         $idSucursal = $filtro['idSucursal'];
     }
     $filter = $filterSucursal . " AND c.IDFactura='0' and c.IDEstado='2' and c.IDProveedor='{$filtro['idProveedor']}' and c.Fecha>='{$desdeFecha}' and c.Fecha<'{$hastaFecha}' and c.FlagFacturar='1'";
     //COMPRUEBO QUE NO HAYA MAS DE TRES TIPOS DE IVA ENTRE TODOS LOS ALBARANES A FACTURAR
     $pedidos = new PedidosCab();
     $em = new EntityManager($pedidos->getConectionName());
     if (!$em->getDbLink()) {
         $this->values['errores'] = $em->getError();
         return $this->listAction();
     }
     $query = "SELECT l.Iva\n                    FROM\n                        {$em->getDataBase()}.ErpPedidosLineas as l,\n                        {$em->getDataBase()}.ErpPedidosCab as c\n                    WHERE {$filter} and c.IDPedido=l.IDPedido\n                    GROUP BY l.Iva";
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     if (count($rows) > 3) {
         $this->values['alertas'] = "Hay más de tres tipos de iva distintos. No se puede agrupar";
         return $this->listAction();
     }
     $contador = new Contadores($this->request['idContador']);
     // Buscar la cuenta contable de compras para la sucursal
     $sucursal = new Sucursales($idSucursal);
     $ctaCompras = $sucursal->getCtaContableCompras();
     unset($sucursal);
     //AGRUPO LOS PEDIDOS POR FORMA DE PAGO.
     $em = new EntityManager($pedidos->getConectionName());
     $query = "SELECT c.IDFP, sum(c.Total) as Total FROM {$pedidos->getDataBaseName()}.ErpPedidosCab as c WHERE {$filter} GROUP BY c.IDFP";
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     foreach ($rows as $row) {
         $numeroFactura = $contador->asignaContador();
         $factura = new FrecibidasCab();
         $factura->setIDSucursal($idSucursal);
         $factura->setIDContador($this->request['idContador']);
         $factura->setNumeroFactura($numeroFactura);
         $factura->setSuFactura($this->request['suFactura']);
         $factura->setFecha($this->request['fecha']);
         $factura->setIDProveedor($filtro['idProveedor']);
         $factura->setCuentaCompras($ctaCompras);
         $factura->setIDFP($row['IDFP']);
         $idFactura = $factura->create();
         // Guardo en un array los id's de facturas generadas
         $facturados[] = $idFactura;
         if ($idFactura != 0) {
             // Crear las líneas de factura
             $em = new EntityManager($pedidos->getConectionName());
             $query = "select l.* from {$pedidos->getDataBaseName()}.ErpPedidosLineas l, {$pedidos->getDataBaseName()}.ErpPedidosCab c where (c.IDPedido=l.IDPedido) and (c.IDFP='{$row['IDFP']}') and {$filter}";
             $em->query($query);
             $lineas = $em->fetchResult();
             $em->desConecta();
             foreach ($lineas as $linea) {
                 $linFactura = new FrecibidasLineas();
                 $linFactura->setIDFactura($idFactura);
                 $linFactura->setIDArticulo($linea['IDArticulo']);
                 $linFactura->setDescripcion($linea['Descripcion']);
                 $linFactura->setUnidades($linea['UnidadesPtesFacturar']);
                 $linFactura->setPrecio($linea['Precio']);
                 $linFactura->setDescuento($linea['Descuento']);
                 $linFactura->setIva($linea['Iva']);
                 $linFactura->setIDPedido($linea['IDPedido']);
                 $linFactura->setIDLineaPedido($linea['IDLinea']);
                 if ($linFactura->create()) {
                     // Pongo el estado de la linea de pedido a "Facturado" y
                     // quitar el pendiente de facturar.
                     $lineaPedido = new PedidosLineas($linea['IDLinea']);
                     $lineaPedido->setIDEstado(3);
                     $lineaPedido->setUnidadesPtesFacturar(0);
                     $lineaPedido->save();
                 }
                 unset($linFactura);
             }
             // Totalizar la factura
             $factura->recalcula();
             // Crear vencimientos
             $factura->creaVctos();
             // Anotar en caja si procede
             $factura->anotaEnCaja();
             // Actualiza las cabecera del grupo de pedidos
             $em = new EntityManager($pedidos->getConectionName());
             $query = "update {$pedidos->getDataBaseName()}.ErpPedidosCab c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and ({$filter})";
             $em->query($query);
             $em->desConecta();
             unset($factura);
         } else {
             $this->values['errores'] = $factura->getErrores();
         }
     }
     return $this->listAction();
 }