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
122 lines
3.9 KiB
Bash
122 lines
3.9 KiB
Bash
#!/usr/bin/env bash
|
||
# OMNL Fineract — Set client firstname/lastname to canonical operating-entity names.
|
||
# Usage: run from repo root; sources omnl-fineract/.env or .env.
|
||
# DRY_RUN=1 print payloads only, do not PUT.
|
||
# Requires: curl, jq.
|
||
|
||
set -euo pipefail
|
||
REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
|
||
DRY_RUN="${DRY_RUN:-0}"
|
||
|
||
# Canonical names: Client 1 = Head Office, Client 2–15 = operating entities (by account no 000000001–000000015)
|
||
declare -A CLIENT_NAMES=(
|
||
[1]="OMNL Head Office (DBIS) – Central Bank"
|
||
[2]="Shamrayan Enterprises"
|
||
[3]="HYBX"
|
||
[4]="TAJ Private Single Family Office"
|
||
[5]="Aseret Mortgage Bank"
|
||
[6]="Mann Li Family Offices"
|
||
[7]="Sovereign Order of Malta OSJ"
|
||
[8]="Alltra Mainnet"
|
||
[9]="FIDIS"
|
||
[10]="Alpha Omega Holdings"
|
||
[11]="SGI Capital"
|
||
[12]="Titan Financial"
|
||
[13]="Roy Walker PLLC"
|
||
[14]="SGI Partners LLC"
|
||
[15]="Tsunami Holdings AG"
|
||
)
|
||
|
||
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. in omnl-fineract/.env)" >&2
|
||
exit 1
|
||
fi
|
||
|
||
CURL_OPTS=(-s -S -H "Fineract-Platform-TenantId: ${TENANT}" -H "Content-Type: application/json" -u "${USER}:${PASS}")
|
||
|
||
clients_json=$(curl "${CURL_OPTS[@]}" "${BASE_URL}/clients")
|
||
if ! echo "$clients_json" | jq -e '.pageItems // .' >/dev/null 2>&1; then
|
||
echo "Unexpected clients response (no pageItems or array)." >&2
|
||
echo "$clients_json" | head -c 500
|
||
exit 1
|
||
fi
|
||
|
||
# Normalize: Fineract may return { pageItems: [...] } or direct array
|
||
if echo "$clients_json" | jq -e '.pageItems' >/dev/null 2>&1; then
|
||
items=$(echo "$clients_json" | jq -c '.pageItems[]')
|
||
else
|
||
items=$(echo "$clients_json" | jq -c '.[]')
|
||
fi
|
||
|
||
updated=0
|
||
skipped=0
|
||
while IFS= read -r row; do
|
||
[ -z "$row" ] && continue
|
||
id=$(echo "$row" | jq -r '.id')
|
||
account_no=$(echo "$row" | jq -r '.accountNo // ""')
|
||
ext_id=$(echo "$row" | jq -r '.externalId // ""')
|
||
first=$(echo "$row" | jq -r '.firstname // ""')
|
||
last=$(echo "$row" | jq -r '.lastname // ""')
|
||
display=$(echo "$row" | jq -r '.displayName // ""')
|
||
|
||
# Resolve client number from accountNo (000000001 -> 1, etc.)
|
||
client_num=""
|
||
if [ -n "$account_no" ]; then
|
||
client_num=$(echo "$account_no" | sed 's/^0*//')
|
||
[ -z "$client_num" ] && client_num="0"
|
||
fi
|
||
display_name="${CLIENT_NAMES[$client_num]:-}"
|
||
|
||
# Skip if no canonical name for this client number
|
||
if [ -z "$display_name" ]; then
|
||
echo "Skip clientId=$id accountNo=$account_no (no canonical name for Client $client_num)" >&2
|
||
((skipped++)) || true
|
||
continue
|
||
fi
|
||
|
||
# Idempotent: skip if already set to this exact name
|
||
if [ -n "$display" ] && [ "$display" = "$display_name" ]; then
|
||
echo "Skip clientId=$id (already set: $display)" >&2
|
||
((skipped++)) || true
|
||
continue
|
||
fi
|
||
|
||
# Set full name in firstname; lastname must be non-blank (tenant validation)
|
||
firstname="$display_name"
|
||
lastname="."
|
||
|
||
payload=$(jq -n --arg f "$firstname" --arg l "$lastname" '{ firstname: $f, lastname: $l }')
|
||
echo "Client id=$id accountNo=$account_no (Client $client_num) -> $display_name" >&2
|
||
|
||
if [ "$DRY_RUN" = "1" ]; then
|
||
echo " [DRY RUN] PUT ${BASE_URL}/clients/${id} $payload" >&2
|
||
((updated++)) || true
|
||
continue
|
||
fi
|
||
|
||
res=$(curl "${CURL_OPTS[@]}" -X PUT -d "$payload" "${BASE_URL}/clients/${id}" 2>/dev/null) || true
|
||
if echo "$res" | jq -e '.resourceId // .clientId' >/dev/null 2>&1; then
|
||
echo " Updated clientId=$id" >&2
|
||
((updated++)) || true
|
||
else
|
||
echo " Failed clientId=$id: $res" >&2
|
||
fi
|
||
done <<< "$items"
|
||
|
||
echo "Done: $updated updated, $skipped skipped (already had name)." >&2
|