# -*- coding: utf-8 -*- from openerp import models, fields, api, tools from openerp.exceptions import ValidationError, except_orm, Warning, RedirectWarning class ProjectService(models.Model): _name = 'project.service' name = fields.Many2one('product.service', string='Nombre', required=True) date_start = fields.Date(string='Start Date') date_due = fields.Date(string='Expiration Date') sequence = fields.Integer(string='Sequence') partner_id = fields.Many2one('res.partner', string='Customer') image_medium = fields.Binary('Binary File', related="name.logo") state = fields.Selection([('draft', 'Nuevo'),('open', 'En progreso'), ('cancelled', 'Cancelado'), ('pending', 'Pendiente'), ('close', 'Cerrado')], string='Status') color = fields.Integer(string='Color Index') project_service_task_ids = fields.One2many( 'project.service.task', 'project_id', ) project_service_task_count = fields.Integer( string='Contador de tareas', compute='_get_project_service_task_count', ) date_in = fields.Date(string='Fecha de entrada', default=fields.Date.today()) date_out = fields.Date(string='Fecha de Salida') _defaults = { 'state': 'open', } @api.multi def unlink(self): for project in self: if project.state in ('close'): raise Warning('No puedes borrar un proyecto en estado cerrado') if len(project.project_service_task_ids) > 0: raise Warning('No puedes borrar un proyecto que tiene tareas') return super(ProjectService, self).unlink() def on_change_product(self): if not self.name: return {} model = self.pool.get('product.service').browse(self.name) return { 'value': { 'image_medium': model.logo, } } @api.one @api.depends('project_service_task_ids') def _get_project_service_task_count(self): self.project_service_task_count = len(self.project_service_task_ids) @api.one @api.onchange('name') def onchange_name(self): self.partner_id = self.name.partner_id.id