Untitled
unknown
plain_text
2 years ago
7.0 kB
5
Indexable
# -*- coding: utf-8 -*- ################################################################################# # Author : Webkul Software Pvt. Ltd. (<https://webkul.com/>:wink: # Copyright(c): 2015-Present Webkul Software Pvt. Ltd. # All Rights Reserved. # # # # This program is copyright property of the author mentioned above. # You can`t redistribute it and/or modify it. # # # You should have received a copy of the License along with this program. # If not, see <https://store.webkul.com/license.html/>; ################################################################################# import logging _logger = logging.getLogger(__name__) from odoo import api, fields, models class MLMTransaction(models.Model): _name = 'mlm.transaction' _description = "MLM Transaction Model" name = fields.Char(string='Name', readonly = True) partner_id = fields.Many2one(string="Affiliate", comodel_name="res.partner", domain="[('is_affiliate','=',True)]", required= True) credit = fields.Float(string="Credit") debit = fields.Float(string="Debit") summary = fields.Char(string="Transaction Summary") active = fields.Boolean('Active', default=True, help="If unchecked, it will allow you to hide the mlm transaction without removing it.") state = fields.Selection(string="Transaction State", selection=[('pending','Pending'),('approve','Approved'),('cancel','Canceled'),('invoice','Invoiced'),('paid','Paid')], default='pending') bonus_type = fields.Selection(string="Bonus Type", selection=[('fcb','First Child Bonus'),('lcb','Level Completion Bonus'),('level_commission','Level Commission')], required= True) tran_invoice_id = fields.Many2one(string="Invoice Id", comodel_name="account.move") def transaction_approve(self): self.state = 'approve' def transaction_cancel(self): self.state = 'cancel' def mlm_bonus_transactions(self): mlm_config = self.env['affiliate.program'].get_mlm_configuration() root = mlm_config.get('root') root_mlm_tree_data = root.mlm_tree(root) aff_ids = [] for aff in root_mlm_tree_data.get('aff_ids'): if aff.sudo().bought_membership == True: aff_ids.append(aff.sudo()) # aff_ids = list(filter(lambda aff_id: aff_id.bought_membership == True, root_mlm_tree_data.get('aff_ids'))) self.add_bonus_transaction(root, root_mlm_tree_data, mlm_config) for aff_id in aff_ids: mlm_tree_data = aff_id.mlm_tree(aff_id) self.add_bonus_transaction(aff_id, mlm_tree_data, mlm_config) @api.model def create(self, vals): vals['name'] = self.env['ir.sequence'].next_by_code('mlm.transaction') new_tran = super(MLMTransaction,self).create(vals) return new_tran def _get_amt(self, amt, matrix_type, product): if matrix_type == 'p': amt = product.lst_price * amt/100 return amt @api.model def add_bonus_transaction(self, partner_id, mlm_tree_data, mlm_config = {}): vals={} if not mlm_config: mlm_config = self.env['affiliate.program'].get_mlm_configuration() if partner_id.provide_level_commission: parent_id = partner_id.parent_aff # for level_commission in mlm_config.get('level_commission_ids',[]): # if parent_id and level_commission: # vals.update({ # 'credit': self._get_amt(level_commission.amount, level_commission.matrix_type, mlm_config.get('mlm_membership_product')), # 'summary': "Level %s Commission for the joining of %s[ %s ]"%(level_commission.level, partner_id.name, partner_id.res_affiliate_key), # 'bonus_type': "level_commission", # 'name': parent_id.name, # 'partner_id':parent_id.id # }) # # self.create(vals) # parent_id = parent_id.parent_aff # else: # break level_commissions = mlm_config.get('level_commission_ids',False) max_commission_level = level_commissions and max(level_commissions) or 0 parent_level = 1 while parent_id and parent_level <= max_commission_level: if parent_level in level_commissions: vals.update({ 'credit': self._get_amt(level_commissions[parent_level].amount, level_commissions[parent_level].matrix_type, mlm_config.get('mlm_membership_product')), 'summary': "Level %s Commission for the joining of %s[ %s ]"%(parent_level, partner_id.name, partner_id.res_affiliate_key), 'bonus_type': "level_commission", 'name': parent_id.name, 'partner_id':parent_id.id }) self.create(vals) parent_id = parent_id.parent_aff parent_level += 1 partner_id.provide_level_commission = False if mlm_config.get('allow_fcb_bonus'): if mlm_tree_data.get('apply_first_child_bonus') and not partner_id.is_first_child_bonus_applied and not 'fcb' in [t.bonus_type for t in partner_id.transaction_ids]: partner_id.is_first_child_bonus_applied = True vals.update({ 'name': partner_id.name, 'partner_id':partner_id.id, 'credit': self._get_amt(mlm_config.get('first_child_bonus_amount'), mlm_config.get('fcb_matrix_type'), mlm_config.get('mlm_membership_product')), 'summary': "First Child Bonus for the joining of %s[ %s ]"%(partner_id.left_child_aff.name, partner_id.left_child_aff.res_affiliate_key), 'bonus_type': "fcb", }) self.create(vals) if mlm_config.get('allow_lcb_bonus'): if mlm_tree_data.get('completed_levels') and partner_id.bonus_level < mlm_tree_data.get('completed_levels')[-1]: completed_levels = mlm_tree_data.get('completed_levels')[mlm_tree_data.get('completed_levels').index(partner_id.bonus_level) + 1 :] amt = self._get_amt(mlm_config.get('level_bonus_amount'), mlm_config.get('lcb_matrix_type'), mlm_config.get('mlm_membership_product')) for completed_level in completed_levels: partner_id.bonus_level = completed_level vals.update({ 'name': partner_id.name, 'partner_id':partner_id.id, 'credit': amt, 'summary': "Level " +str(completed_level)+"Completion Bonus." , 'bonus_type': "lcb", }) self.create(vals)
Editor is loading...