- InlineField component + useInlineEdit composable for Odoo-style dblclick editing - Client search by name, account ID, and legacy_customer_id (or_filters) - SMS/Email notification panel on ContactCard via n8n webhooks - Ticket reply thread via Communication docs - All migration scripts (51 files) now tracked - Client portal and field tech app added to monorepo - README rewritten with full feature list, migration summary, architecture - CHANGELOG updated with all recent work - ROADMAP updated with current completion status - Removed hardcoded tokens from docs (use $ERP_SERVICE_TOKEN) - .gitignore updated (docker/, .claude/, exports/, .quasar/) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53 lines
2.3 KiB
Bash
Executable File
53 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# deploy.sh — Build Gigafibre Client Portal and deploy to ERPNext container
|
|
#
|
|
# Usage:
|
|
# ./deploy.sh # deploy to remote server (production)
|
|
# ./deploy.sh local # deploy to local Docker (development)
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
SERVER="root@96.125.196.67"
|
|
SSH_KEY="$HOME/.ssh/proxmox_vm"
|
|
DEST="/home/frappe/frappe-bench/sites/assets/client-app"
|
|
|
|
echo "==> Installing dependencies..."
|
|
npm ci --silent
|
|
|
|
echo "==> Building PWA (base=/assets/client-app/)..."
|
|
VITE_ERP_TOKEN="b273a666c86d2d0:06120709db5e414" DEPLOY_BASE=/assets/client-app/ npx quasar build -m pwa
|
|
|
|
if [ "$1" = "local" ]; then
|
|
CONTAINER=$(docker ps --format '{{.Names}}' | grep -E 'frontend' | grep -v ops | head -1)
|
|
[ -z "$CONTAINER" ] && echo "ERROR: ERPNext frontend container not found" && exit 1
|
|
echo "==> Deploying to local container ($CONTAINER)..."
|
|
docker exec "$CONTAINER" sh -c "rm -rf $DEST && mkdir -p $DEST"
|
|
docker cp "$SCRIPT_DIR/dist/pwa/." "$CONTAINER:$DEST/"
|
|
echo ""
|
|
echo "Done! Client Portal: http://localhost:8080/assets/client-app/"
|
|
else
|
|
echo "==> Packaging..."
|
|
tar czf /tmp/client-pwa.tar.gz -C dist/pwa .
|
|
|
|
echo "==> Deploying to $SERVER..."
|
|
cat /tmp/client-pwa.tar.gz | ssh -i "$SSH_KEY" "$SERVER" \
|
|
"cat > /tmp/client.tar.gz && \
|
|
CONTAINER=\$(docker ps --format '{{.Names}}' | grep erpnext-frontend | head -1) && \
|
|
echo \" Using container: \$CONTAINER\" && \
|
|
docker exec -u root \$CONTAINER sh -c 'rm -rf $DEST && mkdir -p $DEST' && \
|
|
TMPDIR=\$(mktemp -d) && \
|
|
cd \$TMPDIR && tar xzf /tmp/client.tar.gz && \
|
|
docker cp \$TMPDIR/. \$CONTAINER:$DEST/ && \
|
|
docker exec -u root \$CONTAINER chown -R frappe:frappe $DEST && \
|
|
rm -rf \$TMPDIR /tmp/client.tar.gz"
|
|
|
|
rm -f /tmp/client-pwa.tar.gz
|
|
|
|
echo ""
|
|
echo "Done! Client Portal: https://client.gigafibre.ca/"
|
|
fi
|