This commit is contained in:
gsinghpal
2026-02-27 14:32:32 -05:00
parent b649246e81
commit b925766966
80 changed files with 7831 additions and 1041 deletions

View File

@@ -22,7 +22,7 @@
</record>
<record id="config_break_threshold_hours" model="ir.config_parameter">
<field name="key">fusion_clock.break_threshold_hours</field>
<field name="value">5.0</field>
<field name="value">4.0</field>
</record>
<!-- Grace Period & Auto Clock-Out -->
@@ -48,6 +48,80 @@
<field name="key">fusion_clock.penalty_grace_minutes</field>
<field name="value">5</field>
</record>
<record id="config_penalty_deduction_minutes" model="ir.config_parameter">
<field name="key">fusion_clock.penalty_deduction_minutes</field>
<field name="value">15</field>
</record>
<!-- Office User & Notifications -->
<record id="config_office_user_id" model="ir.config_parameter">
<field name="key">fusion_clock.office_user_id</field>
<field name="value">0</field>
</record>
<record id="config_very_late_threshold" model="ir.config_parameter">
<field name="key">fusion_clock.very_late_threshold_minutes</field>
<field name="value">15</field>
</record>
<record id="config_max_monthly_absences" model="ir.config_parameter">
<field name="key">fusion_clock.max_monthly_absences</field>
<field name="value">3</field>
</record>
<record id="config_enable_employee_notifications" model="ir.config_parameter">
<field name="key">fusion_clock.enable_employee_notifications</field>
<field name="value">True</field>
</record>
<record id="config_reminder_before_shift" model="ir.config_parameter">
<field name="key">fusion_clock.reminder_before_shift_minutes</field>
<field name="value">30</field>
</record>
<record id="config_reminder_before_end" model="ir.config_parameter">
<field name="key">fusion_clock.reminder_before_end_minutes</field>
<field name="value">15</field>
</record>
<record id="config_send_weekly_summary" model="ir.config_parameter">
<field name="key">fusion_clock.send_weekly_summary</field>
<field name="value">True</field>
</record>
<!-- Overtime -->
<record id="config_enable_overtime" model="ir.config_parameter">
<field name="key">fusion_clock.enable_overtime</field>
<field name="value">True</field>
</record>
<record id="config_daily_overtime_threshold" model="ir.config_parameter">
<field name="key">fusion_clock.daily_overtime_threshold</field>
<field name="value">8.0</field>
</record>
<record id="config_weekly_overtime_threshold" model="ir.config_parameter">
<field name="key">fusion_clock.weekly_overtime_threshold</field>
<field name="value">40.0</field>
</record>
<!-- Location & Verification -->
<record id="config_enable_ip_fallback" model="ir.config_parameter">
<field name="key">fusion_clock.enable_ip_fallback</field>
<field name="value">False</field>
</record>
<record id="config_enable_photo_verification" model="ir.config_parameter">
<field name="key">fusion_clock.enable_photo_verification</field>
<field name="value">False</field>
</record>
<!-- Kiosk -->
<record id="config_enable_kiosk" model="ir.config_parameter">
<field name="key">fusion_clock.enable_kiosk</field>
<field name="value">False</field>
</record>
<record id="config_kiosk_pin_required" model="ir.config_parameter">
<field name="key">fusion_clock.kiosk_pin_required</field>
<field name="value">True</field>
</record>
<!-- Corrections -->
<record id="config_enable_corrections" model="ir.config_parameter">
<field name="key">fusion_clock.enable_correction_requests</field>
<field name="value">True</field>
</record>
<!-- Pay Period -->
<record id="config_pay_period_type" model="ir.config_parameter">

View File

@@ -25,4 +25,40 @@
<field name="priority">60</field>
</record>
<!-- Absence Check Cron: runs daily at midnight -->
<record id="cron_check_absences" model="ir.cron">
<field name="name">Fusion Clock: Daily Absence Check</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="state">code</field>
<field name="code">model._cron_fusion_check_absences()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active">True</field>
<field name="priority">55</field>
</record>
<!-- Employee Reminder Cron: runs every 15 minutes -->
<record id="cron_employee_reminders" model="ir.cron">
<field name="name">Fusion Clock: Employee Reminders</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="state">code</field>
<field name="code">model._cron_fusion_employee_reminders()</field>
<field name="interval_number">15</field>
<field name="interval_type">minutes</field>
<field name="active">True</field>
<field name="priority">70</field>
</record>
<!-- Weekly Summary Cron: runs daily (checks if Monday internally) -->
<record id="cron_weekly_summary" model="ir.cron">
<field name="name">Fusion Clock: Weekly Summary</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
<field name="state">code</field>
<field name="code">model._cron_fusion_weekly_summary()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active">True</field>
<field name="priority">80</field>
</record>
</odoo>

View File

@@ -82,4 +82,86 @@
<field name="auto_delete" eval="False"/>
</record>
<!-- Weekly Summary Email -->
<record id="mail_template_weekly_summary" model="mail.template">
<field name="name">Fusion Clock: Weekly Summary</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="subject">Your Weekly Attendance Summary</field>
<field name="email_from">{{ (object.company_id.email or user.email_formatted) }}</field>
<field name="email_to">{{ object.work_email or '' }}</field>
<field name="body_html"><![CDATA[
<div style="margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;">
<table width="600" style="margin:0 auto;background:#ffffff;border:1px solid #e0e0e0;border-radius:8px;">
<tr>
<td style="padding:24px 32px;background:#1a1d23;border-radius:8px 8px 0 0;">
<h2 style="color:#10B981;margin:0;">Fusion Clock</h2>
<p style="color:#9ca3af;margin:4px 0 0;">Weekly Summary</p>
</td>
</tr>
<tr>
<td style="padding:24px 32px;">
<p>Hello <strong>{{ object.name }}</strong>,</p>
<p>Here is your attendance summary for the past week:</p>
<table width="100%" style="margin:16px 0;border-collapse:collapse;">
<tr style="background:#f8f9fa;">
<td style="padding:8px 12px;border:1px solid #e0e0e0;"><strong>Total Hours</strong></td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">{{ ctx.get('total_hours', 0) }}h</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;"><strong>Overtime</strong></td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">{{ ctx.get('overtime_hours', 0) }}h</td>
</tr>
<tr style="background:#f8f9fa;">
<td style="padding:8px 12px;border:1px solid #e0e0e0;"><strong>Penalties</strong></td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">{{ ctx.get('penalty_count', 0) }}</td>
</tr>
<tr>
<td style="padding:8px 12px;border:1px solid #e0e0e0;"><strong>Absences</strong></td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">{{ ctx.get('absence_count', 0) }}</td>
</tr>
<tr style="background:#f8f9fa;">
<td style="padding:8px 12px;border:1px solid #e0e0e0;"><strong>On-Time Streak</strong></td>
<td style="padding:8px 12px;border:1px solid #e0e0e0;">{{ ctx.get('streak', 0) }} days</td>
</tr>
</table>
<p>Log in to <a href="/my/clock">your portal</a> to view details.</p>
<p style="color:#6b7280;font-size:12px;">This is an automated message from Fusion Clock.</p>
</td>
</tr>
</table>
</div>
]]></field>
<field name="auto_delete" eval="False"/>
</record>
<!-- Correction Request Notification -->
<record id="mail_template_correction_request" model="mail.template">
<field name="name">Fusion Clock: Correction Request</field>
<field name="model_id" ref="fusion_clock.model_fusion_clock_correction"/>
<field name="subject">Timesheet Correction Request: {{ object.employee_id.name }}</field>
<field name="email_from">{{ (object.company_id.email or user.email_formatted) }}</field>
<field name="body_html"><![CDATA[
<div style="margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;">
<table width="600" style="margin:0 auto;background:#ffffff;border:1px solid #e0e0e0;border-radius:8px;">
<tr>
<td style="padding:24px 32px;background:#1a1d23;border-radius:8px 8px 0 0;">
<h2 style="color:#10B981;margin:0;">Fusion Clock</h2>
<p style="color:#9ca3af;margin:4px 0 0;">Correction Request</p>
</td>
</tr>
<tr>
<td style="padding:24px 32px;">
<p><strong>{{ object.employee_id.name }}</strong> has submitted a timesheet correction request.</p>
<p><strong>Reason:</strong> {{ object.reason }}</p>
<p>Please review and approve/reject from the Fusion Clock backend.</p>
</td>
</tr>
</table>
</div>
]]></field>
<field name="auto_delete" eval="False"/>
</record>
</odoo>