Files
tra_backend/diet_template/wizard/diet_schedule.py
2020-08-04 11:57:11 +05:30

112 lines
4.8 KiB
Python

# See LICENSE file for full copyright and licensing details.
from datetime import datetime, timedelta
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
class DietSchedule(models.TransientModel):
"""object for taking information about Diet schedule."""
_name = 'diet.scheduling'
_description = 'Diet Schedule'
member_id = fields.Many2one('res.partner', string='Member')
goal_id = fields.Many2one('diet.master', string='Diet Plan')
total_days = fields.Integer(string="Total Days Of Plan",
compute='_compute_total_days')
start_date = fields.Date(string='Start Date',
default=datetime.strftime(
datetime.now(), DEFAULT_SERVER_DATE_FORMAT))
end_date = fields.Date(string='End Date')
@api.onchange('member_id')
def _onchange_member_id(self):
if self.env.user.has_group('gym.group_gym_trainer'):
partner_list = []
calendar_event_ids = self.env['calendar.event'].search(
[('trainer_id.user_id', '=', self.env.user.id)])
for rec in calendar_event_ids:
partner_list += rec.partner_ids.ids
return {'domain': {
'member_id': [('id', 'in', partner_list)]}}
return {}
@api.onchange('goal_id', 'start_date')
def _onchange_total_diet_plan_days(self):
"""Method for assign total days based on goal."""
# End Date assign
if not self.total_days:
self.end_date = datetime.strftime(
datetime.now(), DEFAULT_SERVER_DATE_FORMAT)
elif self.start_date:
self.end_date = \
self.start_date + timedelta(days=self.total_days - 1)
@api.depends('goal_id', 'start_date')
def _compute_total_days(self):
# Set the total Days
self.total_days = self.goal_id.total_days
def schedule_project(self):
"""Method for assign workout project to member."""
project = self.env['project.project']
project_task = self.env['project.task']
user_obj = self.env['res.users']
project_kanban = self.env.ref('project.view_project_kanban', False)
for diet_schedule_rec in self:
user_rec = user_obj.search(
[('partner_id', '=', diet_schedule_rec.member_id.id)])
if not user_rec:
raise ValidationError(_('Please make the customer as user'))
elif not diet_schedule_rec.total_days:
raise ValidationError(_('You can\'t created diet schedule '
'with total days of zero.'))
else:
# Creating the project
val = {
'name': diet_schedule_rec.member_id.name + "'s " +
diet_schedule_rec.goal_id.name + ' Schedule',
'type': 'diet',
'partner_id': diet_schedule_rec.member_id.id
}
project_id = project.create(val)
start_tm = diet_schedule_rec.start_date
for task_rec in diet_schedule_rec.goal_id.diet_plan_ids:
interval_list = []
# loop on diet paln lines
for diet_line in task_rec.food_item_ids:
food_list = []
# loop omn food items
for food_rec in diet_line.food_item_ids:
food_list.append((0, 0, {
'food_name_id': food_rec.food_name_id.id,
'quantity': food_rec.quantity
}))
interval_list.append((0, 0, {
'interval': diet_line.interval,
'food_item_ids': food_list
}))
# creating task and assign it to project
project_task.create({'name': task_rec.name + " Plan ",
'project_id': project_id.id,
'diet_plan_ids': interval_list,
'schedule_date': start_tm,
'user_id': user_rec.id,
'sequence': task_rec.sequence,
'task_type': 'diet'
})
start_tm = start_tm + timedelta(days=1)
return {
'type': 'ir.actions.act_window',
'domain': [('id', '=', project_id.id)],
'binding_view_types': 'form',
'view_mode': 'kanban,tree,form',
'res_model': 'project.project',
'view_id': project_kanban.id,
'views': [(project_kanban.id, 'kanban'), (False, 'form')],
'context': dict(create=False),
'target': 'new'
}