public function getDatosProveedor() { $input = Request::createFromGlobals(); $productos = []; $lista_productos = ProductoPrecio::select('id_producto')->with('producto')->whereIdProveedor($input->id)->groupBy('id_producto')->get(); foreach ($lista_productos as $producto) { $productos[] = ['id_producto' => $producto->id_producto, 'codigo_producto' => $producto->producto->codigo, 'nombre_producto' => $producto->producto->nombre, 'id_proveedor' => $input->id, 'nombre_proveedor' => $input->nombre, 'ultimo_precio' => Producto::getUltimoPrecio($producto->id_producto, $input->id), 'precio_promedio' => Producto::getPrecioPromedio($producto->id_producto, $input->id)]; } $ordenes_compra = OrdenCompra::whereIdProveedor($input->id)->with('lineas', 'proveedor')->get(); return ['productos' => $productos, 'ordenes_compra' => $ordenes_compra]; }
public function getDatosProducto() { $input = Request::createFromGlobals(); $proveedores = []; $lista_proveedores = ProductoPrecio::select('id_proveedor')->with('proveedor')->whereIdProducto($input->id)->groupBy('id_proveedor')->get(); foreach ($lista_proveedores as $proveedor) { $proveedores[] = ['id_proveedor' => $proveedor->id_proveedor, 'codigo_proveedor' => $proveedor->proveedor->codigo, 'nombre_proveedor' => $proveedor->proveedor->nombre, 'id_producto' => $input->id, 'nombre_producto' => $input->nombre, 'ultimo_precio' => Producto::getUltimoPrecio($input->id, $proveedor->id_proveedor), 'precio_promedio' => Producto::getPrecioPromedio($input->id, $proveedor->id_proveedor)]; } $requisiciones = RequisicionLinea::with('requisicion')->whereIdProducto($input->id)->get(); $ordenes_compra = OrdenCompra::whereHas('lineas', function ($query) use($input) { $query->whereIdProducto($input->id); })->with(['lineas' => function ($query) use($input) { $query->whereIdProducto($input->id); }])->with('proveedor')->get(); return ['proveedores' => $proveedores, 'requisiciones' => $requisiciones, 'ordenes_compra' => $ordenes_compra]; }
public function getEjecutadoAttribute() { $cc = $this->cc; $ordenes_compra = OrdenCompra::with(['lineas' => function ($query) use($cc) { return $query->with(['linea_requisicion' => function ($query) use($cc) { return $query->whereHas('requisicion', function ($query) use($cc) { return $query->where('id_cc', $cc); }); }]); }])->generada()->get(); $total = 0; foreach ($ordenes_compra as $orden_compra) { foreach ($orden_compra->lineas as $linea) { $total += $linea->valor_total; } } return $total; }
/** * Consolida las requisiciones correspondientes y mueve las solicitudes en EF * @return Array */ public function consolidarRequisiciones() { $returnArray = array('status' => true, 'message' => ''); $input = Request::createFromGlobals(); $requestCore = new \RequestCore(); $flow = $_SESSION['user_flow']; $step = FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_CONSOLIDATION'); $requisiciones = Requisicion::getRequisicionesParaConsolidar(); $ordenescompra = OrdenCompra::getOrdenesCompraParaConsolidar(); // Tomar la tarea actual, si no está completada salir foreach ($requisiciones as $requisicion) { if ($requisicion->asignada_totalmente == 0) { $returnArray['status'] = false; $returnArray['message'] = 'La requisición ' . $requisicion->id . ' no se encuentra asignada por completo. No se puede continuar'; return $returnArray; } } // Cambiar estado de las ordenes de compra cuyas requisiciones estén totalmente asignadas foreach ($ordenescompra as $ordencompra) { $ordencompra->estado = 'C'; $ordencompra->save(); } foreach ($requisiciones as $requisicion) { // Solo completar tareas de requisiciones asignadas totalmente if ($requisicion->asignada_totalmente == 1) { // Cambiar estado a 'C' (Consolidada) $requisicion->estado = 'C'; $requisicion->save(); $task = $requisicion->ef_request->open_tasks[0]; // Completar tareas diferentes a la actual // (No se completa la actual porque EF lo hace por default) if ($task->task_id != $input->task_id) { $requestCore->completeTask($task->task_request, $task->task_id, $input->flow_id, $input->step_id, $input->user_id, 'Requisición consolidada por el usuario ' . $_SESSION['user_id'], 'next'); } } } return $returnArray; }
public function enviarCotizacion($contacto, $orden_compra) { $orden_compra = OrdenCompra::with('lineas')->find($orden_compra); $contacto = Contacto::with('proveedor')->find($contacto); $cotizacion = Cotizacion::create(['id_ordencompra' => $orden_compra->id, 'id_contacto' => $contacto->id, 'fecha_envio' => date('Y-m-d H:i:s'), 'moneda' => 'USD', 'estado' => 'E']); // Update token $token = bin2hex($cotizacion->id . '.' . $contacto->id . '.' . $orden_compra->id . '.' . date('Y-m-d')); $cotizacion->update(['token' => $token]); foreach ($orden_compra->lineas as $linea) { CotizacionLinea::create(['id_cotizacion' => $cotizacion->id, 'id_ordencompra_linea' => $linea->id, 'cantidad' => $linea->cantidad, 'valor' => 0]); } $cotizacion = Cotizacion::with('contacto.proveedor')->find($cotizacion->id); $this->enviarMailCotizacion($cotizacion); }
public function getOrdenesCompraAjax() { $input = Request::createFromGlobals(); $ordenes_compra = OrdenCompra::getOrdenesCompraParaRecepcion($input['ef_id']); return $ordenes_compra; }
public function actualizarObservacion() { $input = Request::createFromGlobals(); OrdenCompra::find($input->id)->update(['observacion_aprobador_cotizacion' => $input->observacion_aprobador_cotizacion]); }
public function recibirOrdenCompra() { $input = Request::createFromGlobals(); $handlerWebServiceCore = new WebServiceCore(); $handlerRequestCore = new RequestCore(); $requisicionesRecibidas = []; $recepcionesEfectivas = []; foreach ($input->lineas as $linea) { if ($linea['esta_recepcion'] > 0) { $linea_ordencompra = OrdenCompraLinea::with(['linea_requisicion.requisicion', 'producto'])->find($linea['id']); // Consumir Web Service de recepción haciendas if ($linea_ordencompra->linea_requisicion->requisicion->id_clase == 1) { $wsdl = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_WSDL"); $operation = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_OPERATION"); $namespace = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_NAMESPACE"); $soapAction = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_RECIBEOCHACIENDAS_SOAPACTION"); $params = ['Longvarchar' => json_encode(['HcHacId' => $linea_ordencompra->linea_requisicion->bodega_haciendas, 'Pro' => [['ProId' => $linea_ordencompra->producto->codigo, 'ProCan' => $linea['esta_recepcion']]]])]; $result = $handlerWebServiceCore->callWebService($wsdl, $operation, $namespace, $soapAction, $params, true); if (!$result) { return 'Error al consumir servicio de Kardex. Imposible continuar'; } if ($result['Gx_msg'] != '') { return $result['Gx_msg']; } } $recepcion_efectiva = RecepcionEfectiva::create(['id_ordencompra' => $linea['id_ordencompra'], 'id_ordencompra_linea' => $linea['id'], 'fecha' => date('Y-m-d'), 'cantidad' => $linea['esta_recepcion']]); if ($input->tipo_factura == 'fisica') { $recepcion_efectiva->update(['num_documento' => $input->num_factura]); } else { $recepcion_efectiva->update(['id_documento' => $input->factura]); } $recepcionesEfectivas[] = $recepcion_efectiva; $requisicionesRecibidas[$linea_ordencompra->linea_requisicion->requisicion->id][] = ['producto' => $linea_ordencompra->producto->codigo . ' - ' . $linea_ordencompra->producto->nombre, 'observacion' => $linea_ordencompra->linea_requisicion->observacion_creador, 'cantidad' => $linea['esta_recepcion']]; } } // Validar si la orden se ha recibido completamente y actualizar estado $ordencompra = OrdenCompra::with(['lineas', 'recepciones_efectivas'])->find($input->id_ordencompra); $estado = 'T'; foreach ($ordencompra->lineas as $linea) { if ($linea->cantidad_recibida < $linea->cantidad) { $estado = 'P'; break; } } $ordencompra->update(['estado' => $estado]); // Consumir web service de recepción bpcs $ordencompra->fresh(); $wsdl = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_WSDL"); $operation = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_OPERATION"); $namespace = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_NAMESPACE"); $soapAction = FlowSettings::get(FLOW_ADQUISICIONES, "ADQ_WS_ESTADOSOC_SOAPACTION"); $params = ['Hph_phord' => $ordencompra->ext_id, 'Tipo' => 'UPOR', 'Estado' => $ordencompra->recibido_totalmente ? 3 : 2, 'Cantidad' => $ordencompra->cantidad_recibida]; $result = $handlerWebServiceCore->callWebService($wsdl, $operation, $namespace, $soapAction, $params, true); if (!$result) { return 'Error al consumir servicio de actualización de estado BPCS. Imposible continuar'; } if ($result['Mensaje'] != '') { return $result['Mensaje']; } foreach ($requisicionesRecibidas as $id_requisicion => $lineas_requisicion) { // Notificar a los usuarios $requisicion = Requisicion::find($id_requisicion); $usuario = User::find($requisicion->id_solicitante); $jefe = $usuario->boss; $users_email = []; $users_email[] = ['email' => $usuario->user_email]; if ($jefe) { $users_email[] = ['email' => $jefe->user_email]; } $users_email[] = ['email' => '*****@*****.**']; foreach ($users_email as $user) { MailController::sendGeneralMail([$user], 'Líneas de requisición ' . $requisicion->id . ' recibidas', view('Adquisiciones.Emails.lineas_requisicion_recibidas', compact('requisicion', 'usuario', 'lineas_requisicion'))); } } // Generar PDF y adjuntar a requisiciones asociadas. Guardar el path del archivo en el campo description // de las recepciones para asociarlo $pdf = $this->generarPDFRecepcion($ordencompra); // Adjuntar a requisiciones foreach ($requisicionesRecibidas as $id_requisicion => $lineas) { $requisicion = Requisicion::find($id_requisicion); (new \AttachmentCore())->addAttachmentToRequest($requisicion['ef_id'], \FlowSettingsCore::get(FLOW_ADQUISICIONES, 'ADQ_FILE_CONTABILIDAD'), $pdf, APP_ENVPATH, $_SESSION['user_id'], "Documento de contabilidad"); } // Si la orden de compra fue recibida completamente cerrar la solicitud / las solicitudes para la requisición $ef_requests = []; if ($ordencompra->estado == 'T') { $ordencompra = OrdenCompra::with('lineas.linea_requisicion.requisicion.ef_request')->find($ordencompra->id); foreach ($ordencompra->lineas as $linea_ordencompra) { $ef_requests[] = $linea_ordencompra->linea_requisicion->requisicion->ef_request->request_id; } $ef_requests = array_unique($ef_requests); foreach ($ef_requests as $request_id) { $requisicion_recibida = true; // Verificar si todas las líneas de la requisición asociada están recibidas $requisicion = Requisicion::where('ef_id', $request_id)->with('lineas.lineas_ordencompra')->first(); foreach ($requisicion->lineas as $linea_requisicion) { foreach ($linea_requisicion->lineas_ordencompra as $linea_ordencompra) { if ($linea_ordencompra->cantidad_recibida < $linea_ordencompra->cantidad) { $requisicion_recibida = false; } } } // Cerrar si la requisición está recibida if ($requisicion_recibida) { $result = $handlerRequestCore->closeRequest($request_id, $_SESSION['user_id']); } } } }
public function generarOrdenCompraPDF($request_id) { $ordenes_compra = OrdenCompra::whereHas('lineas.linea_requisicion.requisicion', function ($query) use($request_id) { return $query->where('ef_id', $request_id); })->with(['proveedor', 'lineas.linea_requisicion.requisicion', 'lineas.producto'])->get(); foreach ($ordenes_compra as $orden_compra) { $filename = APP_TMPPATH . 'requisicion.pdf'; PDFController::generatePDF(view('Adquisiciones.PDF.orden_compra', ['orden_compra' => $orden_compra]), false, $filename); (new \AttachmentCore())->addAttachmentToRequest($request_id, \FlowSettingsCore::get(FLOW_ADQUISICIONES, 'ADQ_FILE_ORDENCOMPRA'), $filename, APP_ENVPATH, $_SESSION['user_id'], "Orden de Compra " . $orden_compra->id); } }
public function AprobarOrdenCompra() { $input = Request::createFromGlobals(); $returnArray = array("status" => true, "message" => ""); $requestCore = new \RequestCore(); $arrayRequisiciones = []; // Traer ordenes de compra $ordenes_compra = OrdenCompra::getOrdenesCompraParaAprobacionOrdenCompra($input->request_id); foreach ($ordenes_compra as $orden_compra) { // Depende del siguiente paso: // - Si es selección de proveedor cambiar el estado de OC a 'C' - Consolidada // - Si es generación de OC cambiar el estado a 'O' - orden de compra aprobada. Copiar cantidades de Cotización if ($input->step_id == FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_SELECCIONPROV')) { $orden_compra->update(['estado' => 'C']); } else { // Actualizar cabecera de OC $orden_compra->update(['id_aprobador_ordencompra' => $_SESSION['user_id'], 'estado' => 'O']); // Actualizar líneas de OC foreach ($orden_compra->lineas as $linea) { $linea->update(['estado' => 'O']); // Llenar arreglo con número de requisiciones correspondientes $arrayRequisiciones[] = $linea->linea_requisicion->requisicion->id; } } } // Mover ef_requests correspondientes $arrayRequisiciones = array_unique($arrayRequisiciones); foreach ($arrayRequisiciones as $id_requisicion) { $requisicion = Requisicion::find($id_requisicion); $task = $requisicion->ef_request->open_tasks[0]; // Completar tareas diferentes a la actual // (No se completa la actual porque EF lo hace por default) if ($task->task_id != $input->task_id) { // TODO: Este valor cambia de acuerdo al siguiente paso if ($input->step_id == FlowSettings::get($_SESSION['user_flow'], 'ADQ_STEP_SELECCIONPROV')) { $description = 'Orden de Compra no aprobada'; } else { $description = 'Orden de Compra aprobada por el usuario ' . $_SESSION['user_id']; } $requestCore->completeTask($task->task_request, $task->task_id, $input->flow_id, $input->step_id, $input->user_id, $description, 'next'); } } return $returnArray; }
/** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { $record = OrdenCompra::find($id)->delete(); return new AjaxResponse('success', ''); }