#!/usr/bin/env bash # OMNL Fineract — Create one Office for Pelican Motors And Finance LLC (Chalmette, LA). # Uses Fineract POST /offices (name, parentId, openingDate, externalId). # See docs/04-configuration/mifos-omnl-central-bank/PELICAN_MOTORS_OFFICE_RUNBOOK.md # # Usage: run from repo root. # OPENING_DATE=2026-02-26 (default) # DRY_RUN=1 to print payload only, do not POST. # # For omnl.hybx.global set in .env: # OMNL_FINERACT_BASE_URL=https://omnl.hybx.global/fineract-provider/api/v1 # # Requires: curl, jq. set -euo pipefail REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}" DRY_RUN="${DRY_RUN:-0}" OPENING_DATE="${OPENING_DATE:-2026-02-26}" PELICAN_EXTERNAL_ID="${PELICAN_EXTERNAL_ID:-PEL-MOTORS-CHALMETTE-LA}" PELICAN_OFFICE_NAME="${PELICAN_OFFICE_NAME:-Pelican Motors And Finance LLC}" if [ -f "${REPO_ROOT}/omnl-fineract/.env" ]; then set +u source "${REPO_ROOT}/omnl-fineract/.env" 2>/dev/null || true set -u elif [ -f "${REPO_ROOT}/.env" ]; then set +u source "${REPO_ROOT}/.env" 2>/dev/null || true set -u fi BASE_URL="${OMNL_FINERACT_BASE_URL:-}" TENANT="${OMNL_FINERACT_TENANT:-omnl}" USER="${OMNL_FINERACT_USER:-app.omnl}" PASS="${OMNL_FINERACT_PASSWORD:-}" if [ -z "$BASE_URL" ] || [ -z "$PASS" ]; then echo "Set OMNL_FINERACT_BASE_URL and OMNL_FINERACT_PASSWORD (e.g. omnl-fineract/.env or .env)." >&2 echo "For omnl.hybx.global use: OMNL_FINERACT_BASE_URL=https://omnl.hybx.global/fineract-provider/api/v1" >&2 exit 1 fi CURL_OPTS=(-s -S -H "Fineract-Platform-TenantId: ${TENANT}" -H "Content-Type: application/json" -u "${USER}:${PASS}") # Resolve existing office by externalId (idempotent) offices_json=$(curl "${CURL_OPTS[@]}" "${BASE_URL}/offices" 2>/dev/null) existing_id=$(echo "$offices_json" | jq -r --arg e "$PELICAN_EXTERNAL_ID" '.[] | select(.externalId == $e) | .id' 2>/dev/null | head -1) if [ -n "$existing_id" ] && [ "$existing_id" != "null" ]; then echo "Pelican Motors office already exists: officeId=$existing_id (externalId=$PELICAN_EXTERNAL_ID)" >&2 echo "OFFICE_ID_PELICAN=$existing_id" exit 0 fi payload=$(jq -n \ --arg name "$PELICAN_OFFICE_NAME" \ --arg openingDate "$OPENING_DATE" \ --arg externalId "$PELICAN_EXTERNAL_ID" \ '{ name: $name, parentId: 1, openingDate: $openingDate, externalId: $externalId, dateFormat: "yyyy-MM-dd", locale: "en" }') if [ "$DRY_RUN" = "1" ]; then echo "DRY_RUN: would POST /offices with name=$PELICAN_OFFICE_NAME externalId=$PELICAN_EXTERNAL_ID openingDate=$OPENING_DATE" >&2 echo "Payload: $payload" >&2 exit 0 fi res=$(curl "${CURL_OPTS[@]}" -X POST -d "$payload" "${BASE_URL}/offices" 2>/dev/null) || true if echo "$res" | jq -e '.resourceId // .officeId' >/dev/null 2>&1; then PELICAN_OFFICE_ID=$(echo "$res" | jq -r '.resourceId // .officeId') echo "Created Pelican Motors office: officeId=$PELICAN_OFFICE_ID" >&2 echo "OFFICE_ID_PELICAN=$PELICAN_OFFICE_ID" else echo "Failed to create office: $res" >&2 exit 1 fi