{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import av dokumenter til ArcGIS Online\n",
    "\n",
    "Notebooken laster opp PDF-dokumenter fra en katalog på din maskin til ArcGIS Online, slik at de vises som dokumentlinker i Origo.\n",
    "\n",
    "Kjør cellene én etter én, og les resultatet før du går videre. Krever ArcGIS Pro 3.3 eller nyere."
   ],
   "id": "celle-0"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Celle 1: Innstillinger\n",
    "\n",
    "Endre katalogen og dokumenttypen til det du skal laste opp."
   ],
   "id": "celle-1"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lokal_katalog = r'C:\\temp\\origo\\målebrev'   # Katalog med PDF-filer på din maskin\n",
    "dokumenttype = 'målebrev'                    # 'målebrev', 'skylddelinger' eller 'festekontrakter'"
   ],
   "id": "celle-2"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Celle 2: Logg inn og finn mappa i ArcGIS Online\n",
    "\n",
    "Logger inn som ArcGIS Pro-brukeren og sjekker om mappa for dokumenttypen finnes."
   ],
   "id": "celle-3"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import re\n",
    "from arcgis.gis import GIS\n",
    "\n",
    "gis = GIS('Pro')\n",
    "print(\"Logget inn som: \" + gis.properties.user.username)\n",
    "\n",
    "agol_mappe = 'Filer - ' + dokumenttype.capitalize()\n",
    "folder = gis.content.folders.get(agol_mappe)\n",
    "\n",
    "# Henter titlene på dokumentene som allerede ligger i mappa\n",
    "eksisterende = set()\n",
    "if folder:\n",
    "    søk = gis.content.advanced_search(\n",
    "        query=\"owner:\" + gis.users.me.username + \" AND ownerfolder:\" + folder.properties['id'],\n",
    "        max_items=-1, as_dict=True)\n",
    "    eksisterende = {resultat['title'] for resultat in søk['results']}\n",
    "\n",
    "if folder:\n",
    "    print(\"Mappe i AGOL: \" + agol_mappe + \" (\" + str(len(eksisterende)) + \" dokumenter fra før)\")\n",
    "else:\n",
    "    print(\"Mappe i AGOL: \" + agol_mappe + \" (blir opprettet ved opplasting)\")"
   ],
   "id": "celle-4"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Celle 3: Sjekk filene\n",
    "\n",
    "Viser hvilke filer som blir lastet opp, og hvilke som hoppes over. Ingenting lastes opp i dette steget. Rett eventuelle ugyldige filnavn, og kjør cellen på nytt."
   ],
   "id": "celle-5"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Kommunenr-gardsnr-bruksnr, eventuelt fulgt av festenr, seksjonsnr og dokumentløpenummer\n",
    "gyldig_filnavn = re.compile(r'^\\d{4}-\\d{3,}-\\d{3,}(-\\d*){0,3}$')\n",
    "\n",
    "skal_lastes_opp, hoppet_over = [], []\n",
    "\n",
    "for filename in sorted(os.listdir(lokal_katalog)):\n",
    "    name, file_extension = os.path.splitext(filename)\n",
    "    if file_extension.lower() != '.pdf':\n",
    "        continue\n",
    "    if not gyldig_filnavn.match(name):\n",
    "        hoppet_over.append(filename + \" (ugyldig filnavn)\")\n",
    "    elif name in eksisterende:\n",
    "        hoppet_over.append(filename + \" (finnes allerede i AGOL)\")\n",
    "    else:\n",
    "        skal_lastes_opp.append(filename)\n",
    "\n",
    "print(\"Klare for opplasting: \" + str(len(skal_lastes_opp)))\n",
    "print(\"Hoppes over: \" + str(len(hoppet_over)))\n",
    "for f in hoppet_over:\n",
    "    print(\"  \" + f)"
   ],
   "id": "celle-6"
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": "## Celle 4: Last opp\n\nLaster opp filene fra celle 3 og deler dem med organisasjonen. Hvis én fil feiler, fortsetter opplastingen med neste. Du kan trygt kjøre celle 3 og 4 på nytt, fordi filer som allerede er lastet opp, hoppes over.",
   "id": "celle-7"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": "if folder is None:\n    folder = gis.content.folders.create(agol_mappe)\n\noverført, feilet = [], []\n\nfor filename in skal_lastes_opp:\n    name = os.path.splitext(filename)[0]\n    try:\n        file_properties = {'title': name,\n                           'type': 'PDF',\n                           'tags': 'pdf, ' + dokumenttype}\n        file_item = folder.add(item_properties=file_properties,\n                               file=os.path.join(lokal_katalog, filename)).result()\n        file_item.sharing.sharing_level = 'ORG'\n        overført.append(filename)\n        eksisterende.add(name)\n        print(name + \" er overført\")\n    except Exception as feil:\n        feilet.append(filename + \" (\" + str(feil) + \")\")\n\nprint()\nprint(\"Overført: \" + str(len(overført)))\nprint(\"Feilet: \" + str(len(feilet)))\nfor f in feilet:\n    print(\"  \" + f)",
   "id": "celle-8"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ArcGISPro",
   "language": "Python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}