Parcourir la source

Multi almacen

Sebas il y a 5 ans
commit
fcf1a319bf

+ 6 - 0
__init__.py

@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in module root
+# directory
+##############################################################################
+from . import models

BIN
__init__.pyc


+ 30 - 0
__openerp__.py

@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+{
+    'name': 'Multi Store for Warehouse',
+    'version': '8.0.1.0.0',
+    'category': 'Accounting',
+    'sequence': 14,
+    'summary': '',
+    'author': 'ADHOC SA - Eiru',
+    'website': 'www.adhoc.com.ar',
+    'license': 'AGPL-3',
+    'images': [
+    ],
+    'depends': [
+        'stock',
+        'multi_store',
+        'sale',
+        'purchase',
+        'product'
+    ],
+    'data': [
+        'views/res_store_view.xml',
+        'views/stock_view.xml',
+        'views/product_view.xml',
+        'security/multi_store_security.xml',
+    ],
+    'test': [
+    ],
+    'installable': True,
+    'application': False,
+}

+ 8 - 0
models/__init__.py

@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in module root
+# directory
+##############################################################################
+from . import stock
+from . import res_store
+from . import product

BIN
models/__init__.pyc


+ 22 - 0
models/product.py

@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in module root
+# directory
+##############################################################################
+from openerp import models, fields
+
+class ProductTemplate(models.Model):
+    _inherit = 'product.template'
+
+    store_id = fields.Many2one(
+        'res.store',
+        'Store'
+    )
+
+class ProductPricelist(models.Model):
+    _inherit = 'product.pricelist'
+
+    store_id = fields.Many2one(
+        'res.store',
+        'Store'
+    )

BIN
models/product.pyc


+ 24 - 0
models/res_store.py

@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in module root
+# directory
+##############################################################################
+from openerp import models, fields, api
+
+class ResStore(models.Model):
+    _inherit = "res.store"
+
+    warehouse_ids = fields.One2many(
+        'stock.warehouse',
+        'store_id',
+        'Warehouses'
+    )
+    warehouses_count = fields.Integer(
+        compute='_compute_warehouses_count',
+        string='Warehouses',
+    )
+
+    @api.one
+    @api.depends('warehouse_ids')
+    def _compute_warehouses_count(self):
+        self.warehouses_count = len(self.warehouse_ids)

BIN
models/res_store.pyc


+ 39 - 0
models/stock.py

@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+# For copyright and license notices, see __openerp__.py file in module root
+# directory
+##############################################################################
+from openerp import models, fields
+
+class StockWarehouse(models.Model):
+    _inherit = 'stock.warehouse'
+
+    store_id = fields.Many2one(
+        'res.store',
+        'Store'
+    )
+
+class StockLocation(models.Model):
+    _inherit = 'stock.location'
+
+    store_id = fields.Many2one(
+        'res.store'
+    )
+
+class StockPickingType(models.Model):
+    _inherit = 'stock.picking.type'
+
+    store_id = fields.Many2one(
+        related='warehouse_id.store_id',
+        store=True,
+        readonly=True,
+    )
+
+class StockPicking(models.Model):
+    _inherit = 'stock.picking'
+
+    store_id = fields.Many2one(
+        related='picking_type_id.store_id',
+        store=True,
+        readonly=True,
+    )

BIN
models/stock.pyc


+ 100 - 0
security/multi_store_security.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<openerp>
+    <data noupdate="1">
+        <record id="stock_warehouse_store_rule" model="ir.rule">
+            <field name="name">Warehouse multi-store</field>
+            <field name="model_id" ref="stock.model_stock_warehouse"/>
+            <field name="global" eval="True"/>
+            <field name="domain_force">['|',('store_id','=',False),('store_id','child_of',[user.store_id.id])]</field>
+            <field name="perm_read" eval="False"/>
+        </record>
+
+        <record id="stock_location_store_rule" model="ir.rule">
+            <field name="name">location multi-store</field>
+            <field name="model_id" ref="stock.model_stock_location"/>
+            <field name="global" eval="True"/>
+            <field name="domain_force">['|',('store_id','=',False),('store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="stock_picking_type_store_rule" model="ir.rule">
+            <field name="name">Stock Picking Type multi-store</field>
+            <field name="model_id" ref="stock.model_stock_picking_type"/>
+            <field name="global" eval="True"/>
+            <field name="domain_force">['|',('store_id','=',False),('store_id','child_of',[user.store_id.id])]</field>
+        </record>
+        
+        <record id="stock_picking_store_rule" model="ir.rule">
+            <field name="name">Stock Picking multi-store</field>
+            <field name="model_id" ref="stock.model_stock_picking"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('store_id','=',False),('store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+         <record id="stock_inventory_rule" model="ir.rule">
+            <field name="name">Stock Inventory multi-store</field>
+            <field name="model_id" ref="stock.model_stock_inventory"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('location_id.store_id','=',False),('location_id.store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="sale_store_rule" model="ir.rule">
+            <field name="name">Sale Order multi-store</field>
+            <field name="model_id" ref="sale.model_sale_order"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('warehouse_id.store_id','=',False),('warehouse_id.store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="purchase_store_rule" model="ir.rule">
+            <field name="name">Purchase Order multi-store</field>
+            <field name="model_id" ref="purchase.model_purchase_order"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('picking_type_id.store_id','=',False),('picking_type_id.store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="stock_quant_store_rule" model="ir.rule">
+            <field name="name">Stock Quant multi-store</field>
+            <field name="model_id" ref="stock.model_stock_quant"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('location_id.store_id','=',False),('location_id.store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="product_template_store_rule" model="ir.rule">
+            <field name="name">Product Template multi-store</field>
+            <field name="model_id" ref="product.model_product_template"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('store_id','=',False),('store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="product_pricelist_store_rule" model="ir.rule">
+            <field name="name">Product Pricelist multi-store</field>
+            <field name="model_id" ref="product.model_product_pricelist"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('store_id','=',False),('store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="product_pricelist_version_store_rule" model="ir.rule">
+            <field name="name">Product Pricelist Version multi-store</field>
+            <field name="model_id" ref="product.model_product_pricelist_version"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('pricelist_id.store_id','=',False),('pricelist_id.store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+        <record id="product_pricelist_item_store_rule" model="ir.rule">
+            <field name="name">Product Pricelist Item multi-store</field>
+            <field name="model_id" ref="product.model_product_pricelist_item"/>
+            <field name="global" eval="True"/>
+            <!-- <field name="perm_read" eval="False"/> -->
+            <field name="domain_force">['|',('price_version_id.pricelist_id.store_id','=',False),('price_version_id.pricelist_id.store_id','child_of',[user.store_id.id])]</field>
+        </record>
+
+    </data>
+</openerp>
+

+ 30 - 0
views/product_view.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+
+        <!-- Product Template Form -->
+        <record id="view_product_template" model="ir.ui.view">
+            <field name="name">product.template.form</field>
+            <field name="model">product.template</field>
+            <field name="inherit_id" ref="product.product_template_only_form_view"/>
+            <field name="arch" type="xml">
+                <field name="name" position="after">
+                    <field name="store_id" groups="multi_store.group_multi_store" string="Sucursal" placeholder="Sucursal"/>
+                </field>                
+            </field>
+        </record>
+
+        <!-- Product Pricelist Form -->
+        <record id="view_product_pricelist" model="ir.ui.view">
+            <field name="name">product.pricelist.form</field>
+            <field name="model">product.pricelist</field>
+            <field name="inherit_id" ref="product.product_pricelist_view"/>
+            <field name="arch" type="xml">
+                <field name="type" position="after">
+                    <field name="store_id" groups="multi_store.group_multi_store" string="Sucursal" placeholder="Sucursal"/>
+                </field>                
+            </field>
+        </record>
+        
+    </data>
+</openerp>

+ 30 - 0
views/res_store_view.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+
+        <!-- Form -->
+        <record id="view_res_store_form" model="ir.ui.view">
+            <field name="name">res.store.form</field>
+            <field name="model">res.store</field>
+            <field name="inherit_id" ref="multi_store.view_res_store_form"/>
+            <field name="arch" type="xml">
+                <xpath expr="//div[@class='oe_title']" position="after">
+                    <div class="oe_right oe_button_box" name="buttons">
+                        <button
+                            class="oe_inline oe_stat_button"
+                            name="%(stock.action_warehouse_form)d"
+                            type="action"
+                            context="{'search_default_store_id': active_id}"
+                            icon="fa-home">
+                            <field name="warehouses_count" widget="statinfo"/>
+                        </button>   
+                    </div>
+                </xpath>               
+                <field name="journal_ids" position="after">
+                    <field name="warehouse_ids" string="Stock" readonly="1"/>
+                </field>
+            </field>
+        </record>
+
+    </data>
+</openerp>

+ 68 - 0
views/stock_view.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+
+        <!-- Warehouse Form -->
+        <record id="view_warehouse" model="ir.ui.view">
+            <field name="name">stock.warehouse.form</field>
+            <field name="model">stock.warehouse</field>
+            <field name="inherit_id" ref="stock.view_warehouse"/>
+            <field name="arch" type="xml">
+                <field name="company_id" position="after">
+                    <field name="store_id" groups="multi_store.group_multi_store" string="Sucursal"/>
+                </field>                
+            </field>
+        </record>
+
+        <!-- Location Form -->
+        <record id="view_location" model="ir.ui.view">
+            <field name="name">stock.location.form</field>
+            <field name="model">stock.location</field>
+            <field name="inherit_id" ref="stock.view_location_form"/>
+            <field name="arch" type="xml">
+                <field name="company_id" position="after">
+                    <field name="store_id" groups="multi_store.group_multi_store" string="Sucursal"/>
+                </field>                
+            </field>
+        </record>
+
+        <!-- New Warehouse Search -->
+        <record id="view_stock_warehouse_search" model="ir.ui.view">
+            <field name="name">stock.warehouse.search</field>
+            <field name="model">stock.warehouse</field>
+            <field name="arch" type="xml">
+                <search string="Search Stock_Warehouse">
+                    <field name="store_id" groups="multi_store.group_multi_store"/>
+                </search>
+            </field>
+        </record>
+
+        <!-- Picking Type Search -->
+        <record id="view_pickingtype_filter" model="ir.ui.view">
+            <field name="name">stock.picking.type.filter</field>
+            <field name="model">stock.picking.type</field>
+            <field name="inherit_id" ref="stock.view_pickingtype_filter"/>
+            <field name="arch" type="xml">
+                <field name="warehouse_id" position="after">
+                    <field name="store_id" groups="multi_store.group_multi_store"/>
+                </field>
+            </field>
+        </record>
+
+        <!-- Picking Internal (son las 3 iguales) Search -->
+        <record id="view_picking_internal_search" model="ir.ui.view">
+            <field name="name">stock.picking.internal.search</field>
+            <field name="model">stock.picking</field>
+            <field name="inherit_id" ref="stock.view_picking_internal_search"/>
+            <field name="arch" type="xml">
+                <field name="picking_type_id" position="after">
+                    <field name="store_id" groups="multi_store.group_multi_store"/>
+                </field>
+                <group>
+                    <filter string="Store" context="{'group_by':'store_id'}" groups="multi_store.group_multi_store"/>
+                </group>
+            </field>
+        </record>
+        
+    </data>
+</openerp>