From e9b9eb92ae32ef87dd074f0cc6e5ee677f239ad3 Mon Sep 17 00:00:00 2001 From: Pranay Date: Thu, 8 May 2025 16:42:19 +0530 Subject: [PATCH] CWF TIMESHEET added Month --- .../cwf_timesheet/models/timesheet.py | 64 +++++++++++++++++-- .../cwf_timesheet/views/timesheet_view.xml | 37 +++++++---- .../views/timesheet_weekly_view.xml | 13 ++-- 3 files changed, 91 insertions(+), 23 deletions(-) diff --git a/addons_extensions/cwf_timesheet/models/timesheet.py b/addons_extensions/cwf_timesheet/models/timesheet.py index 021ca6943..c4649fc1b 100644 --- a/addons_extensions/cwf_timesheet/models/timesheet.py +++ b/addons_extensions/cwf_timesheet/models/timesheet.py @@ -3,6 +3,8 @@ from odoo.exceptions import ValidationError, UserError from datetime import datetime, timedelta import datetime as dt from odoo import _ +from calendar import month_name, month +from datetime import date class CwfTimesheetYearly(models.Model): _name = 'cwf.timesheet.calendar' @@ -67,6 +69,32 @@ class CwfTimesheet(models.Model): ], default='draft', string='Status') lines = fields.One2many('cwf.timesheet.line','week_id') cwf_calendar_id = fields.Many2one('cwf.timesheet.calendar') + start_month = fields.Selection( + [(str(i), month_name[i]) for i in range(1, 13)], + string='Start Month', + compute='_compute_months', + store=True + ) + + end_month = fields.Selection( + [(str(i), month_name[i]) for i in range(1, 13)], + string='End Month', + compute='_compute_months', + store=True + ) + + @api.depends('week_start_date', 'week_end_date') + def _compute_months(self): + for rec in self: + if rec.week_start_date: + rec.start_month = str(rec.week_start_date.month) + else: + rec.start_month = False + + if rec.week_end_date: + rec.end_month = str(rec.week_end_date.month) + else: + rec.end_month = False @api.depends('name','week_start_date','week_end_date') def _compute_display_name(self): @@ -142,20 +170,46 @@ class CwfWeeklyTimesheet(models.Model): def _default_week_id(self): - timesheet = False current_date = fields.Date.today() - timesheet = self.env['cwf.timesheet'].sudo().search([('week_start_date','<=',current_date),('week_end_date','>=',current_date)],limit=1) - if timesheet: - return timesheet.id - return timesheet + timesheet = self.env['cwf.timesheet'].sudo().search([ + ('week_start_date', '<=', current_date), + ('week_end_date', '>=', current_date) + ], limit=1) + return timesheet.id if timesheet else False + def _get_week_id_domain(self): + for rec in self: + return [('week_start_date.month_number','=',2)] + pass + + month_id = fields.Selection( + [(str(i), month_name[i]) for i in range(1, 13)], + string='Month' + ) week_id = fields.Many2one('cwf.timesheet', 'Week', default=lambda self: self._default_week_id()) + employee_id = fields.Many2one('hr.employee', default=lambda self: self.env.user.employee_id.id) cwf_timesheet_lines = fields.One2many('cwf.timesheet.line' ,'weekly_timesheet') status = fields.Selection([('draft','Draft'),('submitted','Submitted')], default='draft') week_start_date = fields.Date(related='week_id.week_start_date') week_end_date = fields.Date(related='week_id.week_end_date') + @api.onchange('month_id') + def _onchange_month(self): + if self.month_id: + year = self.week_start_date.year if self.week_start_date else fields.Date.today().year + start = date(year, int(self.month_id), 1) + if int(self.month_id) == 12: + end = date(year + 1, 1, 1) - timedelta(days=1) + else: + end = date(year, int(self.month_id) + 1, 1) - timedelta(days=1) + self = self.with_context(month_start=start, month_end=end) + + @api.onchange('week_id') + def _onchange_week_id(self): + if self.week_id and self.week_id.week_start_date: + self.month_id = str(self.week_id.week_start_date.month) + @api.constrains('week_id', 'employee_id') def _check_unique_week_employee(self): for record in self: diff --git a/addons_extensions/cwf_timesheet/views/timesheet_view.xml b/addons_extensions/cwf_timesheet/views/timesheet_view.xml index bd9956e27..048fd5570 100644 --- a/addons_extensions/cwf_timesheet/views/timesheet_view.xml +++ b/addons_extensions/cwf_timesheet/views/timesheet_view.xml @@ -7,7 +7,8 @@ -