# -*- coding: utf-8 -*- from openerp import models, fields, tools, api, _ import openerp.addons.decimal_precision as dp from openerp.exceptions import Warning, except_orm, AccessError class constructionOrderContractor(models.Model): _name = 'construction.order.contractor' name = fields.Char('name') date = fields.Date() active = fields.Boolean('Active', default=True) ref = fields.Char('Ref') comment = fields.Text('Comment', help='information') state = fields.Selection([('draft', 'Borrador'),('done', 'Hecho')], default='draft') ''' Contratista && subcontratista ''' partner_id = fields.Many2one('res.partner', string='contractor', required=True) ''' ORDER && PRESUPUSETO ''' budget_id = fields.Many2one('construction.order', string='budget', required=True) order_id = fields.Many2one('construction.order', string='order') line_ids = fields.One2many('construction.order.contractor.line', 'order_contractor_ids', string='lines') amount_total = fields.Float('Amount Total', digits_compute=dp.get_precision('Account'), default=0.0) ''' CREATE ''' @api.model def create(self, vals): partner = self.env['res.partner'].browse(vals['partner_id']) budget = self.env['construction.order'].browse(vals['budget_id']) name ="Subcontratista/%s/%s" % (partner.name, budget.name) vals['name'] = name.upper() return super(constructionOrderContractor, self).create(vals) ''' Currency ''' @api.model def get_currency_budget(self, id): contractor = self.env['construction.order.contractor'].browse(id) budget = contractor.budget_id return budget.get_currency_order(budget.id) @api.model def add_task_contractor(self, id,tasks): line = self.env['construction.order.contractor.line'].search([('order_contractor_ids', '=', id )]) lineTask = [] if ( line ): for i in line: i.unlink() for task in tasks: lineTask= { 'code':task['code'], 'task_name': task['taskName'], 'uom_id': task['uomId'], 'task_id': task['taskId'], 'task_line_id': task['taskLineId'], 'qty': task['qty'], 'amount': task['amount'], 'amount_total': task['amountTotal'], 'type': task['type'], 'order_contractor_ids': id, } line.create(lineTask) contractor = self.env['construction.order.contractor'].browse(id) if (not contractor): return {'state': False } ammount = 0 for line in contractor.line_ids: if (line.type =='activity'): ammount += line.amount_total contractor.write({'amount_total': ammount}) return {'state': True } class ConstructionOrder(models.Model): _inherit = 'construction.order' contractor_budget_ids = fields.One2many('construction.order.contractor', 'budget_id', string='contractor') contractor_order_ids = fields.One2many('construction.order.contractor', 'order_id', string='contractor') ''' RES PARTNER ''' class ResPartnerContractor(models.Model): _inherit = 'res.partner' contractor = fields.Boolean('contractor', default=False, help='Define si es un contratista o un subcontratista') class constructionOrderContractorLine(models.Model): _name = 'construction.order.contractor.line' code = fields.Char('Code', size=32, required=True, select=True) task_name = fields.Char('name') uom_id = fields.Many2one('construction.uom', string='Unidad de medida') task_id = fields.Many2one('construction.task', string='Tarea') task_line_id = fields.Many2one('construction.task.line', string='Actividad') qty = fields.Float('Cantidad', default=0) amount = fields.Float('Amount Unit', digits_compute=dp.get_precision('Account'), default=0.0) amount_total = fields.Float('Amount Total', digits_compute=dp.get_precision('Account'), default=0.0) type = fields.Selection([('task', 'Tarea'),('activity', 'Actividad')]) order_contractor_ids = fields.Many2one('construction.order.contractor', string='Orden Contratista', ondelete='cascade', index=True, required=True)