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.
 
 
 
 
 

107 lines
4.5 KiB

""""Pos membership"""
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri v (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from uuid import uuid4
from odoo import api, fields, models, _
from odoo import exceptions
from datetime import datetime, timedelta
class MembershipCard(models.Model):
"""Creating membership card for the customers"""
_name = 'membership.card'
_inherit = 'mail.thread'
_description = 'Membership Card'
_rec_name = 'membership_id'
membership_id = fields.Many2one('customer.membership', string='Membership',
required=True, help='Membership id')
customer_id = fields.Many2one('res.partner', string="Customer",
help='The customer')
issue_date = fields.Date(string="Issue Date", help='Issue date',
default=fields.Date.today())
validity = fields.Float(string='Validity(days)',
compute='_compute_validity',
help='Validity of membership card')
expiry_date = fields.Date(string="Exp Date", default=fields.Date.today(),
help='Expiry date of membership card')
code = fields.Char(string="Code", help='Unique code for the card',
readonly=True)
membership_code_button = fields.Boolean(default=False, string="Visibility",
help='The code generation button visibility')
discount = fields.Float(string='Discount(%)', help='Discount percentage amount')
state = fields.Selection(
[('draft', 'Draft'), ('confirm', 'Confirm'), ('cancel', 'Cancel')],
default='draft', string='State', help='State of the membership')
@api.onchange('expiry_date')
def _onchange_expiry_date(self):
"""This is used to check the expiry date of the membership"""
if self.expiry_date < fields.Date.today():
raise exceptions.ValidationError(_(
"Please select a Valid Date."
))
def generate_code(self):
"""Used to generate the code for membership card"""
self.code = '550' + str(uuid4())[7:-18]
self.membership_code_button = True
def action_membership_confirm(self):
"""Used to confirm the membership"""
self.state = 'confirm'
def action_membership_canceled(self):
"""Cancels the membership"""
self.state = 'cancel'
def _compute_validity(self):
"""Computes the validity"""
fmt = '%Y-%m-%d'
date_from = datetime.strptime(str(self.issue_date), fmt)
date_to = datetime.strptime(str(self.expiry_date), fmt)
duration = str((date_to - date_from).days)
self.validity = duration
def membership_card_check(self, customer_input):
"""Checks the validity of the membership card"""
val = self.env['membership.card'].search(
[('customer_id.id', '=', customer_input[0]['customer']),
('code', '=', customer_input[0]['customerInput']),
('expiry_date', '>', fields.Date.today()),
('state', '=', 'confirm')])
membership_discount = self.env['membership.card'].sudo().search([(
'customer_id.id', '=', customer_input[0]['customer'])]).mapped(
'discount')
membership_product = int(
self.env['ir.config_parameter'].sudo().get_param(
'pos_membership_product_id'))
if val:
return {
'customer_name': val.customer_id.name,
'membership': val.membership_id.name,
'discount': membership_discount[0],
'product_id': membership_product,
}
else:
return 0