Files
report-print-send/stock_picking_auto_print/models/stock_picking.py
2019-12-06 22:35:34 +05:30

95 lines
3.6 KiB
Python

# Copyright (C) 2019 IBM Corp.
# Copyright (C) 2019 Open Source Integrators
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
class StockPicking(models.Model):
_inherit = "stock.picking"
def _search_default_report(self, country_id=False, company_id=False):
report_id = False
report_action_pool = self.env['ir.actions.report']
domain = [('model', '=', 'stock.picking'),
('is_default_report', '=', True)]
fields = ['country_id', 'company_id']
stock_picking_reports = report_action_pool.search_read(domain, fields)
if country_id and company_id:
for value in stock_picking_reports:
if value.get('country_id') and value.get('company_id'):
if value.get('country_id')[0] == country_id and \
value.get('company_id')[0] == company_id:
return value['id']
elif country_id:
for value in stock_picking_reports:
if value.get('country_id'):
if value.get('country_id')[0] == country_id:
return value['id']
elif company_id:
for value in stock_picking_reports:
if value.get('company_id'):
if value.get('company_id')[0] == company_id:
return value['id']
else:
report_id = self.env.ref(
'stock.action_report_picking').with_context(
landscape=True).report_action(self).get('id')
return report_id
@api.multi
def _stock_picking_default_auto_print_report(self):
user_company_id = self.env.user.company_id.id
report_action_pool = self.env['ir.actions.report']
for picking in self.filtered(lambda p: p.sale_id):
default_report_id = False
# Check Partner country id
country_id = False
if picking.partner_id.country_id:
country_id = picking.partner_id.country_id.id
if country_id and user_company_id:
# Filter report with Country and Company
default_report_id = picking._search_default_report(
country_id, user_company_id)
if not default_report_id and country_id:
# Filter report with Country
default_report_id = picking._search_default_report(
country_id=country_id)
if not default_report_id:
# Filter report with Company
default_report_id = picking._search_default_report(
company_id=user_company_id)
if not default_report_id:
# Search for default picking operation report
default_report_id = picking._search_default_report()
action_report = report_action_pool.browse(
default_report_id)
try:
action_report.print_document(picking.id)
except:
pass
return True
@api.multi
def write(self, vals):
res = super(StockPicking, self).write(vals)
if 'date_done' in vals:
self._stock_picking_default_auto_print_report()
return res
@api.multi
def action_assign(self):
res = super(StockPicking, self).action_assign()
for picking in self:
if (picking.picking_type_code == 'outgoing' or
picking.location_dest_id.name == 'Output') and \
picking.state == 'assigned':
picking._stock_picking_default_auto_print_report()
return res