87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
# Part of the Fusion Plating product family.
|
|
|
|
from odoo import fields, models
|
|
|
|
|
|
class FpRouteStop(models.Model):
|
|
"""A single stop on a route.
|
|
|
|
A stop is one of: pickup, delivery, transfer (between facilities),
|
|
fuel, or break. Pickup and delivery stops link back to the source
|
|
records so the driver can open them from the route. Non-transactional
|
|
stops (fuel, break) just carry an address and a planned time.
|
|
"""
|
|
_name = 'fusion.plating.route.stop'
|
|
_description = 'Fusion Plating — Route Stop'
|
|
_order = 'route_id, sequence, id'
|
|
|
|
route_id = fields.Many2one(
|
|
'fusion.plating.route',
|
|
string='Route',
|
|
required=True,
|
|
ondelete='cascade',
|
|
)
|
|
sequence = fields.Integer(
|
|
string='Sequence',
|
|
default=10,
|
|
)
|
|
stop_type = fields.Selection(
|
|
[
|
|
('pickup', 'Pickup'),
|
|
('delivery', 'Delivery'),
|
|
('transfer', 'Facility Transfer'),
|
|
('fuel', 'Fuel'),
|
|
('break', 'Break'),
|
|
],
|
|
string='Stop Type',
|
|
default='pickup',
|
|
required=True,
|
|
)
|
|
pickup_request_id = fields.Many2one(
|
|
'fusion.plating.pickup.request',
|
|
string='Pickup Request',
|
|
)
|
|
delivery_id = fields.Many2one(
|
|
'fusion.plating.delivery',
|
|
string='Delivery',
|
|
)
|
|
address_id = fields.Many2one(
|
|
'res.partner',
|
|
string='Address',
|
|
)
|
|
planned_time = fields.Datetime(
|
|
string='Planned Time',
|
|
)
|
|
actual_time = fields.Datetime(
|
|
string='Actual Time',
|
|
)
|
|
state = fields.Selection(
|
|
[
|
|
('pending', 'Pending'),
|
|
('arrived', 'Arrived'),
|
|
('completed', 'Completed'),
|
|
('skipped', 'Skipped'),
|
|
],
|
|
string='Status',
|
|
default='pending',
|
|
required=True,
|
|
)
|
|
notes = fields.Text(
|
|
string='Notes',
|
|
)
|
|
|
|
def action_mark_arrived(self):
|
|
self.write({
|
|
'state': 'arrived',
|
|
'actual_time': fields.Datetime.now(),
|
|
})
|
|
|
|
def action_mark_completed(self):
|
|
self.write({'state': 'completed'})
|
|
|
|
def action_mark_skipped(self):
|
|
self.write({'state': 'skipped'})
|