You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

126 lines
6.0 KiB

# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2008-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Nilmar Shereef(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.tools.translate import _
from openerp.osv import fields, osv
class CarVehicle(osv.osv):
_name = 'car.car'
_inherit = ['mail.thread']
def _get_visibility_selection_id(self, cr, uid, context=None):
""" Overriden in portal_project to offer more options """
return [('portal', _('Customer Project: visible in portal if the customer is a follower')),
('employees', _('All Employees Project: all employees can access')),
('followers', _('Private Project: followers only'))]
_visibility_selections = lambda self, *args, **kwargs: self._get_visibility_selection_id(*args, **kwargs)
def get_task_count(self, cr, uid, ids, field_name, arg, context=None):
if context is None:
context = {}
res = {}
for vehicle in self.browse(cr, uid, ids, context=context):
res[vehicle.id] = len(vehicle.task_ids)
return res
def _get_all_attached_docs(self, cr, uid, ids, field_name, arg, context):
res = {}
attachment = self.pool.get('ir.attachment')
worksheet = self.pool.get('car.workshop')
for id in ids:
project_attachments = attachment.search(cr, uid, [('res_model', '=', 'car.car'),
('res_id', '=', id)], context=context, count=True)
task_ids = worksheet.search(cr, uid, [('vehicle_id', '=', id)], context=context)
task_attachments = attachment.search(cr, uid, [('res_model', '=', 'car.workshop'), ('res_id', 'in', task_ids)], context=context, count=True)
res[id] = (project_attachments or 0) + (task_attachments or 0)
return res
def attachment_tree_views(self, cr, uid, ids, context):
task_ids = self.pool.get('car.workshop').search(cr, uid, [('vehicle_id', 'in', ids)])
domain = [
'|',
'&', ('res_model', '=', 'car.car'), ('res_id', 'in', ids),
'&', ('res_model', '=', 'car.workshop'), ('res_id', 'in', task_ids)]
res_id = ids and ids[0] or False
return {
'name': _('Attachments'),
'domain': domain,
'res_model': 'ir.attachment',
'type': 'ir.actions.act_window',
'view_id': False,
'view_mode': 'kanban,tree,form',
'view_type': 'form',
'help': _('''<p class="oe_view_nocontent_create">
Documents are attached to the tasks and issues of your project.</p><p>
Send messages or log internal notes with attachments to link
documents to your project.
</p>'''),
'limit': 80,
'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, res_id)
}
_columns = {
'active': fields.boolean(string='Active'),
'name': fields.many2one('fleet.vehicle', string='Vehicle Name', track_visibility='onchange', required=True),
'sequence': fields.integer(string='Sequence', help="Gives the sequence order when displaying a list of Projects."),
'label_tasks': fields.char(string='Use Tasks as', help="Gives label to tasks on project's kanban view."),
'worksheet': fields.one2many('car.workshop', 'vehicle_id', string="Task Activities"),
'type_ids': fields.many2many('worksheet.stages', 'car_workshop_type_rel', 'vehicle_id',
'type_id', 'Worksheet Stages',
states={'close': [('readonly', True)], 'cancelled': [('readonly', True)]}),
'task_count': fields.function(get_task_count, type='integer', string="Tasks", ),
'task_ids': fields.one2many('car.workshop', 'vehicle_id',
domain=['|', ('stage_id.fold', '=', False), ('stage_id', '=', False)]),
'doc_count': fields.function(_get_all_attached_docs, string="Number of documents attached", type='integer'),
'color': fields.integer('Color Index'),
'partner_id': fields.many2one('res.partner', 'Customer'),
'state': fields.selection([('draft', 'New'),
('open', 'In Progress'),
('cancelled', 'Cancelled'),
('pending', 'Pending'),
('close', 'Closed')],
string='Status', required=True, track_visibility='onchange', copy=False),
'date_start': fields.date(string='Start Date'),
'date': fields.date(string='Expiration Date', select=True, track_visibility='onchange'),
'use_tasks': fields.boolean(string='Tasks'),
'image_medium': fields.related('name', 'image_medium', type="binary", string="Logo (medium)"),
}
_defaults = {
'active': True,
'use_tasks': True,
'label_tasks': 'Tasks',
'state': 'open',
}
def on_change_vehicle(self):
if not self.name:
return {}
model = self.pool.get('fleet.vehicle').browse(self.name)
return {
'value': {
'image_medium': model.image_medium,
}
}