You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

102 lines
4.7 KiB

# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
from odoo import api, fields, models
class BloodBank(models.Model):
"""Class holding Blood bank details"""
_name = 'blood.bank'
_description = "Blood Bank"
partner_id = fields.Many2one('res.partner',
string='Donor Name',
domain=[('patient_seq', 'not in',
['New', 'Employee', 'User'])],
help='Name of the blood donor',
required=True)
name = fields.Char(string='Sequence',
help='Sequence number indicating the blood bank',
index=True,
default=lambda self: 'New')
date = fields.Date(string='Date', help='Blood donating date',
default=fields.date.today())
blood_type = fields.Selection([('a_positive', 'A+'),
('a_negative', 'A-'),
('b_positive', 'B+'), ('b_negative', 'B-'),
('o_positive', 'O+'), ('o_negative', '0-'),
('ab_positive', 'AB+'),
('ab_negative', 'AB-')],
string='Blood Group',
help='Choose your blood group', required=True,
group_expand='_group_expand_states')
blood_donation_ids = fields.One2many('blood.donation',
'blood_bank_id',
string='Contra Indications',
help='Lists all the '
'contraindications')
state = fields.Selection([('avail', 'Available'),
('not', 'Unavailable')],
string='State', help='State of the blood donation',
readonly=True, default="avail")
assigned_patient_id = fields.Many2one('res.partner',
string='Receiver',
domain=[('patient_seq', 'not in',
['New', 'Employee',
'User'])],
help='Choose the patient to whom '
'blood is donating')
@api.model
def create(self, vals):
"""Function for creating blood sequence number"""
if vals.get('name', 'New') == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code(
'blood.bank') or 'New'
return super().create(vals)
@api.onchange('partner_id')
def _onchange_partner_id(self):
"""Function for listing all contra indications"""
self.blood_donation_ids = False
self.sudo().write({
'blood_donation_ids': [(0, 0, {
'questions': rec.blood_donation_question})
for rec in
self.env['contra.indication'].sudo().search(
[])]})
def _group_expand_states(self, states, domain, order):
"""Method for expanding all blood groups in kanban view"""
return [key for
key, val in type(self).blood_type.selection]
def action_blood_available(self):
"""Change the state to unavailable"""
self.sudo().write({
'state': 'not'
})
def action_change_availability(self):
"""Cron action for changing the state of the record"""
for rec in self.sudo().search([]):
if rec.date <= fields.Date.subtract(fields.Date.today(), months=1):
rec.state = 'avail'