Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions supply_order/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-

from . import models
from . import wizard
32 changes: 32 additions & 0 deletions supply_order/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
{
'name': "supply orders",

'summary': """
Crea reglas especiales para abastecimiento""",

'description': """
Crea reglas especiales para abastecimiento
""",

'author': "filoquin",
'website': "xx",

'category': 'stock',
'version': '13.0.0.0.1',

# any module necessary for this one to work correctly
'depends': ['stock', 'product'],

# always loaded
'data': [
'security/ir.model.access.csv',
'data/ir_sequence.xml',
'views/templates.xml',
'views/stock_supply_rule.xml',
'views/stock_supply_request.xml',
'views/stock_supply_calendar.xml',
'views/stock_picking_type.xml',
'wizard/stock_supply_wizard.xml',
],
}
14 changes: 14 additions & 0 deletions supply_order/data/ir_sequence.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="sequence_supply_req" model="ir.sequence">
<field name="name">supply req</field>
<field name="code">supply.req</field>
<field name="prefix">SU/</field>
<field name="padding">5</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>
6 changes: 6 additions & 0 deletions supply_order/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from . import stock_supply_calendar
from . import stock_supply_rule
from . import stock_supply_request
from . import product_product
from . import procurement_group
from . import stock_picking_type
13 changes: 13 additions & 0 deletions supply_order/models/procurement_group.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from odoo import fields, models, api

class ProcurementGroup(models.Model):

_inherit = 'procurement.group'

def _get_orderpoint_domain(self, company_id=False):
domain = super()._get_orderpoint_domain(company_id)
procurement_id = self.env.context.get('only_procurement', False)
if procurement_id:
domain += [('id', '=', procurement_id)]
return domain

38 changes: 38 additions & 0 deletions supply_order/models/product_category.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from odoo import fields, models, api


class ProductCategory(models.Model):


_inherit = "product.category"

supply_categ_id = fields.Many2one(
'product.category',
string='Third level',
compute='_compute_supply_categ',
inverse='_compute_supply_categ_inverse',
store=True,
)

def _compute_supply_categ_inverse(self):
pass

@api.depends('parent_id')
def _compute_supply_categ(self):
for categ in self:
parent = categ
childs = []
childs.append(parent.parent_id.id)
while len(parent):
parent = self.search(
[('id', '=', parent.parent_id.id)], limit=1)
if len(parent) and parent.parent_id.id != False:
childs.append(parent.parent_id.id)

if len(childs) > 3:
categ.supply_categ_id = childs[-4]

elif len(childs) > 2:
categ.supply_categ_id = childs[-3]
else:
categ.supply_categ_id = categ.id
100 changes: 100 additions & 0 deletions supply_order/models/product_product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
from requests import request
from odoo import fields, models, api

class ProductPackaging(models.Model):
_inherit = "product.packaging"

def add_to_request(self):
request = self._context.get('request', False)
factor = self._context.get('factor', 1.0)
if request:
request_id = self.env['stock.supply.request'].browse(request)
line = request_id.line_ids.filtered(
lambda r: r.product_id.id == self.product_id.id)
if len(line):
line.quantity += self.qty * factor
else:
vals = {
'quantity': self.qty * factor,
'request_id': request_id.id,
'product_id': self.product_id.id,
}
self.env['stock.supply.request.line'].create(vals)

def drop_form_request(self, qty=1):
request = self._context.get('request', False)
if request:
request_id = self.env['stock.supply.request'].browse(request)
line = request_id.line_ids.filtered(
lambda r: r.product_id.id == self.product_id.id)
if len(line) and line.quantity > 0:
line.quantity -= qty
else:
line.unlink()


class ProductProduct(models.Model):

_inherit = "product.product"

supply_qty = fields.Float(
'qty',
compute="_compute_supply_qty",
digits='Product Unit of Measure',
)

def _compute_supply_qty(self):
request = self._context.get('request', False)
if request:
request_id = self.env['stock.supply.request'].browse(request)
lines = request_id.line_ids.filtered(
lambda r: r.product_id.id in self.ids)
qtys = {x.product_id.id: x.quantity for x in lines}
for product in self:
product.supply_qty = qtys.get(product.id, 0)
else:
self.supply_qty = 0

def add_to_request(self, qty=1):
request = self._context.get('request', False)
if request:
request_id = self.env['stock.supply.request'].browse(request)
line = request_id.line_ids.filtered(
lambda r: r.product_id.id == self.id)
if len(line):
line.quantity += qty
else:
vals = {
'quantity': qty,
'request_id': request_id.id,
'product_id': self.id,
}
self.env['stock.supply.request.line'].create(vals)

def drop_form_request(self, qty=1):
request = self._context.get('request', False)
if request:
request_id = self.env['stock.supply.request'].browse(request)
line = request_id.line_ids.filtered(
lambda r: r.product_id.id == self.id)
if len(line) and line.quantity > 0:
line.quantity -= qty
else:
line.unlink()

def popup_request(self):
self.ensure_one()
view_id = self.env.ref('supply_order.product_packaging_pop_view_tree')
domain = [('product_id', '=', self.id)]

view = {
'name': self.display_name,
'view_mode': 'tree',
'view_id': view_id.id,
'res_model': 'product.packaging',
'type': 'ir.actions.act_window',
'context':{'request':self._context.get('request')},
'domain': domain,
'target': 'new',
}
return view
15 changes: 15 additions & 0 deletions supply_order/models/stock_picking_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from odoo import fields, models, api


class StockPickingType(models.Model):


_inherit = "stock.picking.type"

def new_supply_request(self):
self.ensure_one()
active_ids = self.ids
active_model = 'stock.picking.type'

return self.env['stock.supply.wizard'].with_context(active_ids = active_ids, active_model=active_model).action_open_wizard()

66 changes: 66 additions & 0 deletions supply_order/models/stock_supply_calendar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from odoo import fields, models, api

class StockSupplyCalendar(models.Model):
_name = 'stock.supply.calendar'
_description = 'supply calendar'

rule_id = fields.Many2one(
'stock.supply.rule',
)
name = fields.Char(
'Name',
compute='_compute_name',
store=True
)
deadline = fields.Datetime(
string='Date',
required=True
)
request_deadline = fields.Datetime(
string='Request deadline'
)
preparation_deadline = fields.Datetime(
string='Preparation deadline'
)
warehouse_id = fields.Many2one(
'stock.warehouse',
required=True,
related='rule_id.warehouse_id'
)
request_ids = fields.One2many(
'stock.supply.request',
'calendar_id',
string='request',
)
orig_warehouse_id = fields.Many2one(
'stock.warehouse',
string='From Warehouse',
required=True,
related='rule_id.orig_warehouse_id'
)
route_ids = fields.Many2many(related='rule_id.route_ids')
company_id = fields.Many2one(
'res.company',
default= lambda self: self.env.company
)
@api.depends( 'warehouse_id', 'deadline')
def _compute_name(self):
for calendar in self:
calendar.name = '%s %s' % (calendar.warehouse_id.name, fields.Datetime.to_string(calendar.deadline))

def action_new_request(self):
self.ensure_one()
request_id = self.env['stock.supply.request'].create(
{'calendar_id': self.id, 'rule_id': self.rule_id.id,'domain': self.rule_id.domain,})
view_id = self.env.ref('supply_order.stock_supply_request_form')
view = {
'name': "Abastecimiento",
'view_mode': 'form',
'view_id': view_id.id,
'view_type': 'form',
'res_id': request_id.id,
'res_model': 'stock.supply.request',
'type': 'ir.actions.act_window',
'target': 'self',
}
return view
Loading