Compare commits
2 Commits
14-product
...
14.0-add-s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c7172a5c7f | ||
|
|
5023839119 |
2
stock_location_simple/__init__.py
Normal file
2
stock_location_simple/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import models
|
||||
from .hooks import post_init_hook
|
||||
14
stock_location_simple/__manifest__.py
Normal file
14
stock_location_simple/__manifest__.py
Normal file
@@ -0,0 +1,14 @@
|
||||
# Copyright 2024 Akretion
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
"name": "Stock Location Simple",
|
||||
"summary": "Simplified stock.location menu",
|
||||
"version": "14.0.1.0.0",
|
||||
"license": "AGPL-3",
|
||||
"author": "Akretion",
|
||||
"website": "http://akretion.com",
|
||||
"depends": ["stock"],
|
||||
"data": ["views/stock_location_views.xml"],
|
||||
"post_init_hook": "post_init_hook",
|
||||
}
|
||||
10
stock_location_simple/hooks.py
Normal file
10
stock_location_simple/hooks.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# Copyright 2021 Akretion (https://www.akretion.com).
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import SUPERUSER_ID, api
|
||||
|
||||
|
||||
def post_init_hook(cr, registry):
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
env["stock.warehouse"].search([])._check_locations_created_by_warehouse()
|
||||
2
stock_location_simple/models/__init__.py
Normal file
2
stock_location_simple/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import stock_location
|
||||
from . import stock_warehouse
|
||||
10
stock_location_simple/models/stock_location.py
Normal file
10
stock_location_simple/models/stock_location.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# Copyright 2024 Akretion
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
|
||||
|
||||
class StockLocation(models.Model):
|
||||
_inherit = "stock.location"
|
||||
|
||||
is_created_by_warehouse = fields.Boolean()
|
||||
34
stock_location_simple/models/stock_warehouse.py
Normal file
34
stock_location_simple/models/stock_warehouse.py
Normal file
@@ -0,0 +1,34 @@
|
||||
# Copyright 2024 Akretion
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
import pprint
|
||||
|
||||
|
||||
class StockWarehouse(models.Model):
|
||||
_inherit = "stock.warehouse"
|
||||
|
||||
def _get_location_fields(self):
|
||||
location_fields = []
|
||||
|
||||
for field, definition in self.fields_get().items():
|
||||
if definition.get("relation") == "stock.location":
|
||||
location_fields.append(field)
|
||||
|
||||
return location_fields
|
||||
|
||||
def _check_locations_created_by_warehouse(self):
|
||||
location_ids = self.env["stock.location"]
|
||||
location_fields = self._get_location_fields()
|
||||
|
||||
for rec in self:
|
||||
for field in location_fields:
|
||||
location_ids |= getattr(rec, field)
|
||||
|
||||
location_ids.write({"is_created_by_warehouse": True})
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
res = super().create(vals)
|
||||
res._check_locations_created_by_warehouse()
|
||||
return res
|
||||
1
stock_location_simple/tests/__init__.py
Normal file
1
stock_location_simple/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import test_stock_location_simple
|
||||
19
stock_location_simple/tests/test_stock_location_simple.py
Normal file
19
stock_location_simple/tests/test_stock_location_simple.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Copyright 2018-2022 Camptocamp
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo.tests import TransactionCase
|
||||
|
||||
|
||||
class TestStockLocationSimple(TransactionCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.env["stock.warehouse"].search([])._check_locations_created_by_warehouse()
|
||||
|
||||
def test_location_checked_at_warehouse_creation(self):
|
||||
warehouse = self.env["stock.warehouse"].create({"name": "Test", "code": "TEST"})
|
||||
self.assertTrue(warehouse.view_location_id.is_created_by_warehouse)
|
||||
|
||||
def test_native_location_checked(self):
|
||||
location_id = self.env.ref("stock.warehouse0").view_location_id
|
||||
|
||||
self.assertTrue(location_id.is_created_by_warehouse)
|
||||
90
stock_location_simple/views/stock_location_views.xml
Normal file
90
stock_location_simple/views/stock_location_views.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 Akretion
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
|
||||
|
||||
<odoo>
|
||||
|
||||
<record id="stock_location_simple_form_view" model="ir.ui.view">
|
||||
<field name="name">stock.location.simple.form</field>
|
||||
<field name="model">stock.location</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Stock Location">
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button string="Current Stock"
|
||||
class="oe_stat_button"
|
||||
icon="fa-cubes" name="%(stock.location_open_quants)d" type="action"/>
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
<label for="location_id" class="oe_edit_only"/>
|
||||
<h2>
|
||||
<field name="location_id" required="1" domain="[('usage', '=', 'internal')]"/>
|
||||
</h2>
|
||||
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
|
||||
<field name="comment" placeholder="External note..."/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_location_simple_tree_view" model="ir.ui.view">
|
||||
<field name="name">stock.location.simple.tree</field>
|
||||
<field name="model">stock.location</field>
|
||||
<field name="arch" type="xml">
|
||||
<!-- TODO: decoration info if lockdown, if view, if linked to a warehouse -->
|
||||
<tree string="Stock Location">
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="complete_name" string="Location"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_location_simple_act_window" model="ir.actions.act_window">
|
||||
<field name="name">Stock Location</field>
|
||||
<field name="res_model">stock.location</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[("usage", "=", "internal")]</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_location_simple_act_window_tree" model="ir.actions.act_window.view" >
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="stock_location_simple_tree_view"/>
|
||||
<field name="act_window_id" ref="stock_location_simple_act_window"/>
|
||||
</record>
|
||||
|
||||
<record id="stock_location_simple_act_window_form" model="ir.actions.act_window.view" >
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="stock_location_simple_form_view"/>
|
||||
<field name="act_window_id" ref="stock_location_simple_act_window"/>
|
||||
</record>
|
||||
|
||||
<record id="stock_location_simple_menu" model="ir.ui.menu">
|
||||
<field name="name">Locations</field>
|
||||
<field name="parent_id" ref="stock.menu_warehouse_config"/>
|
||||
<field name="action" ref="stock_location_simple_act_window"/>
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="groups_id" eval="[(4, ref('stock.group_stock_multi_locations'))]" />
|
||||
</record>
|
||||
|
||||
<!-- Modify name and groups_id on original stock.location menu -->
|
||||
<record id="stock.menu_action_location_form" model="ir.ui.menu">
|
||||
<field name="name">Locations Technical</field>
|
||||
<field name="parent_id" ref="stock.menu_warehouse_config"/>
|
||||
<field name="action" ref="stock.action_location_form"/>
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="groups_id" eval="[(4, ref('base.group_erp_manager'))]" />
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user