Tower: upload tk_construction_management 18.0.2.0.8 (was 18.0.2.0.8, via marketplace)
This commit is contained in:
119
addons/tk_construction_management/models/construction_scrap.py
Normal file
119
addons/tk_construction_management/models/construction_scrap.py
Normal file
@@ -0,0 +1,119 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2020-Today TechKhedut.
|
||||
# Part of TechKhedut. See LICENSE file for full copyright and licensing details.
|
||||
from odoo import fields, api, models, _
|
||||
|
||||
|
||||
class ScrapOrder(models.Model):
|
||||
_name = 'scrap.order'
|
||||
_description = "Construction Scrap Order"
|
||||
_rec_name = 'name'
|
||||
|
||||
name = fields.Char(string='Sequence', copy=False, required=True, readonly=True, default=lambda self: _('New'))
|
||||
date = fields.Date(string="Date", default=fields.Date.today())
|
||||
note = fields.Text(string="Note")
|
||||
job_order_id = fields.Many2one('job.order', string="Work Order")
|
||||
scrap_order_line_ids = fields.One2many('scrap.order.line', 'scrap_order_id', string="Scrap Order Line")
|
||||
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company)
|
||||
currency_id = fields.Many2one('res.currency', related='company_id.currency_id', string='Currency')
|
||||
total = fields.Monetary(string="Total", compute="_compute_net_total", store=True)
|
||||
invoice_id = fields.Many2one('account.move', string="Invoice")
|
||||
vendor_id = fields.Many2one('res.partner', string="Vendor")
|
||||
|
||||
@api.depends('scrap_order_line_ids')
|
||||
def _compute_net_total(self):
|
||||
for rec in self:
|
||||
amount = 0.0
|
||||
if rec.scrap_order_line_ids:
|
||||
for data in rec.scrap_order_line_ids:
|
||||
amount = amount + data.net_total
|
||||
rec.total = amount
|
||||
else:
|
||||
rec.total = 0.0
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
if vals.get('name', _('New')) == _('New'):
|
||||
vals['name'] = self.env['ir.sequence'].next_by_code('scrap.order') or _('New')
|
||||
res = super(ScrapOrder, self).create(vals_list)
|
||||
return res
|
||||
|
||||
@api.onchange('job_order_id')
|
||||
def _onchange_job_order(self):
|
||||
for rec in self:
|
||||
if not rec.job_order_id:
|
||||
return
|
||||
if rec.job_order_id:
|
||||
lines = []
|
||||
rec.scrap_order_line_ids = [(5, 0, 0)]
|
||||
for data in rec.job_order_id.material_order_ids:
|
||||
lines.append((0, 0, {
|
||||
'product_id': data.material_id.id,
|
||||
'scrap_type': 'material',
|
||||
'qty': 1,
|
||||
}))
|
||||
for data in rec.job_order_id.equipment_order_ids:
|
||||
lines.append((0, 0, {
|
||||
'product_id': data.equipment_id.id,
|
||||
'scrap_type': 'equipment',
|
||||
'qty': 1,
|
||||
}))
|
||||
for data in rec.job_order_id.overhead_order_ids:
|
||||
lines.append((0, 0, {
|
||||
'product_id': data.product_id.id,
|
||||
'scrap_type': 'overhead',
|
||||
'qty': 1,
|
||||
}))
|
||||
rec.scrap_order_line_ids = lines
|
||||
|
||||
def action_create_invoice(self):
|
||||
invoice_line = []
|
||||
for data in self.scrap_order_line_ids:
|
||||
invoice_line.append((0, 0, {
|
||||
'product_id': data.product_id.id,
|
||||
'name': data.product_id.name,
|
||||
'quantity': data.qty,
|
||||
'tax_ids': False,
|
||||
'price_unit': data.dep_cost
|
||||
}))
|
||||
invoice_id = self.env['account.move'].create({
|
||||
'partner_id': self.vendor_id.id,
|
||||
'invoice_line_ids': invoice_line,
|
||||
'move_type': 'out_invoice',
|
||||
})
|
||||
invoice_id.action_post()
|
||||
self.invoice_id = invoice_id.id
|
||||
|
||||
|
||||
class ScrapOrderLine(models.Model):
|
||||
_name = 'scrap.order.line'
|
||||
_description = "Scrap Order Line"
|
||||
|
||||
scrap_type = fields.Selection([('material', 'Material'), ('equipment', 'Equipment'), ('overhead', 'Overhead')],
|
||||
string="Scrap of")
|
||||
product_id = fields.Many2one("product.product", string="Product")
|
||||
qty = fields.Integer(string="Qty.")
|
||||
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company)
|
||||
currency_id = fields.Many2one('res.currency', related='company_id.currency_id', string='Currency')
|
||||
dep_cost = fields.Monetary(string="Value")
|
||||
scrap_order_id = fields.Many2one('scrap.order', string="Scrap Order")
|
||||
net_total = fields.Monetary(string="Total Value", compute="_compute_net_total")
|
||||
|
||||
@api.onchange('scrap_type')
|
||||
def filter_materia_equipment(self):
|
||||
for rec in self:
|
||||
if rec.scrap_type == "material":
|
||||
return {'domain': {'product_id': [('is_material', '=', True)]}}
|
||||
elif rec.scrap_type == "equipment":
|
||||
return {'domain': {'product_id': [('is_equipment', '=', True)]}}
|
||||
elif rec.scrap_type == 'overhead':
|
||||
return {'domain': {'product_id': [('is_overhead', '=', True)]}}
|
||||
|
||||
@api.depends('dep_cost', 'qty')
|
||||
def _compute_net_total(self):
|
||||
for rec in self:
|
||||
if rec.product_id:
|
||||
rec.net_total = rec.dep_cost * rec.qty
|
||||
else:
|
||||
rec.net_total = 0
|
||||
Reference in New Issue
Block a user