user()->id; if (!$envio_id || !$envio_lineas) { return [ 'status' => false ]; } // el albaran es para el mismo cliente, por lo que se obtiene el cliente_id de la primera_linea $cliente_id = $this->db->table('envios_lineas') ->select('presupuestos.cliente_id') ->join('presupuestos', 'presupuestos.id = envios_lineas.presupuesto_id') ->where('envios_lineas.id', $envio_lineas[0]) ->get() ->getRow()->cliente_id; // se genera el numero de albaran $model_series = model('App\Models\Configuracion\SeriesFacturasModel'); $serie = $model_series->find(11); $numero_albaran = str_replace('{number}', $serie->next, $serie->formato); $numero_albaran = str_replace('{year}', date("Y"), $numero_albaran); $serie->next = $serie->next + 1; $model_series->save($serie); // Se genera el albaran con los datos del envio $model_envio = model('App\Models\Logistica\EnvioModel'); $envio = $model_envio->find($envio_id); $data = [ 'envio_id' => $envio->id, 'cliente_id' => $cliente_id, 'serie_id' => 11, // Serie de albaranes 'numero_albaran' => $numero_albaran, 'mostrar_precios' => 0, 'direccion_albaran' => $envio->direccion, 'att_albaran' => $envio->att, 'user_created_id' => $user_id, 'cajas' => $cajas, ]; $id_albaran = $this->insert($data); if(!$id_albaran) { return [ 'status' => false ]; } // Se generan las lineas del albaran $model_albaran_linea = model('App\Models\Albaranes\AlbaranLineaModel'); $albaran_linea = []; foreach ($envio_lineas as $linea) { $modelLineaEnvio = model('App\Models\Logistica\EnvioLineaModel'); $datosLinea = $this->db->table('envios_lineas') ->select('presupuestos.titulo as titulo, presupuestos.isbn as isbn, presupuestos.referencia_cliente as ref_cliente, envios_lineas.unidades_envio as cantidad, presupuestos.total_precio_unidad as precio_unidad, presupuestos.iva_reducido as iva_reducido, ROUND(envios_lineas.unidades_envio * presupuestos.total_precio_unidad, 2) as total, pedidos_linea.id as pedido_linea_id') ->join('presupuestos', 'presupuestos.id = envios_lineas.presupuesto_id') ->join('pedidos', 'pedidos.id = envios_lineas.pedido_id') ->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id') ->where('envios_lineas.id', $linea) ->get() ->getRow(); $linea = $modelLineaEnvio->find($linea); if (!$linea) { continue; } $albaran_linea = [ 'albaran_id' => $id_albaran, 'titulo' => $datosLinea->titulo, 'isbn' => $datosLinea->isbn, 'ref_cliente' => $datosLinea->ref_cliente, 'cantidad' => $datosLinea->cantidad, 'precio_unidad' => $datosLinea->precio_unidad, 'iva_reducido' => $datosLinea->iva_reducido, 'total' => $datosLinea->total, 'user_created_id' => $user_id, 'user_updated_id' => $user_id, 'pedido_linea_id' => $datosLinea->pedido_linea_id, ]; $model_albaran_linea->insert($albaran_linea); } $albaran_data = $this->db->table('albaranes t1') ->select(" t1.id, t1.att_albaran AS att, t1.direccion_albaran AS direccion, t1.envio_id, t1.numero_albaran AS numero_albaran, DATE_FORMAT(t1.created_at, '%d/%m/%Y') AS fecha_creacion, DATE_FORMAT(t1.fecha_albaran, '%d/%m/%Y') AS fecha_albaran, t1.mostrar_precios AS mostrar_precios, t1.cajas AS cajas, ") ->where('t1.id', $id_albaran) ->get() ->getResultObject(); $modelCliente = model('App\Models\Clientes\ClienteModel'); $cliente = $modelCliente->find($cliente_id); $albaran_data[0]->cliente = $cliente->nombre; return [ 'status' => true, 'albaran' => $albaran_data[0], ]; } public function getAlbaranesEnvio($envio_id=null){ if (!$envio_id) { return []; } $albaran_data = $this->db->table('albaranes t1') ->select(" t1.id, t1.att_albaran AS att, t1.direccion_albaran AS direccion, t1.envio_id, t1.numero_albaran AS numero_albaran, DATE_FORMAT(t1.created_at, '%d/%m/%Y') AS fecha_creacion, DATE_FORMAT(t1.fecha_albaran, '%d/%m/%Y') AS fecha_albaran, t1.mostrar_precios AS mostrar_precios, t2.nombre AS cliente, t1.cajas AS cajas ") ->join('clientes t2', 't1.cliente_id = t2.id', 'left') ->where('t1.envio_id', $envio_id) ->where('t1.deleted_at IS NULL') ->get() ->getResultObject(); return $albaran_data; } public function getAlbaranData($albaran_id=null){ if (!$albaran_id) { return []; } $albaran_data = $this->db->table('albaranes t1') ->select(" t1.id, t1.att_albaran AS att, t1.direccion_albaran AS direccion, t1.envio_id, t1.numero_albaran AS numero_albaran, DATE_FORMAT(t1.created_at, '%d/%m/%Y') AS fecha_creacion, DATE_FORMAT(t1.fecha_albaran, '%d/%m/%Y') AS fecha_albaran, t1.mostrar_precios AS mostrar_precios, t2.nombre AS cliente, t1.cajas AS cajas ") ->join('clientes t2', 't1.cliente_id = t2.id', 'left') ->where('t1.id', $albaran_id) ->where('t1.deleted_at IS NULL') ->get() ->getResultObject(); if (count($albaran_data) == 0) { return []; } return $albaran_data[0]; } /** * Get resource data for creating PDFs. * * @param string $search * * @return \CodeIgniter\Database\BaseBuilder */ public function getResourceForPdf($albaran_id = -1) { $builder = $this->db ->table($this->table . " t1") ->select(" t1.id, t1.att_albaran AS att, t1.direccion_albaran AS direccion, t1.envio_id, t1.numero_albaran AS numero_albaran, DATE_FORMAT(t1.created_at, '%d/%m/%Y') AS fecha_creacion, DATE_FORMAT(t1.fecha_albaran, '%d/%m/%Y') AS fecha_albaran, t1.mostrar_precios AS mostrar_precios, t2.nombre AS cliente, t1.cajas AS cajas ") ; $builder->join("clientes t2", "t1.cliente_id = t2.id", "left"); $builder->where("t1.deleted_at IS NULL"); $builder->where("t1.id", $albaran_id); return $builder; } public function getDatatableQuery() { $builder = $this->db ->table($this->table . " t1") ->select( "t1.id, t1.numero_albaran as numero_albaran, t1.envio_id as envio_id, GROUP_CONCAT(DISTINCT t4.id) AS pedidos, t5.nombre as cliente, t1.att_albaran as att, t1.direccion_albaran as direccion, SUM(t2.cantidad) as unidades_total, t1.cajas as cajas" ) ->join("albaranes_lineas t2", "t1.id = t2.albaran_id", "left") ->join("pedidos_linea t3", "t2.pedido_linea_id = t3.id", "left") ->join("pedidos t4", "t3.pedido_id = t4.id", "left") ->join("clientes t5", "t1.cliente_id = t5.id", "left"); $builder->where("t1.deleted_at IS NULL"); $builder->where("t2.deleted_at IS NULL"); $builder->groupBy("t1.id"); return $builder; } }