builder(); $builder->select('pedidos.id as pedido_id, pedidos_linea.id as linea_id, presupuestos.id as presupuesto_id'); $builder->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id', 'left'); $builder->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id', 'left'); $builder->groupStart() ->where('pedidos.id', $search) ->whereIn('pedidos.estado', ['finalizado']) ->orWhere("REPLACE(presupuestos.isbn, '-', '')", $searchClean) ->groupEnd(); $result = $builder->get()->getResult(); if (empty($result)) { $response = [ 'status' => false, 'message' => lang('Logistica.errors.notFound'), ]; return $response; } $PresupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $numDirecciones = $PresupuestoDireccionesModel->where('presupuesto_id', $result[0]->presupuesto_id) ->countAllResults(); if ($numDirecciones == 0) { $response = [ 'status' => false, 'message' => lang('Logistica.errors.noAddresses'), ]; return $response; } // detectar si el pedido tiene los albaranes generados $AlbaranModel = model('App\Models\Pedidos\AlbaranModel'); $numAlbaranes = $AlbaranModel->where('pedido_id', $result[0]->pedido_id) ->countAllResults(); $response = [ 'status' => true, 'data' => $result[0], ]; if($numAlbaranes == 0){ $user = auth()->user()->id; $AlbaranModel->generarAlbaranes($result[0]->pedido_id, [$result[0]->presupuesto_id], $user); $response['data']->createAlbaran = true; } $response_envio = LogisticaService::generateEnvio($result[0]->pedido_id); if($response_envio['status'] == false){ $response = [ 'status' => false, 'message' => $response_envio['message'], ]; return $response; } else{ $response['data']->id_envio = $response_envio['data']['id_envio']; $response['data']->multienvio = $response_envio['data']['multienvio']; } return $response; } private static function generateEnvio($pedido_id){ // Se obtiene los datos de att, direccion, ciudad, cp, telefono, pais_id $AlbaranModel = model('App\Models\Pedidos\AlbaranModel'); $lineasAlbaran = $AlbaranModel->where('pedido_id', $pedido_id) ->join('albaranes_lineas', 'albaranes_lineas.albaran_id = albaranes.id') ->join('pedidos', 'pedidos.id = albaranes.pedido_id') ->where('pedidos.estado', 'finalizado') ->countAllResults(); $multienvio = false; if($lineasAlbaran == 0){ return [ 'status' => false, 'message' => lang('Logistica.errors.noAlbaranes'), ]; } if($lineasAlbaran > 1){ $multienvio = true; } if(!$multienvio){ // solo hay una dirección, se obtiene de los albaranes $datosEnvio = $AlbaranModel ->select('albaranes.att_albaran as att, albaranes.direccion_albaran as direccion, presupuesto_direcciones.provincia as ciudad, presupuesto_direcciones.cp as cp, presupuesto_direcciones.telefono as telefono, presupuesto_direcciones.email as email, presupuesto_direcciones.pais_id as pais_id, albaranes_lineas.cantidad as cantidad, albaranes_lineas.cajas as cajas') ->where('albaranes.pedido_id', $pedido_id) ->where('albaranes_lineas.cajas !=', null) ->join('albaranes_lineas', 'albaranes_lineas.albaran_id = albaranes.id') ->join('presupuesto_direcciones', 'presupuesto_direcciones.presupuesto_id = albaranes.presupuesto_id') ->first(); // se genera un nuevo envio con estos datos $EnvioModel = model('App\Models\Logistica\EnvioModel'); $EnvioModel->set('att', $datosEnvio->att); $EnvioModel->set('direccion', $datosEnvio->direccion); $EnvioModel->set('ciudad', $datosEnvio->ciudad); $EnvioModel->set('cp', $datosEnvio->cp); $EnvioModel->set('telefono', $datosEnvio->telefono); $EnvioModel->set('email', $datosEnvio->email); $EnvioModel->set('pais_id', $datosEnvio->pais_id); $EnvioModel->set('cantidad', $datosEnvio->cantidad); $EnvioModel->set('cajas', $datosEnvio->cajas); $EnvioModel->set('created_at', date('Y-m-d H:i:s')); $EnvioModel->set('updated_at', date('Y-m-d H:i:s')); $EnvioModel->insert(); $idEnvio = $EnvioModel->insertID(); // se genera la linea de envio $EnvioLineasModel = model('App\Models\Logistica\EnvioLineaModel'); $EnvioLineasModel->set('envio_id', $idEnvio); $EnvioLineasModel->set('pedido_id', $pedido_id); $EnvioLineasModel->set('unidades_envio', $datosEnvio->cantidad); $EnvioLineasModel->set('unidades_total', $datosEnvio->cantidad); $EnvioLineasModel->set('cajas', $datosEnvio->cajas); $EnvioLineasModel->set('unidades_cajas', $datosEnvio->cajas); $EnvioLineasModel->set('created_at', date('Y-m-d H:i:s')); $EnvioLineasModel->set('updated_at', date('Y-m-d H:i:s')); $EnvioLineasModel->set('created_by', auth()->user()->id); $EnvioLineasModel->set('updated_by', auth()->user()->id); $EnvioLineasModel->insert(); return [ 'status' => true, 'data' => [ 'id_envio' => $idEnvio, 'multienvio' => false, ], ]; } if(empty($datosEnvio)){ return [ 'status' => false, 'message' => lang('Logistica.errors.noAddresses'), ]; } } }