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.
108 lines
4.4 KiB
108 lines
4.4 KiB
# -*- coding: utf-8 -*-
|
|
###################################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
|
|
# Author:LINTO CT(<https://www.cybrosys.com>)
|
|
|
|
# This program is free software: you can modify
|
|
# it under the terms of the GNU Affero General Public License (AGPL) as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# 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 for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
###################################################################################
|
|
import string
|
|
import random
|
|
from odoo import models, fields, api, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class GiftVoucherPos(models.Model):
|
|
_name = 'gift.voucher.pos'
|
|
|
|
name = fields.Char(string="Name", required=True)
|
|
voucher_type = fields.Selection(
|
|
selection=[
|
|
('product', 'Product'),
|
|
('category', 'POS Category'),
|
|
('all', 'All Products'),
|
|
], string="Applicable on ", default='product'
|
|
)
|
|
product_id = fields.Many2one('product.product', string="Product")
|
|
product_categ = fields.Many2one('pos.category', string="Product Category")
|
|
min_value = fields.Integer(string="Minimum Voucher Value", required=True)
|
|
max_value = fields.Integer(string="Maximum Voucher Value", required=True)
|
|
expiry_date = fields.Date(string="Expiry Date", required=True, help='The expiry date of Voucher.')
|
|
|
|
|
|
class GiftCouponPos(models.Model):
|
|
_name = 'gift.coupon.pos'
|
|
|
|
def get_code(self):
|
|
size = 7
|
|
chars = string.ascii_uppercase + string.digits
|
|
return ''.join(random.choice(chars) for _ in range(size))
|
|
|
|
_sql_constraints = [
|
|
('name_uniq', 'unique (code)', "Code already exists !"),
|
|
]
|
|
|
|
name = fields.Char(string="Name", required=True)
|
|
code = fields.Char(string="Code", default=get_code)
|
|
voucher = fields.Many2one('gift.voucher.pos', string="Voucher", required=True)
|
|
start_date = fields.Date(string="Start Date")
|
|
end_date = fields.Date(string="End Date")
|
|
partner_id = fields.Many2one('res.partner', string="Limit to a Single Partner", help='Limit to a Single Partner')
|
|
limit = fields.Integer(string="Total Available For Each User", default=1, help='Total Available For Each User')
|
|
total_avail = fields.Integer(string="Total Available", default=1)
|
|
|
|
voucher_val = fields.Float(string="Voucher Value", help='The amount for the voucher.')
|
|
type = fields.Selection([
|
|
('fixed', 'Fixed Amount'),
|
|
('percentage', 'Percentage'),
|
|
], store=True, default='fixed')
|
|
|
|
@api.onchange('voucher_val')
|
|
def check_val(self):
|
|
if self.voucher_val > self.voucher.max_value or self.voucher_val < self.voucher.min_value:
|
|
raise UserError(_("Please check the voucher value"))
|
|
|
|
|
|
class CouponPartnerPos(models.Model):
|
|
_name = 'partner.coupon.pos'
|
|
|
|
partner_id = fields.Many2one('res.partner', string="Partner")
|
|
coupon_pos = fields.Char(string="Coupon Applied")
|
|
number_pos = fields.Integer(string="Number of Times Used")
|
|
|
|
def update_history(self, vals):
|
|
if vals:
|
|
h_obj = self.env['partner.coupon.pos']
|
|
history = h_obj.search([('coupon_pos', '=', vals['coupon_pos']),('partner_id', '=', vals['partner_id'])], limit=1)
|
|
coupon = self.env['gift.coupon.pos'].search([('code', '=', vals['coupon_pos'])], limit=1)
|
|
if history:
|
|
history.number_pos += 1
|
|
coupon.total_avail -= 1
|
|
else:
|
|
coupon.total_avail -= 1
|
|
rec = {
|
|
'partner_id': vals['partner_id'],
|
|
'number_pos': 1,
|
|
'coupon_pos': vals['coupon_pos']
|
|
}
|
|
h_obj.create(rec)
|
|
return True
|
|
|
|
|
|
class PartnerExtendedPos(models.Model):
|
|
_inherit = 'res.partner'
|
|
|
|
applied_coupon_pos = fields.One2many('partner.coupon.pos', 'partner_id', string="Coupons Applied From POS")
|
|
|