Initial commit

This commit is contained in:
gsinghpal
2026-02-22 01:22:18 -05:00
commit 5200d5baf0
2394 changed files with 386834 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<templates xml:space="preserve">
<!-- Places Autocomplete Address Field (inherits CharField, turns off browser autocomplete) -->
<t t-name="fusion_clock.PlacesAddress" t-inherit="web.CharField" t-inherit-mode="primary">
<xpath expr="//input" position="attributes">
<attribute name="autocomplete">off</attribute>
</xpath>
</t>
<!-- Interactive Map Widget -->
<t t-name="fusion_clock.LocationMap">
<div class="fclk-map-widget">
<!-- Search box (edit mode only) -->
<div t-if="state.loaded and !props.readonly" class="mb-2">
<input t-ref="searchInput" type="text"
class="form-control"
placeholder="Search for a place or address..."/>
</div>
<!-- Map container -->
<div t-ref="mapContainer"
style="width:100%; height:400px; border-radius:8px; border:1px solid var(--o-border-color, #dee2e6);"/>
<!-- Coordinate display -->
<div t-if="state.loaded and !props.readonly"
class="mt-2 text-muted small">
<i class="fa fa-info-circle me-1"/>
Drag the pin or use the search box to adjust. Changes save with the form.
</div>
<!-- Loading -->
<div t-if="!state.loaded and !state.error"
class="text-center p-4 text-muted">
<i class="fa fa-spinner fa-spin fa-2x"/>
<div class="mt-2">Loading map...</div>
</div>
<!-- Error -->
<div t-if="state.error" class="alert alert-warning mt-2 mb-0">
<i class="fa fa-exclamation-triangle me-1"/>
<t t-esc="state.error"/>
</div>
</div>
</t>
</templates>

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<templates xml:space="preserve">
<t t-name="fusion_clock.ClockFAB">
<div t-if="state.isDisplayed" class="fclk-fab-wrapper">
<!-- Expanded Panel (above the button) -->
<div t-if="state.expanded" class="fclk-fab-panel">
<!-- Header -->
<div class="fclk-fab-panel-header">
<div class="fclk-fab-panel-title">
<span t-attf-class="fclk-fab-status-dot {{ state.isCheckedIn ? 'active' : '' }}"/>
<span t-if="state.isCheckedIn">Clocked In</span>
<span t-else="">Ready</span>
</div>
<a href="/my/clock" class="fclk-fab-open-link" target="_blank" title="Open Full Clock">
<i class="fa fa-external-link"/>
</a>
</div>
<!-- Location -->
<div t-if="state.isCheckedIn and state.locationName" class="fclk-fab-location">
<i class="fa fa-map-marker"/>
<span t-esc="state.locationName"/>
</div>
<!-- Timer -->
<div class="fclk-fab-timer" t-esc="state.timerDisplay"/>
<!-- Stats Row -->
<div class="fclk-fab-stats">
<div class="fclk-fab-stat">
<span class="fclk-fab-stat-val"><t t-esc="state.todayHours"/>h</span>
<span class="fclk-fab-stat-lbl">Today</span>
</div>
<div class="fclk-fab-stat-divider"/>
<div class="fclk-fab-stat">
<span class="fclk-fab-stat-val"><t t-esc="state.weekHours"/>h</span>
<span class="fclk-fab-stat-lbl">Week</span>
</div>
</div>
<!-- Clock Action Button -->
<button t-attf-class="fclk-fab-action {{ state.isCheckedIn ? 'fclk-fab-action--out' : 'fclk-fab-action--in' }}"
t-on-click="onClockAction"
t-att-disabled="state.loading">
<t t-if="state.loading">
<i class="fa fa-circle-o-notch fa-spin"/> Working...
</t>
<t t-elif="state.isCheckedIn">
<i class="fa fa-stop-circle-o"/> Clock Out
</t>
<t t-else="">
<i class="fa fa-play-circle-o"/> Clock In
</t>
</button>
<!-- Error -->
<div t-if="state.error" class="fclk-fab-error">
<i class="fa fa-exclamation-triangle"/>
<t t-esc="state.error"/>
</div>
<!-- Arrow pointing to button -->
<div class="fclk-fab-panel-arrow"/>
</div>
<!-- Floating Action Button -->
<button t-attf-class="fclk-fab-btn {{ state.isCheckedIn ? 'fclk-fab-btn--active' : '' }} {{ state.expanded ? 'fclk-fab-btn--open' : '' }}"
t-on-click="togglePanel">
<!-- Ripple rings (always animate) -->
<span t-if="state.isCheckedIn" class="fclk-fab-ripple-ring fclk-fab-ripple-ring--1"/>
<span t-if="state.isCheckedIn" class="fclk-fab-ripple-ring fclk-fab-ripple-ring--2"/>
<span t-if="state.isCheckedIn" class="fclk-fab-ripple-ring fclk-fab-ripple-ring--3"/>
<!-- Icon -->
<span class="fclk-fab-icon">
<i t-if="!state.expanded" class="fa fa-clock-o"/>
<i t-else="" class="fa fa-times"/>
</span>
<!-- Mini timer badge -->
<span t-if="state.isCheckedIn and !state.expanded" class="fclk-fab-badge">
<t t-esc="state.timerDisplay"/>
</span>
</button>
</div>
</t>
</templates>