add gym module

This commit is contained in:
sonal
2020-08-04 16:50:06 +05:30
parent d32f648b75
commit 29f684db39
219 changed files with 5030 additions and 0 deletions

325
gym/models/member.py Normal file
View File

@@ -0,0 +1,325 @@
# See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from datetime import date
from odoo.exceptions import ValidationError
class ResUsers(models.Model):
"""Users's detail."""
_inherit = 'res.users'
@api.model
def create(self, vals):
return super(ResUsers,
self.with_context(is_create_user=True)).create(vals)
class MemberDetail(models.Model):
"""Member's detail."""
_inherit = 'res.partner'
is_member = fields.Boolean(string='Is member ?',
default=lambda self: self.env.context.
get('member_default', False))
is_operator = fields.Boolean(string='Operator')
gender = fields.Selection([('male', 'Male'), ('female', 'Female')],
string='Gender', default='male')
occupation = fields.Char('Occupation')
reg_no = fields.Char('Member ID', copy=False,
help='Registration Number of Member')
member_measurement_ids = fields.One2many('body.measurement', 'partner_id',
'Measurement History',
help='Body Measurement History '
'of the Member')
birthdate = fields.Date('Date of Birth')
age = fields.Float(compute='_compute_calculate_age', string='Age',store=True)
measurements = fields.Integer(compute="_compute_cal_total_measurement",
string="Total measurement")
membership = fields.Integer(compute="_compute_cal_total_membership",
string="Total membership")
user_id = fields.Many2one('res.users', copy=False, string='User',
ondelete="cascade")
email = fields.Char(copy=False)
document_ids = fields.One2many(
comodel_name='project.document',
inverse_name="partner_id",
string='Documents',
)
document_opposite_ids = fields.One2many(
comodel_name='project.document.opposite',
inverse_name='partner_id',
string='Opposite Party Documents',
)
document_case_ids = fields.One2many(
comodel_name='project.document.case',
inverse_name='partner_id',
string='Case Related Documents',
)
docuemnt_other_ids = fields.One2many(
comodel_name='project.document.other',
inverse_name='partner_id',
string='Other Documents',
)
membership_number = fields.Char(
string='Membership No',
default='New'
)
account_manager_id = fields.Many2one(
comodel_name='res.users',
string='Account Manager',
)
analytic_id = fields.Many2one(
comodel_name='account.analytic.account',
string="Home Club"
)
home_club = fields.Char(
string='Home Clubs',
)
nationality_id = fields.Many2one(
comodel_name='res.country',
string='Nationality',
)
marketing_source = fields.Char(
string='Marketing Source',
)
referred_by_id = fields.Many2one(
comodel_name='res.users',
string='Referred By',
)
emirate_number = fields.Char(
string='Emirates ID',
)
passport_number = fields.Char(
string='Passport Number',
)
credit_card_ids = fields.One2many(
comodel_name='res.partner.credit.card',
inverse_name='partner_id',
string='Credit Cards',
)
def unlink(self):
for rec in self:
user_id = rec.user_id
rec.user_id = False
user_id.unlink()
return super(MemberDetail, self).unlink()
@api.model
def inactive_rule(self):
rule_rec = self.env.ref('base.res_partner_rule_private_employee',
raise_if_not_found=False)
if rule_rec and rule_rec.active:
rule_rec.active = False
@api.constrains('birthdate')
def _check_birthdate(self):
"""Check birth date of Member."""
if self.birthdate and self.birthdate >= date.today():
raise ValidationError(_("Birth date must be less than today's"
" date."))
def _compute_cal_total_measurement(self):
"""Measurement history count."""
for partner_rec in self:
partner_rec.measurements = \
partner_rec.member_measurement_ids and len(
partner_rec.member_measurement_ids.ids)
def _compute_cal_total_membership(self):
"""Count no of membership of the member."""
for partner_rec in self:
partner_rec.membership = \
partner_rec.member_lines and len(
partner_rec.member_lines.ids)
@api.depends('birthdate')
def _compute_calculate_age(self):
"""Age calculation of member."""
for partner_rec in self:
partner_rec.age = \
partner_rec.birthdate and \
date.today().year - partner_rec.birthdate.year
@api.model
def create(self, vals):
"""Create sequence of member."""
rec = super(MemberDetail, self).create(vals)
if vals.get('name'):
vals['reg_no'] = self.env[
'ir.sequence'].next_by_code('res.partner')
if vals.get('is_member'):
if rec.membership_number=='New':
rec.membership_number= self.env[
'ir.sequence'].next_by_code('membership.number')
if not self.env['res.users']._context.get('is_create_user'):
rec.user_id = self.env['res.users'].sudo().create({
'name': rec.name,
'login': rec.email,
'partner_id': rec.id,
'password': rec.company_id.default_password or '',
'groups_id': [(6, 0, [self.env.ref(
'gym.group_gym_member').id])]
}).id
return rec
def open_user(self):
"""
This Method is used to Open User from member record.
@param self: The object pointer
"""
# Created res users in open
return {
'view_type': 'form',
'view_id': self.env.ref('base.view_users_form').id,
'view_mode': 'form',
'res_model': 'res.users',
'res_id': self.user_id.id,
'type': 'ir.actions.act_window'
}
class BodyMeasurement(models.Model):
"""Body Measurement of the Member."""
_name = 'body.measurement'
_description = "Body Measurement"
_rec_name = 'partner_id'
partner_id = fields.Many2one('res.partner', 'Member')
date = fields.Date('Date', required=True)
neck = fields.Float('Neck')
umo_neck_id = fields.Many2one(
'uom.uom', string='Measurement Unit',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
chest = fields.Float('Chest')
umo_chest_id = fields.Many2one(
'uom.uom', string='Measurement Unit for Chest',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
biceps = fields.Float('Biceps')
umo_biceps_id = fields.Many2one(
'uom.uom', string='Measurement Unit Biceps',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
waist = fields.Float('Waist')
umo_waist_id = fields.Many2one(
'uom.uom', string='Measurement Unit Waist',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
hips = fields.Float('Hips')
umo_hips_id = fields.Many2one(
'uom.uom', string='Measurement Unit Hips',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
thigh = fields.Float('Thighs')
umo_thigh_id = fields.Many2one(
'uom.uom', string='Measurement Unit Thigh',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
calf = fields.Float('Calf')
umo_calf_id = fields.Many2one(
'uom.uom', string='Measurement Unit Calf',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
weight = fields.Float('Weight')
umo_weight_id = fields.Many2one(
'uom.uom', string='Measurement Unit Weight',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.product_uom_categ_kgm').id)])
height = fields.Float('Height')
umo_height_id = fields.Many2one(
'uom.uom', string='Measurement Unit Height',
domain=lambda self: [('category_id', '=',
self.env.ref('uom.uom_categ_length').id)])
bmi = fields.Float(
compute='_compute_bmi',
string='BMI',
default=0.0,
help='Used for Body mass index Calculation')
bmr = fields.Float(string='BMR', compute='_compute_bmr',
help='Used for Body Metabolic rate Calculation')
image_128 = fields.Binary(
related='partner_id.image_128',
)
@api.model
def default_get(self, fields):
res = super(BodyMeasurement, self).default_get(fields)
height_uom = self.env.user.company_id and\
self.env.user.company_id.default_umo_of_height_id
weight_uom = self.env.user.company_id and\
self.env.user.company_id.default_umo_of_weight_id
body_pary_uom = self.env.user.company_id and\
self.env.user.company_id.default_umo_of_measure_id
res.update({
'umo_weight_id': weight_uom.id,
'umo_height_id': height_uom.id,
'umo_calf_id': body_pary_uom.id,
'umo_thigh_id': body_pary_uom.id,
'umo_hips_id': body_pary_uom.id,
'umo_waist_id': body_pary_uom.id,
'umo_biceps_id': body_pary_uom.id,
'umo_chest_id': body_pary_uom.id,
'umo_neck_id': body_pary_uom.id,
})
return res
@api.depends('height', 'weight')
def _compute_bmi(self):
"""Calculation of the Body mass index."""
bmi = 0
for rec in self.filtered(
lambda rec: rec.height and rec.weight):
bmi = rec.weight / (rec.height * rec.height)
self.bmi = bmi
@api.depends('height', 'weight', 'partner_id.age')
def _compute_bmr(self):
"""Calculation of the Basal metabolic rate."""
bmr = 0
for measurement_rec in self.filtered(
lambda measurement_rec: measurement_rec.height and
measurement_rec.weight):
bmr = 66.47 + (13.75 * measurement_rec.weight) \
+ (5.0 * measurement_rec.height) \
- (6.75 * measurement_rec.partner_id.age)
self.bmr = bmr
class BodyPart(models.Model):
_name = 'body.part'
_description = "Body Part"
name = fields.Char('Body part')
class PedoMeter(models.Model):
"""Model for pedo meter."""
_name = 'pedo.meter'
_description = "Pedo Meter"
partner_id = fields.Many2one('res.partner', 'Pedometer')
date = fields.Date('Date', required=True)
steps = fields.Integer('Steps', required=True)