Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
86 lines
3.2 KiB
Bash
Executable File
86 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# OMNL Fineract — Resolve GL account IDs (1410, 2100, 2410) and payment type ID; write ids.env for downstream scripts.
|
|
# Usage: from repo root, source omnl-fineract/.env then run: bash scripts/omnl/resolve_ids.sh
|
|
# Output: ids.env in current directory (export ID_1410, ID_2100, ID_2410, PAYMENT_TYPE_ID). Exits non-zero if any missing.
|
|
# See docs/04-configuration/mifos-omnl-central-bank/OPERATING_RAILS.md
|
|
|
|
set -euo pipefail
|
|
REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
|
|
OUT_FILE="${OMNL_IDS_FILE:-ids.env}"
|
|
|
|
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
|
|
|
|
: "${OMNL_FINERACT_BASE_URL:?Set OMNL_FINERACT_BASE_URL (e.g. in omnl-fineract/.env)}"
|
|
: "${OMNL_FINERACT_TENANT:=omnl}"
|
|
: "${OMNL_FINERACT_USER:=app.omnl}"
|
|
: "${OMNL_FINERACT_PASSWORD:?Set OMNL_FINERACT_PASSWORD}"
|
|
|
|
BASE="${OMNL_FINERACT_BASE_URL}"
|
|
TENANT="${OMNL_FINERACT_TENANT}"
|
|
AUTH="-u ${OMNL_FINERACT_USER}:${OMNL_FINERACT_PASSWORD}"
|
|
HDR=(-H "Fineract-Platform-TenantId: ${TENANT}" -H "Content-Type: application/json")
|
|
|
|
GL_JSON="$(curl -s "${HDR[@]}" $AUTH "$BASE/glaccounts")"
|
|
# Normalize to array (Fineract may return { pageItems: [...] } or [...])
|
|
GL_JSON="$(echo "$GL_JSON" | jq -c 'if type == "array" then . else (.pageItems // .) end' 2>/dev/null || echo "$GL_JSON")"
|
|
PT_JSON="$(curl -s "${HDR[@]}" $AUTH "$BASE/paymenttypes")"
|
|
PT_JSON="$(echo "$PT_JSON" | jq -c 'if type == "array" then . else (.pageItems // []) end' 2>/dev/null || echo "[]")"
|
|
|
|
id_for_glcode() {
|
|
local code="$1"
|
|
echo "$GL_JSON" | jq -r --arg c "$code" '.[]? | select(.glCode == $c) | .id' 2>/dev/null | head -n1
|
|
}
|
|
|
|
ID_1410="$(id_for_glcode "1410")"
|
|
ID_2100="$(id_for_glcode "2100")"
|
|
ID_2410="$(id_for_glcode "2410")"
|
|
|
|
# Prefer: onledger/cash/bank transfer; fallback first payment type
|
|
PAYMENT_TYPE_ID="$(
|
|
echo "$PT_JSON" | jq -r '
|
|
(.[]? | select((.code // "") | ascii_downcase == "onledger") | .id) // empty
|
|
' 2>/dev/null | head -n1
|
|
)"
|
|
if [ -z "$PAYMENT_TYPE_ID" ] || [ "$PAYMENT_TYPE_ID" = "null" ]; then
|
|
PAYMENT_TYPE_ID="$(
|
|
echo "$PT_JSON" | jq -r '
|
|
(.[]? | select((.name // "") | ascii_downcase | test("cash|bank|wire|transfer")) | .id) // empty
|
|
' 2>/dev/null | head -n1
|
|
)"
|
|
fi
|
|
if [ -z "$PAYMENT_TYPE_ID" ] || [ "$PAYMENT_TYPE_ID" = "null" ]; then
|
|
PAYMENT_TYPE_ID="$(echo "$PT_JSON" | jq -r '.[0].id // empty' 2>/dev/null)"
|
|
fi
|
|
|
|
for v in ID_1410 ID_2100 ID_2410; do
|
|
val="${!v}"
|
|
if [ -z "$val" ] || [ "$val" = "null" ]; then
|
|
echo "Missing required id: $v (create GL accounts first, e.g. omnl-gl-accounts-create.sh)" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
if [ -z "$PAYMENT_TYPE_ID" ] || [ "$PAYMENT_TYPE_ID" = "null" ]; then
|
|
echo "Warning: no payment type found; PAYMENT_TYPE_ID will be empty (deposits/disbursements may need it)" >&2
|
|
PAYMENT_TYPE_ID=""
|
|
fi
|
|
|
|
cat > "$OUT_FILE" <<EOF
|
|
# OMNL Fineract resolved IDs — do not commit if it contains env-specific values
|
|
# Generated by scripts/omnl/resolve_ids.sh
|
|
export ID_1410=$ID_1410
|
|
export ID_2100=$ID_2100
|
|
export ID_2410=$ID_2410
|
|
export PAYMENT_TYPE_ID=$PAYMENT_TYPE_ID
|
|
EOF
|
|
|
|
echo "Wrote $OUT_FILE:" >&2
|
|
cat "$OUT_FILE" >&2
|