mirror of
https://gitlab.com/sonalarora/tra_backend.git
synced 2025-12-17 10:19:09 +02:00
74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
# See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
"""Imported sale order model."""
|
|
|
|
_inherit = 'sale.order'
|
|
|
|
start_date = fields.Date('Start Date')
|
|
end_date = fields.Date('End Date')
|
|
membership = fields.Boolean(string='Membership',
|
|
help='Check if the Customer Wants to Buy '
|
|
'membership.')
|
|
|
|
@api.model
|
|
def create(self, values):
|
|
rec = super(SaleOrder, self).create(values)
|
|
if rec.membership and not rec.partner_id.is_member:
|
|
rec.partner_id.is_member = True
|
|
rec.partner_id.membership_number = self.env[
|
|
'ir.sequence'].next_by_code('membership.number')
|
|
return rec
|
|
|
|
def write(self, values):
|
|
for rec in self:
|
|
if values.get('partner_id'):
|
|
partner_id =\
|
|
self.env['res.partner'].browse(values.get('partner_id'))
|
|
else:
|
|
partner_id = rec.partner_id
|
|
if values.get('membership', rec.membership) and not \
|
|
partner_id.is_member:
|
|
partner_id.is_member = True
|
|
return super(SaleOrder, self).write(values)
|
|
|
|
@api.constrains('order_line', 'membership')
|
|
def _check_order_line_membership(self):
|
|
"""Membership product constraint."""
|
|
if self.membership and len([rec for rec in self.order_line.filtered(
|
|
lambda rec:
|
|
rec.product_id.product_tmpl_id.is_membership)]) > 1:
|
|
raise ValidationError(
|
|
_("You can\'t select more than one membership product."))
|
|
|
|
@api.constrains('start_date', 'end_date')
|
|
def _check_date(self):
|
|
"""Membership date constraint."""
|
|
if self.membership and self.start_date > self.end_date:
|
|
raise ValidationError(
|
|
_("End date must be greater than start date"))
|
|
|
|
def action_confirm(self):
|
|
"""Create membership line when confirm sale order."""
|
|
res = super(SaleOrder, self).action_confirm()
|
|
for order in self:
|
|
if order.membership and order.state == 'sale' and not \
|
|
order._context.get('is_membership_created'):
|
|
for line_rec in order.order_line:
|
|
if line_rec.product_id.product_tmpl_id.is_membership:
|
|
membership_rec = \
|
|
self.env['membership.membership_line'].create({
|
|
'partner': order.partner_id.id,
|
|
'date': order.start_date,
|
|
'end_date': order.end_date,
|
|
'member_price': line_rec.price_subtotal,
|
|
'membership_id': line_rec.product_id.id,
|
|
'sale_order_id': order.id,
|
|
})
|
|
membership_rec.action_confirm()
|
|
return res
|