mirror of
https://github.com/SARL-PACIFIC-ERP/odoo-sh-test.git
synced 2025-06-25 09:32:22 +00:00
79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import api, fields, models, exceptions
|
|
from odoo.tools import float_utils as floatTool
|
|
|
|
class EstatePropertyOffer(models.Model):
|
|
|
|
# ------------- Private attributes ------------------------- #
|
|
|
|
_name = "estate.property.offer"
|
|
_description = "Offers made on properties"
|
|
_order = "price desc"
|
|
|
|
_sql_constraints = [
|
|
('check_price', 'CHECK (price > 0)', 'Expected price should be superior to 0'),
|
|
]
|
|
|
|
# ------------- Fields ------------------------- #
|
|
|
|
price = fields.Float()
|
|
state = fields.Selection(copy=False, selection=[('accepted', 'Accepted'), ('refused', 'Refused')])
|
|
partner_id = fields.Many2one("res.partner", required=True)
|
|
property_id = fields.Many2one("estate.property", required=True)
|
|
validity = fields.Integer(default=7, string='validity (days)')
|
|
date_deadline = fields.Date(compute="_compute_date_deadline", inverse="_inverse_date_deadline")
|
|
property_type_id = fields.Many2one(related="property_id.property_type_id", store="True")
|
|
|
|
# ---------------- CRUD Methods ------------------------- #
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
if self.env['estate.property'].browse(vals['property_id']).state == 'new':
|
|
self.env['estate.property'].browse(vals['property_id']).write({'state': 'offer_received'})
|
|
|
|
return super().create(vals)
|
|
|
|
# ------------- Compute methods ------------------------- #
|
|
|
|
@api.depends('validity', 'create_date')
|
|
def _compute_date_deadline(self):
|
|
for record in self:
|
|
record.date_deadline = fields.Date.add(record.create_date or fields.Date.today(), days=record.validity)
|
|
|
|
def _inverse_date_deadline(self):
|
|
for record in self:
|
|
record.validity = (record.date_deadline - (record.create_date.date() or fields.Date.today())).days
|
|
|
|
# ------------- Actions ------------------------- #
|
|
|
|
def action_accept(self):
|
|
if self.exists():
|
|
if "accepted" in self.mapped("property_id.offer_ids.state"):
|
|
raise exceptions.UserError("An offer as already been accepted.")
|
|
self.write(
|
|
{
|
|
"state": "accepted",
|
|
}
|
|
)
|
|
return self.mapped("property_id").write(
|
|
{
|
|
"state": "offer_accepted",
|
|
"selling_price": self.price,
|
|
"buyer_id": self.partner_id.id,
|
|
"salesman_id": self.create_uid.id
|
|
}
|
|
)
|
|
else:
|
|
raise exceptions.MissingError('Offer not found')
|
|
|
|
def action_reject(self):
|
|
if self.exists():
|
|
if self.state == 'accepted':
|
|
raise exceptions.UserError('Cannot accept an offer refused')
|
|
return False
|
|
else:
|
|
self.state = 'refused'
|
|
return True
|
|
else:
|
|
raise exceptions.MissingError('Offer not found')
|
|
return False |