2014-03-28 09:58:35 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-today OpenERP SA (<http://www.openerp.com>)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from datetime import date , datetime
from dateutil import relativedelta
from openerp import tools
2014-05-02 08:57:50 +00:00
from openerp . osv import fields , osv
2014-03-28 09:58:35 +00:00
class crm_case_section ( osv . osv ) :
_name = " crm.case.section "
_inherit = [ ' mail.thread ' , ' ir.needaction_mixin ' ]
_description = " Sales Teams "
_order = " complete_name "
_period_number = 5
def get_full_name ( self , cr , uid , ids , field_name , arg , context = None ) :
return dict ( self . name_get ( cr , uid , ids , context = context ) )
2014-05-02 08:57:50 +00:00
2014-03-28 09:58:35 +00:00
def __get_bar_values ( self , cr , uid , obj , domain , read_fields , value_field , groupby_field , context = None ) :
""" Generic method to generate data for bar chart values using SparklineBarWidget.
This method performs obj . read_group ( cr , uid , domain , read_fields , groupby_field ) .
: param obj : the target model ( i . e . crm_lead )
: param domain : the domain applied to the read_group
: param list read_fields : the list of fields to read in the read_group
: param str value_field : the field used to compute the value of the bar slice
: param str groupby_field : the fields used to group
: return list section_result : a list of dicts : [
{ ' value ' : ( int ) bar_column_value ,
' tootip ' : ( str ) bar_column_tooltip ,
}
]
"""
month_begin = date . today ( ) . replace ( day = 1 )
section_result = [ {
' value ' : 0 ,
' tooltip ' : ( month_begin + relativedelta . relativedelta ( months = - i ) ) . strftime ( ' % B % Y ' ) ,
} for i in range ( self . _period_number - 1 , - 1 , - 1 ) ]
group_obj = obj . read_group ( cr , uid , domain , read_fields , groupby_field , context = context )
pattern = tools . DEFAULT_SERVER_DATE_FORMAT if obj . fields_get ( cr , uid , groupby_field ) [ groupby_field ] [ ' type ' ] == ' date ' else tools . DEFAULT_SERVER_DATETIME_FORMAT
for group in group_obj :
group_begin_date = datetime . strptime ( group [ ' __domain ' ] [ 0 ] [ 2 ] , pattern )
month_delta = relativedelta . relativedelta ( month_begin , group_begin_date )
section_result [ self . _period_number - ( month_delta . months + 1 ) ] = { ' value ' : group . get ( value_field , 0 ) , ' tooltip ' : group . get ( groupby_field , 0 ) }
return section_result
2014-05-02 08:57:50 +00:00
2014-03-28 09:58:35 +00:00
_columns = {
' name ' : fields . char ( ' Sales Team ' , size = 64 , required = True , translate = True ) ,
' complete_name ' : fields . function ( get_full_name , type = ' char ' , size = 256 , readonly = True , store = True ) ,
' code ' : fields . char ( ' Code ' , size = 8 ) ,
' active ' : fields . boolean ( ' Active ' , help = " If the active field is set to " \
" true, it will allow you to hide the sales team without removing it. " ) ,
' change_responsible ' : fields . boolean ( ' Reassign Escalated ' , help = " When escalating to this team override the salesman with the team leader. " ) ,
' user_id ' : fields . many2one ( ' res.users ' , ' Team Leader ' ) ,
' member_ids ' : fields . many2many ( ' res.users ' , ' sale_member_rel ' , ' section_id ' , ' member_id ' , ' Team Members ' ) ,
' reply_to ' : fields . char ( ' Reply-To ' , size = 64 , help = " The email address put in the ' Reply-To ' of all emails sent by OpenERP about cases in this sales team " ) ,
' parent_id ' : fields . many2one ( ' crm.case.section ' , ' Parent Team ' ) ,
' child_ids ' : fields . one2many ( ' crm.case.section ' , ' parent_id ' , ' Child Teams ' ) ,
' note ' : fields . text ( ' Description ' ) ,
' working_hours ' : fields . float ( ' Working Hours ' , digits = ( 16 , 2 ) ) ,
' color ' : fields . integer ( ' Color Index ' ) ,
2014-05-12 13:58:25 +00:00
}
2014-05-02 08:57:50 +00:00
2014-03-28 09:58:35 +00:00
_defaults = {
' active ' : 1 ,
}
_sql_constraints = [
( ' code_uniq ' , ' unique (code) ' , ' The code of the sales team must be unique ! ' )
]
_constraints = [
( osv . osv . _check_recursion , ' Error ! You cannot create recursive Sales team. ' , [ ' parent_id ' ] )
]
def name_get ( self , cr , uid , ids , context = None ) :
""" Overrides orm name_get method """
if not isinstance ( ids , list ) :
ids = [ ids ]
res = [ ]
if not ids :
return res
reads = self . read ( cr , uid , ids , [ ' name ' , ' parent_id ' ] , context )
for record in reads :
name = record [ ' name ' ]
if record [ ' parent_id ' ] :
name = record [ ' parent_id ' ] [ 1 ] + ' / ' + name
res . append ( ( record [ ' id ' ] , name ) )
return res
2014-04-23 09:47:33 +00:00
2014-05-02 08:57:50 +00:00
class res_partner ( osv . Model ) :
_inherit = ' res.partner '
_columns = {
' section_id ' : fields . many2one ( ' crm.case.section ' , ' Sales Team ' ) ,
}
2014-03-28 09:58:35 +00:00
class res_users ( osv . Model ) :
_inherit = ' res.users '
_columns = {
' default_section_id ' : fields . many2one ( ' crm.case.section ' , ' Default Sales Team ' ) ,
}
def __init__ ( self , pool , cr ) :
init_res = super ( res_users , self ) . __init__ ( pool , cr )
# duplicate list to avoid modifying the original reference
self . SELF_WRITEABLE_FIELDS = list ( self . SELF_WRITEABLE_FIELDS )
self . SELF_WRITEABLE_FIELDS . extend ( [ ' default_section_id ' ] )
2014-05-02 08:57:50 +00:00
return init_res