changes
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user