83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models, fields, api, exceptions
|
|
|
|
|
|
class MklabMarketAction(models.Model):
|
|
_name = 'mklab.marketaction'
|
|
|
|
name = fields.Char(
|
|
string='Название акции',
|
|
compute='_compute_name',
|
|
store=True,
|
|
)
|
|
start_date = fields.Date(string='Дата начала отгрузок', required=True)
|
|
end_date = fields.Date(string='Дата окончания отгрузок', required=True)
|
|
start_sale_date = fields.Date(string='Дата начала продаж на полке', required=True)
|
|
end_sale_date = fields.Date(string='Дата окончания продаж на полке', required=True)
|
|
product_line_ids = fields.One2many(
|
|
comodel_name='mklab.productline',
|
|
inverse_name='action_id',
|
|
string='Продукты',
|
|
)
|
|
partner_line_ids = fields.One2many(
|
|
comodel_name='mklab.partnerline',
|
|
inverse_name='action_id',
|
|
string='Контрагенты',
|
|
)
|
|
|
|
@api.constrains('start_date', 'end_date', 'start_sale_date', 'end_sale_date')
|
|
def _check_dates(self):
|
|
for s in self:
|
|
if s.end_date < s.start_date:
|
|
raise exceptions.ValidationError(
|
|
'Дата начала отгрузок должна быть меньше даты окончания!')
|
|
if s.end_sale_date < s.start_sale_date:
|
|
raise exceptions.ValidationError(
|
|
'Дата начала продаж на полке должна быть меньше даты окончания!')
|
|
|
|
@api.depends('start_date', 'end_date')
|
|
def _compute_name(self):
|
|
for s in self:
|
|
s.name = str(s.start_date) if s.start_date and s.end_date else ''
|
|
|
|
|
|
class MklabProductLine(models.Model):
|
|
_name = 'mklab.productline'
|
|
|
|
action_id = fields.Many2one(
|
|
comodel_name='mklab.marketaction',
|
|
string='Акция',
|
|
index=True,
|
|
)
|
|
product_id = fields.Many2one(
|
|
comodel_name='product.product',
|
|
string='Товар',
|
|
required=True,
|
|
index=True,
|
|
)
|
|
discount_ship = fields.Float(string='Скидка поставки', required=True)
|
|
discount_sale = fields.Float(string='Скидка на полке', required=True)
|
|
expected_growth = fields.Float(
|
|
string='Ожидаемый рост продаж, %',
|
|
required=True,
|
|
default=20,
|
|
)
|
|
|
|
|
|
class MklabPartnerLine(models.Model):
|
|
_name = 'mklab.partnerline'
|
|
|
|
action_id = fields.Many2one(
|
|
comodel_name='mklab.marketaction',
|
|
string='Акция',
|
|
index=True,
|
|
)
|
|
partner_id = fields.Many2one(
|
|
comodel_name='res.partner',
|
|
string='Контрагент',
|
|
required=True,
|
|
index=True,
|
|
)
|
|
pos_qty = fields.Float(string='Процент точек', required=True)
|