commit
8a3a89fde9
|
|
@ -28,6 +28,7 @@
|
||||||
'data/data.xml',
|
'data/data.xml',
|
||||||
'data/sequence.xml',
|
'data/sequence.xml',
|
||||||
'data/mail_template.xml',
|
'data/mail_template.xml',
|
||||||
|
'data/templates.xml',
|
||||||
'views/job_category.xml',
|
'views/job_category.xml',
|
||||||
'views/hr_location.xml',
|
'views/hr_location.xml',
|
||||||
'views/stages.xml',
|
'views/stages.xml',
|
||||||
|
|
|
||||||
|
|
@ -342,7 +342,7 @@
|
||||||
</p>
|
</p>
|
||||||
</t>
|
</t>
|
||||||
|
|
||||||
<t t-if="ctx.get('personal_docs') or ctx.get('education_docs') or ctx.get('previous_employer_docs') or ctx.get('other_docs')">
|
<t t-if="ctx.get('personal_docs') and ctx.get('education_docs') or ctx.get('previous_employer_docs') or ctx.get('other_docs')">
|
||||||
<p>For HR records, please provide soft copies of the following documents:</p>
|
<p>For HR records, please provide soft copies of the following documents:</p>
|
||||||
|
|
||||||
<!-- Personal Documents -->
|
<!-- Personal Documents -->
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,350 @@
|
||||||
|
<odoo>
|
||||||
|
<!-- <template id="joining_form_custom_external_layout_standard">-->
|
||||||
|
<!-- <div t-attf-class="header">-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div t-attf-class="footer o_company_#{company.id}_layout {{report_type != 'pdf' and 'mt-auto'}}">-->
|
||||||
|
<!-- <div class="o_footer_content d-flex border-top pt-2">-->
|
||||||
|
<!-- <div class="flex-grow-1 text-start me-2" t-field="company.report_footer"/>-->
|
||||||
|
<!-- <div class="text-end text-muted">-->
|
||||||
|
<!-- <div t-if="report_type == 'pdf' and display_name_in_footer" t-out="o.name">(document name)</div>-->
|
||||||
|
<!-- <div t-if="report_type == 'pdf'">Page <span class="page"/> / <span class="topage"/></div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
|
||||||
|
<!-- <template id="joining_form_custom_external_layout">-->
|
||||||
|
<!-- <t t-if="not o" t-set="o" t-value="doc"/>-->
|
||||||
|
|
||||||
|
<!-- <t t-if="not company">-->
|
||||||
|
<!-- <!– Multicompany –>-->
|
||||||
|
<!-- <t t-if="company_id">-->
|
||||||
|
<!-- <t t-set="company" t-value="company_id"/>-->
|
||||||
|
<!-- </t>-->
|
||||||
|
<!-- <t t-elif="o and 'company_id' in o and o.company_id.sudo()">-->
|
||||||
|
<!-- <t t-set="company" t-value="o.company_id.sudo()"/>-->
|
||||||
|
<!-- </t>-->
|
||||||
|
<!-- <t t-else="else">-->
|
||||||
|
<!-- <t t-set="company" t-value="res_company"/>-->
|
||||||
|
<!-- </t>-->
|
||||||
|
<!-- </t>-->
|
||||||
|
|
||||||
|
<!-- <t t-if="company.external_report_layout_id" t-call="{{company.external_report_layout_id.sudo().key}}"><t t-out="0"/></t>-->
|
||||||
|
<!-- <t t-else="else" t-call="hr_recruitment_extended.joining_form_custom_external_layout_standard"><t t-out="0"/></t>-->
|
||||||
|
|
||||||
|
<!-- </template>-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
<template id="employee_joining_form_template">
|
||||||
|
<t t-call="web.external_layout">
|
||||||
|
<main class="page" style="margin: 0px; padding: 0px; font-size: 16px; font-family: 'Arial', sans-serif;">
|
||||||
|
<t t-foreach="docs" t-as="doc">
|
||||||
|
|
||||||
|
<!-- Candidate Image -->
|
||||||
|
<t t-if="doc.candidate_id.candidate_image">
|
||||||
|
<div style="text-align: center; margin-bottom: 30px;">
|
||||||
|
<img t-attf-src="data:image/png;base64,#{doc.candidate_id.candidate_image}"
|
||||||
|
style="width: 280px; height: 400px; object-fit: cover; border: 2px solid #333; border-radius: 8px;"/>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
<!-- Header -->
|
||||||
|
<div style="text-align:center; margin-bottom: 40px;">
|
||||||
|
<h1 style="margin: 0; font-size: 24px;">Welcome to FTPROTECH</h1>
|
||||||
|
<h2 style="margin: 10px 0 0;">Employee Joining Form</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Reusable styles -->
|
||||||
|
<t t-set="row_style" t-value="'display: flex; margin-bottom: 12px; page-break-inside: avoid;'"/>
|
||||||
|
<t t-set="label_style" t-value="'width: 35%; font-weight: bold; color: #333;'"/>
|
||||||
|
<t t-set="value_style" t-value="'width: 65%; color: #000;'"/>
|
||||||
|
|
||||||
|
<!-- Personal Info -->
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
<h3 style="margin-top: 30px; color: #005580;">Personal Details</h3>
|
||||||
|
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Employee Code:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.employee_code or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Date of Joining:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.doj or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Full Name:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.employee_id.name or doc.name or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Email:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.email_from or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Mobile No:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.partner_phone or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Alternate Mobile:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.alternate_phone or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Gender:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.gender or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Date of Birth:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.birthday or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Address -->
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
<h3 style="margin-top: 30px; color: #005580;">Address</h3>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Present Address:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.private_street or ''"/>
|
||||||
|
<t t-esc="doc.private_street2 or ''"/>,
|
||||||
|
<t t-esc="doc.private_city or ''"/>
|
||||||
|
<t t-esc="doc.private_zip or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Permanent Address:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.permanent_street or ''"/>
|
||||||
|
<t t-esc="doc.permanent_street2 or ''"/>,
|
||||||
|
<t t-esc="doc.permanent_city or ''"/>
|
||||||
|
<t t-esc="doc.permanent_zip or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div t-att-style="row_style">
|
||||||
|
<div t-att-style="label_style">Marital Status:</div>
|
||||||
|
<div t-att-style="value_style">
|
||||||
|
<t t-esc="doc.marital or ''"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section: Family Details -->
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
<t t-if="doc.family_details">
|
||||||
|
<h3 style="margin-top: 35px; color: #005580;">Family Details</h3>
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-size: 15px;">
|
||||||
|
<thead style="background: #f1f1f1;">
|
||||||
|
<tr>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Name</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Contact</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Date of Birth</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Location</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<t t-foreach="doc.family_details" t-as="member">
|
||||||
|
<tr>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="member.name or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="member.contact_no or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="member.dob or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="member.location or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</t>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section: Education -->
|
||||||
|
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
<t t-if="doc.education_history">
|
||||||
|
<h3 style="margin-top: 35px; color: #005580;">Education Details</h3>
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-size: 15px;">
|
||||||
|
<thead style="background: #f1f1f1;">
|
||||||
|
<tr>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Specialization</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">University</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Start Year</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">End Year</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Grade</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<t t-foreach="doc.education_history" t-as="edu">
|
||||||
|
<tr>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="edu.name or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="edu.university or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="edu.start_year or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="edu.end_year or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="edu.marks_or_grade or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</t>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- Section: Previous Employer -->
|
||||||
|
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
<t t-if="doc.employer_history">
|
||||||
|
<h3 style="margin-top: 35px; color: #005580;">Previous Employment</h3>
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-size: 15px;">
|
||||||
|
<thead style="background: #f1f1f1;">
|
||||||
|
<tr>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Company</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Designation</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Joining</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">Last Working Day</th>
|
||||||
|
<th style="border: 1px solid #ccc; padding: 8px;">CTC</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<t t-foreach="doc.employer_history" t-as="job">
|
||||||
|
<tr>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="job.company_name or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="job.designation or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="job.date_of_joining or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="job.last_working_day or ''"/>
|
||||||
|
</td>
|
||||||
|
<td style="border: 1px solid #ccc; padding: 8px;">
|
||||||
|
<t t-esc="job.ctc or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</t>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Section: Bank Details -->
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
|
||||||
|
<h3 style="margin-top: 35px; color: #005580;">Bank Account Details</h3>
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-size: 15px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 35%; text-align: left;">Name as per Bank</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.full_name_as_in_bank or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">Bank Name</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.bank_name or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">Branch</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.bank_branch or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">Account No</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.bank_account_no or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">IFSC Code</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.bank_ifsc_code or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Section: Identification -->
|
||||||
|
<div style="page-break-inside: avoid;">
|
||||||
|
<h3 style="margin-top: 35px; color: #005580;">Identification</h3>
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-size: 15px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 35%; text-align: left;">PAN No</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.pan_no or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">Aadhar No</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.identification_id or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">PF No</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.previous_company_pf_no or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="text-align: left;">UAN No</th>
|
||||||
|
<td>
|
||||||
|
<t t-esc="doc.previous_company_uan_no or ''"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Declaration -->
|
||||||
|
<div style="margin-top: 40px; font-style: italic; text-align: justify;">
|
||||||
|
I hereby declare that all the above information is true to the best of my knowledge.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</t>
|
||||||
|
</main>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
</odoo>
|
||||||
|
</odoo>
|
||||||
|
|
@ -358,6 +358,9 @@ class HRApplicant(models.Model):
|
||||||
})
|
})
|
||||||
return action
|
return action
|
||||||
|
|
||||||
|
def print_joining_form(self):
|
||||||
|
return self.env.ref('hr_recruitment_extended.action_joining_form_report').report_action(self)
|
||||||
|
|
||||||
class ApplicantGetRefuseReason(models.TransientModel):
|
class ApplicantGetRefuseReason(models.TransientModel):
|
||||||
_inherit = 'applicant.get.refuse.reason'
|
_inherit = 'applicant.get.refuse.reason'
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 141 KiB |
|
|
@ -400,4 +400,17 @@
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="action_download_joining_form" model="ir.actions.report">
|
||||||
|
<field name="name">Download Joining Form</field>
|
||||||
|
<field name="model">hr.applicant</field>
|
||||||
|
<field name="report_type">qweb-pdf</field>
|
||||||
|
<field name="report_name">hr_recruitment_extended.employee_joining_form_template</field>
|
||||||
|
<field name="report_file">hr_recruitment_extended.employee_joining_form_template</field>
|
||||||
|
<field name="binding_model_id" ref="hr_recruitment.model_hr_applicant"/>
|
||||||
|
<field name="print_report_name">'JOD - %s' % (object.display_name)</field>
|
||||||
|
<field name="binding_type">report</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
@ -51,10 +51,12 @@ class ClientSubmissionsMailTemplateWizard(models.TransientModel):
|
||||||
'email_from': rec.email_from,
|
'email_from': rec.email_from,
|
||||||
'email_to': rec.email_to,
|
'email_to': rec.email_to,
|
||||||
'email_cc': rec.email_cc,
|
'email_cc': rec.email_cc,
|
||||||
|
'subject' : rec.email_subject,
|
||||||
|
'body_html': rec.email_body,
|
||||||
}
|
}
|
||||||
render_ctx = dict(client_name=record.hr_job_recruitment.requested_by.name)
|
render_ctx = dict(client_name=record.hr_job_recruitment.requested_by.name)
|
||||||
# Use 'with_context' to override the email template fields dynamically
|
# Use 'with_context' to override the email template fields dynamically
|
||||||
template.sudo().with_context(default_body_html=self.email_body, default_subject=self.email_subject,**render_ctx).send_mail(self.env.context.get('active_id'),email_values=values, force_send=True)
|
template.sudo().with_context(**render_ctx).send_mail(self.env.context.get('active_id'),email_values=values, force_send=True)
|
||||||
record.sudo().write({
|
record.sudo().write({
|
||||||
'submitted_to_client': True,
|
'submitted_to_client': True,
|
||||||
'client_submission_date': rec.submit_date,
|
'client_submission_date': rec.submit_date,
|
||||||
|
|
|
||||||
|
|
@ -97,11 +97,12 @@ class PostOnboardingAttachmentWizard(models.TransientModel):
|
||||||
'email_from': rec.email_from,
|
'email_from': rec.email_from,
|
||||||
'email_to': rec.email_to,
|
'email_to': rec.email_to,
|
||||||
'email_cc': rec.email_cc,
|
'email_cc': rec.email_cc,
|
||||||
|
'subject': rec.email_subject,
|
||||||
'attachment_ids': [(6, 0, rec.attachment_ids.ids)],
|
'attachment_ids': [(6, 0, rec.attachment_ids.ids)],
|
||||||
|
|
||||||
}
|
}
|
||||||
# Use 'with_context' to override the email template fields dynamically
|
# Use 'with_context' to override the email template fields dynamically
|
||||||
template.sudo().with_context(default_body_html=rec.email_body, default_subject=rec.email_subject,
|
template.sudo().with_context(default_body_html=rec.email_body,
|
||||||
**email_context).send_mail(applicant.id, email_values=email_values,
|
**email_context).send_mail(applicant.id, email_values=email_values,
|
||||||
force_send=True)
|
force_send=True)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -248,7 +248,7 @@ class BiometricDeviceDetails(models.Model):
|
||||||
"""Process attendance data from the device"""
|
"""Process attendance data from the device"""
|
||||||
users = conn.get_users()
|
users = conn.get_users()
|
||||||
today = datetime.datetime.today().date().strftime("%Y-%m-%d")
|
today = datetime.datetime.today().date().strftime("%Y-%m-%d")
|
||||||
tolerance = datetime.timedelta(minutes=10)
|
tolerance = datetime.timedelta(minutes=1)
|
||||||
|
|
||||||
# Filter today's attendance
|
# Filter today's attendance
|
||||||
filtered_attendance = [
|
filtered_attendance = [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue