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.
 
 

100 lines
2.7 KiB

# Copyright 2020 Tecnativa - David Vidal
# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html
from odoo import api, fields, models
from dateutil.relativedelta import relativedelta
class PartnerRoute(models.Model):
_name = "partner.route"
_description = "Partner Routes"
_inherit = ['mail.thread', 'mail.activity.mixin']
name = fields.Char(required=True)
active = fields.Boolean(default=True)
user_id = fields.Many2one(
comodel_name="res.users",
string="Responsible",
help="Which user is in charge of the route",
)
route_type = fields.Selection(
selection=[
("crm", "CRM"),
("sale", "Sales"),
("delivery", "Delivery"),
("repair", "Repair"),
],
)
interval_unit = fields.Selection(
string="Interval",
selection=[
("days", "Day(s)"),
("weeks", "Week(s)"),
("months", "Month(s)"),
("years", "Year(s)"),
],
default="weeks",
required=True,
)
recurring_interval = fields.Integer(
string="Repeat Every",
required=True,
default=1,
)
next_date = fields.Date(
string="Next route date",
compute="_compute_next_date",
required=True,
readonly=False,
store=True,
default=fields.Date.today(),
)
route_day = fields.Boolean(
string="Applies today",
compute="_compute_route_day",
readonly=True,
)
route_partner_ids = fields.One2many(
comodel_name="partner.route.item",
inverse_name="route_id",
string="Partners",
)
@api.depends("interval_unit", "recurring_interval")
def _compute_next_date(self):
if self.next_date == fields.Date.today():
return
delta = relativedelta(**{self.interval_unit: self.recurring_interval})
self.next_date = fields.Date.today() + delta
@api.depends("next_date")
def _compute_route_day(self):
self.route_day = self.next_date == fields.Date.today()
class PartnerRouteItem(models.Model):
_name = "partner.route.item"
_description = "Route Partners"
_order = "sequence, partner_id"
sequence = fields.Integer()
route_id = fields.Many2one(
comodel_name="partner.route",
)
partner_id = fields.Many2one(
comodel_name="res.partner",
)
street = fields.Char(
related="partner_id.street",
)
city = fields.Char(
related="partner_id.city",
)
zip = fields.Char(
related="partner_id.zip",
)
state_id = fields.Many2one(
related="partner_id.state_id",
)
country_id = fields.Many2one(
related="partner_id.country_id",
)