Add modules sale_from_private_stock and sale_order_add_bom
Port base_company_extension to v10 Avoid blockage on l10n_fr_infogreffe_connector
This commit is contained in:
3
sale_from_private_stock/__init__.py
Normal file
3
sale_from_private_stock/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import sale_private_stock
|
||||
33
sale_from_private_stock/__manifest__.py
Normal file
33
sale_from_private_stock/__manifest__.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
'name': 'Sale from Private Stock',
|
||||
'version': '10.0.1.0.0',
|
||||
'category': 'Sales Management',
|
||||
'license': 'AGPL-3',
|
||||
'summary': 'Sell from private stock',
|
||||
'description': '''
|
||||
Sale from Private Stock
|
||||
=======================
|
||||
|
||||
This module is particularly useful for companies that lend stock to their distributors and when it's too heavy to create a new warehouse for each distributor.
|
||||
|
||||
This module allows to define a private stock location on a customer.
|
||||
|
||||
On a sale order, there is a new optional field to define the source stock location. On a sale order, if you select a customer that has a private stock location, this private stock location will be set as the source stock location of the sale order (but you can change it).
|
||||
|
||||
|
||||
This module has been written by Alexis de Lattre from Akretion
|
||||
<alexis.delattre@akretion.com>.
|
||||
''',
|
||||
'author': 'Akretion',
|
||||
'depends': ['sale_stock'],
|
||||
'data': [
|
||||
'stock_view.xml',
|
||||
'stock_data.xml',
|
||||
'partner_view.xml',
|
||||
],
|
||||
'installable': True,
|
||||
}
|
||||
27
sale_from_private_stock/partner_view.xml
Normal file
27
sale_from_private_stock/partner_view.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2016 Akretion (http://www.akretion.com/)
|
||||
@author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
-->
|
||||
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="view_partner_stock_form" model="ir.ui.view">
|
||||
<field name="name">sale_from_private_stock.partner.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="stock.view_partner_stock_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="property_stock_supplier" position="after">
|
||||
<field name="default_sale_route_id"
|
||||
attrs="{'invisible': ['|', ('customer', '=', False), ('parent_id', '!=', False)]}"/>
|
||||
<button name="create_private_location_route" type="object"
|
||||
string="Create Private Stock"
|
||||
attrs="{'invisible': ['|', '|', ('default_sale_route_id', '!=', False), ('customer', '=', False), ('parent_id', '!=', False)]}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
83
sale_from_private_stock/sale_private_stock.py
Normal file
83
sale_from_private_stock/sale_private_stock.py
Normal file
@@ -0,0 +1,83 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from openerp import models, fields, api, _
|
||||
from openerp.exceptions import UserError
|
||||
|
||||
|
||||
class StockWarehouse(models.Model):
|
||||
_inherit = 'stock.warehouse'
|
||||
|
||||
private_stock_out_type_id = fields.Many2one(
|
||||
'stock.picking.type', string='Private Stock Out Type')
|
||||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
default_sale_route_id = fields.Many2one(
|
||||
'stock.location.route', string="Default Stock Location Route",
|
||||
company_dependent=True,
|
||||
domain=[('usage', '=', 'internal')],
|
||||
help="Stock location route used by default in sale order lines"
|
||||
"for this customer.")
|
||||
|
||||
@api.multi
|
||||
def create_private_location_route(self):
|
||||
self.ensure_one()
|
||||
assert not self.default_sale_route_id,\
|
||||
'Already has a default_sale_route_id'
|
||||
slo = self.env['stock.location']
|
||||
swo = self.env['stock.warehouse']
|
||||
pro = self.env['procurement.rule']
|
||||
slro = self.env['stock.location.route']
|
||||
company = self.env.user.company_id
|
||||
warehouses = swo.search([
|
||||
('company_id', '=', company.id),
|
||||
('private_stock_out_type_id', '!=', False)])
|
||||
if not warehouses:
|
||||
raise UserError(_(
|
||||
"No warehouse with a 'Private Stock Out Type' in the "
|
||||
"company %s") % company.name)
|
||||
warehouse = warehouses[0]
|
||||
private_stock_loc = slo.create({
|
||||
'name': _('Private stock %s') % self.name,
|
||||
'location_id': warehouse.view_location_id.id,
|
||||
'usage': 'internal',
|
||||
'company_id': company.id,
|
||||
})
|
||||
rule = pro.create({
|
||||
'name': _('From private stock %s to customer') % self.name,
|
||||
'company_id': company.id,
|
||||
'warehouse_id': warehouse.id,
|
||||
'action': 'move',
|
||||
'location_id': self.property_stock_customer.id,
|
||||
'location_src_id': private_stock_loc.id,
|
||||
'procure_method': 'make_to_stock',
|
||||
'picking_type_id': warehouse.private_stock_out_type_id.id,
|
||||
})
|
||||
|
||||
route = slro.create({
|
||||
'name': _('Take from %s') % self.name,
|
||||
'sequence': 1000,
|
||||
'pull_ids': [(6, 0, [rule.id])],
|
||||
'product_selectable': False,
|
||||
'product_categ_selectable': False,
|
||||
'warehouse_selectable': False,
|
||||
'sale_selectable': True,
|
||||
})
|
||||
self.default_sale_route_id = route.id
|
||||
|
||||
|
||||
class SaleOrderLine(models.Model):
|
||||
_inherit = 'sale.order.line'
|
||||
|
||||
@api.onchange('product_id')
|
||||
def _set_default_sale_route(self):
|
||||
print "DO NOT EXECUTE"
|
||||
commercial_partner = self.order_id.partner_id.commercial_partner_id
|
||||
if commercial_partner.default_sale_route_id:
|
||||
self.route_id = commercial_partner.default_sale_route_id
|
||||
|
||||
# TODO: check compat between warehouse and route ?
|
||||
29
sale_from_private_stock/stock_data.xml
Normal file
29
sale_from_private_stock/stock_data.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="ship_from_private_stock_seq" model="ir.sequence">
|
||||
<field name="name">Picking OUT from private stock</field>
|
||||
<field name="code">stock.picking</field>
|
||||
<field name="prefix">OUT/PRIV/</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="private_stock_picking_type" model="stock.picking.type">
|
||||
<field name="name">Delivery from private stock</field>
|
||||
<field name="warehouse_id" ref="stock.warehouse0"/>
|
||||
<field name="code">outgoing</field>
|
||||
<field name="use_create_lots" eval="False"/>
|
||||
<field name="use_existing_lots" eval="True"/>
|
||||
<field name="return_picking_type_id" ref="stock.picking_type_in"/>
|
||||
<field name="sequence_id" ref="ship_from_private_stock_seq"/>
|
||||
</record>
|
||||
|
||||
<record id="stock.warehouse0" model="stock.warehouse">
|
||||
<field name="private_stock_out_type_id" ref="private_stock_picking_type"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
23
sale_from_private_stock/stock_view.xml
Normal file
23
sale_from_private_stock/stock_view.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2016 Akretion (http://www.akretion.com/)
|
||||
@author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
-->
|
||||
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="view_warehouse" model="ir.ui.view">
|
||||
<field name="name">sale_from_private_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="out_type_id" position="after">
|
||||
<field name="private_stock_out_type_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user