This commit is contained in:
raman 2025-08-07 14:53:44 +05:30
parent e88f7da488
commit 0b93dd1a87
7 changed files with 115 additions and 40 deletions

View File

@ -11,7 +11,7 @@ from pdf2image import convert_from_bytes
from PIL import Image from PIL import Image
import pytesseract import pytesseract
import json import json
from docx import Document # from docx import Document
# import binascii # import binascii
from odoo.tools.mimetypes import guess_mimetype from odoo.tools.mimetypes import guess_mimetype

View File

@ -138,7 +138,7 @@ body.ats-app {
/* ===== Main Content Area ===== */ /* ===== Main Content Area ===== */
.ats-app .content-area { .ats-app .content-area {
flex: 1; flex: 1;
padding: 2rem; padding: 5px;
background-color: var(--content-bg); background-color: var(--content-bg);
overflow-y: auto; overflow-y: auto;
box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.02); box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.02);
@ -210,8 +210,23 @@ body.ats-app {
} }
.ats-app .content-area { .ats-app .content-area {
padding: 1rem; padding: 8px;
border-left: none;
} }
} }
#sidebar.collapsed {
width: 0;
overflow: hidden;
padding: 0;
}
.menu-list a.active {
background-color: #DBEDFE;
color: #0061FF;
transform: translateX(6px);
box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);
font-weight: 600;
letter-spacing: 0.5px;
border-radius: 0.375rem;
padding: 0.5rem 0.75rem;
display: block;
}

View File

@ -437,7 +437,13 @@
padding-bottom: 12px; padding-bottom: 12px;
border-bottom: 2px solid var(--gray-200); border-bottom: 2px solid var(--gray-200);
} }
.ats-grid .fa{
padding-right:5px;
}
.ats-list {
background-color:linear-gradient(90deg,rgba(2, 0, 36, 1) 0%, rgba(9, 9, 121, 1) 35%, rgba(0, 212, 255, 1) 100%);
}
.ats-grid .detail-label { .ats-grid .detail-label {
font-weight: 600; font-weight: 600;
color: var(--text-secondary); color: var(--text-secondary);

View File

@ -5,19 +5,60 @@ document.addEventListener("DOMContentLoaded", function () {
const contentArea = document.getElementById("main-content"); const contentArea = document.getElementById("main-content");
const jobDetailArea = document.getElementById("job-detail"); const jobDetailArea = document.getElementById("job-detail");
const toggleBtn = document.getElementById("sidebar-toggle-btn"); // const toggleBtn = document.getElementById("sidebar-toggle-btn");
const sidebar = document.getElementById("sidebar"); // const sidebar = document.getElementById("sidebar");
//
// // ✅ Sidebar Toggle
// if (toggleBtn && sidebar) {
// toggleBtn.addEventListener("click", function () {
// sidebar.classList.toggle("collapsed");
// sidebar.classList.toggle("expanded");
// });
// }
document.getElementById('sidebar-toggle-btn').addEventListener('click', function () {
const sidebar = document.getElementById('sidebar');
const icon = this.querySelector('i');
// ✅ Sidebar Toggle sidebar.classList.toggle('collapsed');
if (toggleBtn && sidebar) {
toggleBtn.addEventListener("click", function () {
sidebar.classList.toggle("collapsed");
sidebar.classList.toggle("expanded");
});
}
if (sidebar.classList.contains('collapsed')) {
icon.classList.remove('fas fa-angle-left');
icon.classList.add('fas fa-angle-right');
} else {
icon.classList.remove('fas fa-angle-right');
icon.classList.add('fas fa-angle-left');
}
});
const links = document.querySelectorAll('.menu-list a');
function highlightCurrentMenu() {
const hash = window.location.hash;
links.forEach(link => {
if (link.getAttribute('href') === hash) {
link.classList.add('active');
} else {
link.classList.remove('active');
}
});
}
// Run on page load
highlightCurrentMenu();
// Optional: update on hash change (if user navigates)
window.addEventListener('hashchange', highlightCurrentMenu);
// Optional: highlight on click if you're using JS navigation
links.forEach(link => {
link.addEventListener('click', () => {
links.forEach(l => l.classList.remove('active'));
link.classList.add('active');
});
});
document.querySelectorAll('.menu-list a[data-page]').forEach(link => { document.querySelectorAll('.menu-list a[data-page]').forEach(link => {
link.addEventListener('click', async function (e) { link.addEventListener('click', async function (e) {
debugger;
e.preventDefault(); e.preventDefault();
const page = this.dataset.page; const page = this.dataset.page;

View File

@ -86,7 +86,10 @@
<link rel="stylesheet" <link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"/> href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"/>
<div class="ats-grid" id="ats-details-container"> <div class="ats-grid" id="ats-details-container">
<div class="ats-card span-3" style="grid-row: span 2;" id="candidate-overview"> <button type="button" class="close-detail" aria-label="Close">
<span aria-hidden="true">&amp;times;</span>
</button>
<div class="ats-card span-3" style="grid-row: span 2;" id="ats-overview">
<h4 class="section-title"> <h4 class="section-title">
<i class="fa fa-list-ul me-2"></i>Quick Nav <i class="fa fa-list-ul me-2"></i>Quick Nav
</h4> </h4>
@ -156,7 +159,13 @@
</span> </span>
<span class="me-3 meta-item" t-if="candidate.employee_id"> <span class="me-3 meta-item" t-if="candidate.employee_id">
<i class="fa fa-id-card me-1"></i> <i class="fa fa-id-card me-1"></i>
<span t-esc="candidate.employee_id.name or 'No employee record'"/> <t t-if="candidate.employee_id.employee_id">
<span t-esc="candidate.employee_id.employee_id or 'No employee record'"/>
</t>
<t t-else="">
<span t-esc="'Not Specified'"/>
</t>
</span> </span>
</div> </div>
</div> </div>
@ -183,8 +192,8 @@
</div> </div>
</div> </div>
</div> </div>
<div class="ats-card span-3" style="grid-row: span 1;"> <!-- <div class="ats-card span-3" style="grid-row: span 1;">-->
</div> <!-- </div>-->
<div class="ats-card span-6" style="grid-row: span 1;" id="candidate-basic-info"> <div class="ats-card span-6" style="grid-row: span 1;" id="candidate-basic-info">
<h4 class="section-title"> <h4 class="section-title">
<i class="fa fa-info-circle me-2"></i>Basic Information <i class="fa fa-info-circle me-2"></i>Basic Information

View File

@ -16,10 +16,12 @@
src="/hr_recruitment_web_app/static/src/js/select2.min.js"></script> src="/hr_recruitment_web_app/static/src/js/select2.min.js"></script>
<link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/ats.css"/> <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/ats.css"/>
<link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/list.css?v=34"/> <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/list.css?v=34"/>
<link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/content.css?v=5"/> <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/content.css?v=8"/>
<link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/jd.css"/> <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/jd.css"/>
<link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/applicants.css?v=3"/> <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/applicants.css?v=3"/>
<link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/candidate.css?v=1"/> <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/candidate.css?v=1"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css"/>
<!-- <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/applicants.css"/>--> <!-- <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/applicants.css"/>-->
<!-- <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/applicants_details.css"/>--> <!-- <link rel="stylesheet" href="/hr_recruitment_web_app/static/src/css/applicants_details.css"/>-->
<!-- <link ref="stylesheet" href="/hr_recruitment_web_app/static/src/css/ats_candidate.css"/>--> <!-- <link ref="stylesheet" href="/hr_recruitment_web_app/static/src/css/ats_candidate.css"/>-->
@ -43,13 +45,15 @@
style="height: 40px; width: auto;" /> style="height: 40px; width: auto;" />
<span style="font-size: 24px; font-weight: bold;">Opsentra ATS</span> <span style="font-size: 24px; font-weight: bold;">Opsentra ATS</span>
</div> </div>
<ul class="menu-list"> <ul class="menu-list list-unstyled">
<!-- <span class="list-title">RECRUITING</span>--> <!-- <span class="list-title">RECRUITING</span>-->
<li><a href="#jobs" data-page="job_requests"><i class="bi bi-file-earmark-text"></i> JD</a></li> <li><a href="#jobs" data-page="job_requests"><i class="bi bi-file-earmark-text"></i> JD</a></li>
<li><a href="#applicants" data-page="applicants"><i class="bi bi-people"></i> Applicants</a></li> <li><a href="#applicants" data-page="applicants"><i class="bi bi-people"></i> Applicants</a></li>
<li><a href="#candidates" data-page="candidates"><i class="bi bi-person-check"></i> Candidates</a></li> <li><a href="#candidates" data-page="candidates"><i class="bi bi-person-check"></i> Candidates</a></li>
</ul> </ul>
<button id="sidebar-toggle-btn" class="toggle-btn"></button> <button id="sidebar-toggle-btn" class="btn btn-outline-secondary position-absolute top-0 start-100 translate-middle-y mt-3">
<i class="fas fa-angle-left"></i>
</button>
</aside> </aside>
<main class="content-area"> <main class="content-area">

View File

@ -1,24 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<odoo> <odoo>
<record id="res_config_settings_view_form_inherited_qwen" model="ir.ui.view"> <!-- <record id="res_config_settings_view_form_inherited_qwen" model="ir.ui.view">-->
<field name="name">res.config.settings.view.form.inherit.account</field> <!-- <field name="name">res.config.settings.view.form.inherit.account</field>-->
<field name="model">res.config.settings</field> <!-- <field name="model">res.config.settings</field>-->
<field name="priority" eval="40"/> <!-- <field name="priority" eval="40"/>-->
<field name="inherit_id" ref="hr_recruitment.res_config_settings_view_form"/> <!-- <field name="inherit_id" ref="hr_recruitment.res_config_settings_view_form"/>-->
<field name="arch" type="xml"> <!-- <field name="arch" type="xml">-->
<xpath expr="//block[@name='recruitment_in_app_purchases']" position="after"> <!-- <xpath expr="//block[@name='recruitment_in_app_purchases']" position="after">-->
<h2>Qwen API</h2> <!-- <h2>Qwen API</h2>-->
<div class="row mt16 o_settings_container" name="performance"> <!-- <div class="row mt16 o_settings_container" name="performance">-->
<div class="col-12 col-lg-6 o_setting_box" id="qwen_api_key"> <!-- <div class="col-12 col-lg-6 o_setting_box" id="qwen_api_key">-->
<label for="qwen_api_key"/> <!-- <label for="qwen_api_key"/>-->
<field name="qwen_api_key"/> <!-- <field name="qwen_api_key"/>-->
<div class="text-muted"> <!-- <div class="text-muted">-->
Enter Your API key of the Together.ai. <!-- Enter Your API key of the Together.ai.-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</xpath> <!-- </xpath>-->
</field> <!-- </field>-->
</record> <!-- </record>-->
</odoo> </odoo>