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]; }
/** * Crea una orden de compra con el ID y líneas, o adjunta líneas a una OC * @param String $oc * @param String $lineas * @return void */ public function crearOrdenCompraAjax() { $input = Request::createFromGlobals(); $oc = $input->oc; $lineas = $input->lineas; // Validar que no se combinen líneas de requisición de un proveedor ya asignado con otro proveedor // o con líneas de requisición que no tengan proveedor $proveedoresArray = []; $lineasArray = explode(',', $lineas); foreach ($lineasArray as $idLinea) { $linea_requisicion = RequisicionLinea::with('requisicion')->find($idLinea); if ($linea_requisicion->requisicion->proveedor) { $proveedoresArray[] = $linea_requisicion->requisicion->id_proveedor; } else { $proveedoresArray[] = 0; } } $proveedoresArray = array_unique($proveedoresArray); if (count($proveedoresArray) > 1) { return array('status' => false, 'message' => 'Algunas de las líneas ya tienen proveedor asignado. No se pueden combinar con líneas no asignadas'); } $requisicion = Requisicion::find($input->id); if ($oc == 'nueva_oc') { $orden_compra = OrdenCompra::create(array('ext_id' => '', 'id_clase' => $requisicion->id_clase, 'moneda' => 'dolar', 'fecha_inicio' => date('Y-m-d H:i:s'), 'fecha_fin' => '', 'estado' => 'I')); if ($proveedoresArray[0] != 0) { $orden_compra->id_proveedor = $proveedoresArray[0]; $orden_compra->save(); } $id = $orden_compra->id; } else { $id = $oc; } foreach ($lineasArray as $idLinea) { $linea_requisicion = RequisicionLinea::with('requisicion')->find($idLinea); OrdenCompraLinea::create(array('id_ordencompra' => $id, 'id_linea_requisicion' => $idLinea, 'id_producto' => $linea_requisicion->id_producto, 'cantidad' => $linea_requisicion->cantidad, 'valor' => 0, 'observacion' => $linea_requisicion->requisicion->observacion_creador, 'estado' => 'I')); } return $this->getFormDataAjax(); }