Skip to content

Rc/v5.15.0 - #761

Merged
evilguy4000 merged 21 commits into
mainfrom
rc/v5.15.0
Sep 16, 2026
Merged

evilguy4000 merged 21 commits into
mainfrom
rc/v5.15.0

Conversation

@evilguy4000

Copy link
Copy Markdown
Collaborator

Description

Brief description of the change and why it's needed.

Type of change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would change existing behavior)
  • Documentation update
  • Refactor (no functional change)

Checklist

  • My code follows the project's style guidelines (Black, flake8).
  • I have added/updated tests for my changes.
  • All tests pass locally (e.g. pytest).
  • I have updated the documentation if needed.
  • For user-facing changes, I have added an entry to the Unreleased section of CHANGELOG.md.

Related issues

Fixes # (issue number, if applicable)


See CONTRIBUTING.md and CHANGELOG.md for guidelines.

Introduce schema for Pomodoro prefs, payroll templates, sync errors,
ActivityWatch rules, recurring costs, share links, and geofences.
Delegate focus routes to PomodoroService, add active/cycle/interrupt
endpoints, timer panel, user length defaults, and export field fixes.
Expose approve/reject APIs and ship expense detail, richer create flows,
and a dedicated reports screen across Flutter and Electron clients.
Support richer payroll rows, CSV/XLSX exports via templates, admin CRUD,
and a workforce dashboard template picker with a Generic Payroll preset.
Add time-entry push, invoice/payment update paths, and a sync-error
dead-letter UI so failed accounting syncs can be reviewed and retried.
Reduce noisy autotracker imports with priority rules, min-duration and
merge gaps, plus an optional review inbox before creating time entries.
Add leaderboard/admin UI, seed default badges, hook awards into timer
and task completion, and register the module for daily score recalculation.
Wire HTML5 drag/drop and resize handles to the existing move/resize APIs
so agenda events can be repositioned without opening the edit form.
Replace the missing costs list template and generate due ProjectCost rows
on a schedule, with web CRUD and manual generate-now support.
Allow saved reports to be shared via expiring optional-password links
with a stripped public viewer and revoke controls in the builder UI.
Enforce log/warn/block geofences on workday start/end, expose admin CRUD
and mobile GPS capture so field attendance can be location-aware.
Expose rule CRUD, review inbox actions, bucket discovery, and dead-letter
retry endpoints used by the new integration templates.
Provide admin CRUD for payroll export templates and attendance geofences
so operators can configure the new workforce and field policies.
Mirror Pomodoro focus controls, recurring project cost CRUD, and saved
report share/revoke under the versioned API for clients and automation.
Wire gamification/geofence blueprints, schedule leaderboard and recurring
cost jobs, and show focus plus badge stats on the main dashboard.
Add expense lifecycle helpers, report summary access, and lat/lng on
workday start/end so Flutter can use the new backend capabilities.
Remove the duplicate item_stock_item_id[] field that misaligned multi-item stock links, and make the shared PO form post to edit with existing values and line items prefilled.
…ng (#760)

Users who forget to start a timer can backdate it on create or edit the start time on an active timer instead of only adding a manual entry later.
Integer defaults on BOOLEAN columns (0/1) caused DatatypeMismatch errors and blocked app startup on Postgres.
Prevents BuildError when rendering the dashboard after the timer view was renamed.
…payroll templates, geofencing, gamification, calendar DnD, shareable reports, recurring costs
Comment thread app/static/calendar.js
if (!base) return;
// Template strips /0 from .../events/0/move → .../events/move; restore id before action
const action = kind === 'move' ? 'move' : 'resize';
let finalUrl = base;
Comment thread app/static/calendar.js
const blocks = weekCol.querySelector('.week-day-blocks') || weekCol;
const rect = blocks.getBoundingClientRect();
const y = Math.max(0, Math.min(rect.height, e.clientY - rect.top));
const minutes = Math.round((y / 60) * 60 / 15) * 15; // 15-min snap within hour px
@github-actions

Copy link
Copy Markdown

Database Migration Validation

Migration validation passed!

Completed checks:

  • ✅ Migration consistency validation (with schema drift warnings)
  • ✅ Rollback safety test
  • ✅ Data integrity verification

The database migrations are safe to apply. 🚀

📝 Note: Schema drift warnings indicate existing model/migration mismatches that existed before this PR. These should be addressed in a separate schema alignment PR.


This comment was automatically generated by the Migration Validation workflow.

from app.utils.integration_sync_hooks import trigger_expense_sync

trigger_expense_sync(expense)
except Exception:
if board:
try:
svc.calculate_leaderboard(board.id)
except Exception:
svc = GamificationService()
try:
svc.calculate_leaderboard(board.id)
except Exception:
Comment thread app/routes/main.py
gsvc = GamificationService()
gamification_points = gsvc.get_user_points(current_user.id)
gamification_badge_count = len(gsvc.get_user_badges(current_user.id))
except Exception:
Comment thread app/routes/workforce.py

try:
PayrollExportTemplate.ensure_builtin_defaults()
except Exception:
Comment thread app/routes/workforce.py
connector.sync_time_entries()
elif connector:
connector.sync_data(sync_type="time_entries")
except Exception:
Comment thread app/routes/workforce.py
connector.sync_data(sync_type="time_entries")
except Exception:
pass
except Exception:
Comment thread app/routes/projects.py
@login_required
def generate_recurring_cost_now(project_id, rid):
"""Manually generate a project cost from a recurring template."""
project = Project.query.get_or_404(project_id)

import re
from datetime import datetime
from typing import Any, Dict, List, Optional, Tuple
@@ -0,0 +1,15 @@
"""REST API v1 endpoints for geofences."""

from flask import g
@evilguy4000
evilguy4000 merged commit f3136aa into main Sep 16, 2026
19 of 25 checks passed
@github-actions

Copy link
Copy Markdown

❌ CI Test Results

Overall Status: 2 test suite(s) failed

Test Results: 2/9 passed

Test Suites:

  • ✅ Smoke Tests: success
  • ⏸️ Unit Tests: cancelled
  • ⏸️ Integration Tests: cancelled
  • ✅ Security Tests: success
  • ❌ Code Quality: failure
  • ❌ Frontend Assets: failure
  • ⏭️ E2E, CSP & Accessibility: skipped
  • ⏭️ Docker Build: skipped
  • ⏭️ Full Test Suite: skipped

Commit: 0e0b5af
Workflow: 35065255918

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant