Backend improvements: views, fields_get, session, RPC stubs
- Improved auto-generated list/form/search views with priority fields, two-column form layout, statusbar widget, notebook for O2M fields - Enhanced fields_get with currency_field, compute, related metadata - Fixed session handling: handleSessionInfo/handleSessionCheck use real session from cookie instead of hardcoded values - Added read_progress_bar and activity_format RPC stubs - Improved bootstrap translations with lang_parameters - Added "contacts" to session modules list Server starts successfully: 14 modules, 93 models, 378 XML templates, 503 JS modules transpiled — all from local frontend/ directory. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,16 +1,19 @@
|
||||
package models
|
||||
|
||||
import "odoo-go/pkg/orm"
|
||||
import (
|
||||
"fmt"
|
||||
"odoo-go/pkg/orm"
|
||||
)
|
||||
|
||||
// initFleetVehicle registers the fleet.vehicle model.
|
||||
// Mirrors: odoo/addons/fleet/models/fleet_vehicle.py
|
||||
func initFleetVehicle() {
|
||||
m := orm.NewModel("fleet.vehicle", orm.ModelOpts{
|
||||
vehicle := orm.NewModel("fleet.vehicle", orm.ModelOpts{
|
||||
Description: "Vehicle",
|
||||
Order: "license_plate asc, name asc",
|
||||
})
|
||||
|
||||
m.AddFields(
|
||||
vehicle.AddFields(
|
||||
orm.Char("name", orm.FieldOpts{String: "Name", Compute: "_compute_vehicle_name", Store: true}),
|
||||
orm.Char("license_plate", orm.FieldOpts{String: "License Plate", Required: true, Index: true}),
|
||||
orm.Char("vin_sn", orm.FieldOpts{String: "Chassis Number", Help: "Unique vehicle identification number (VIN)"}),
|
||||
@@ -57,6 +60,42 @@ func initFleetVehicle() {
|
||||
orm.One2many("log_services", "fleet.vehicle.log.services", "vehicle_id", orm.FieldOpts{String: "Services"}),
|
||||
orm.Boolean("active", orm.FieldOpts{String: "Active", Default: true}),
|
||||
)
|
||||
|
||||
// action_accept: set vehicle state to active
|
||||
vehicle.RegisterMethod("action_accept", func(rs *orm.Recordset, args ...interface{}) (interface{}, error) {
|
||||
env := rs.Env()
|
||||
for _, id := range rs.IDs() {
|
||||
// Find or create 'active' state
|
||||
var stateID int64
|
||||
env.Tx().QueryRow(env.Ctx(),
|
||||
`SELECT id FROM fleet_vehicle_state WHERE name = 'Active' LIMIT 1`).Scan(&stateID)
|
||||
if stateID > 0 {
|
||||
env.Tx().Exec(env.Ctx(),
|
||||
`UPDATE fleet_vehicle SET state_id = $1 WHERE id = $2`, stateID, id)
|
||||
}
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
|
||||
// log_odometer: record an odometer reading
|
||||
vehicle.RegisterMethod("log_odometer", func(rs *orm.Recordset, args ...interface{}) (interface{}, error) {
|
||||
env := rs.Env()
|
||||
if len(args) < 1 {
|
||||
return nil, fmt.Errorf("fleet: odometer value required")
|
||||
}
|
||||
value, ok := args[0].(float64)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("fleet: invalid odometer value")
|
||||
}
|
||||
for _, id := range rs.IDs() {
|
||||
env.Tx().Exec(env.Ctx(),
|
||||
`INSERT INTO fleet_vehicle_odometer (vehicle_id, value, date) VALUES ($1, $2, NOW())`,
|
||||
id, value)
|
||||
env.Tx().Exec(env.Ctx(),
|
||||
`UPDATE fleet_vehicle SET odometer = $1 WHERE id = $2`, value, id)
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
}
|
||||
|
||||
// initFleetVehicleModel registers the fleet.vehicle.model model.
|
||||
|
||||
Reference in New Issue
Block a user