2012-02-29 09:50:21 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
2012-04-03 08:44:25 +00:00
# OpenERP, Open Source Business Applications
# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
2012-02-29 09:50:21 +00:00
#
# 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/>.
#
##############################################################################
2013-01-29 13:36:31 +00:00
import logging
2012-12-06 14:56:32 +00:00
from openerp . osv import fields , osv
from openerp . tools . translate import _
2012-02-29 09:50:21 +00:00
2013-01-29 13:36:31 +00:00
_logger = logging . getLogger ( __name__ )
2014-01-21 10:50:46 +00:00
class sale_configuration ( osv . TransientModel ) :
2012-03-20 13:50:02 +00:00
_inherit = ' sale.config.settings '
2012-02-29 09:50:21 +00:00
2014-01-21 10:50:46 +00:00
def set_group_product_variant ( self , cr , uid , ids , context = None ) :
""" This method is automatically called by res_config as it begins
with set . It is used to implement the ' one group or another '
behavior . We have to perform some group manipulation by hand
because in res_config . execute ( ) , set_ * methods are called
after group_ * ; therefore writing on an hidden res_config file
could not work .
If group_product_variant is checked : remove group_product_mono
from group_user , remove the users . Otherwise , just add
group_product_mono in group_user .
The inverse logic about group_product_variant is managed by the
normal behavior of ' group_product_variant ' field .
"""
def ref ( xml_id ) :
mod , xml = xml_id . split ( ' . ' , 1 )
return self . pool [ ' ir.model.data ' ] . get_object ( cr , uid , mod , xml , context )
for obj in self . browse ( cr , uid , ids , context = context ) :
config_group = ref ( ' product.group_product_mono ' )
base_group = ref ( ' base.group_user ' )
if obj . group_product_variant :
base_group . write ( { ' implied_ids ' : [ ( 3 , config_group . id ) ] } )
config_group . write ( { ' users ' : [ ( 3 , u . id ) for u in base_group . users ] } )
else :
base_group . write ( { ' implied_ids ' : [ ( 4 , config_group . id ) ] } )
return True
2012-02-29 09:50:21 +00:00
_columns = {
2012-12-21 16:48:08 +00:00
' group_invoice_so_lines ' : fields . boolean ( ' Generate invoices based on the sales order lines ' ,
2012-09-20 14:36:16 +00:00
implied_group = ' sale.group_invoice_so_lines ' ,
2012-12-21 16:48:08 +00:00
help = " To allow your salesman to make invoices for sales order lines using the menu ' Lines to Invoice ' . " ) ,
2012-09-12 07:14:13 +00:00
' timesheet ' : fields . boolean ( ' Prepare invoices based on timesheets ' ,
2013-09-17 13:08:14 +00:00
help = ' For modifying account analytic view to show important data to project manager of services companies. '
' You can also view the report of account analytic summary user-wise as well as month wise. \n '
' -This installs the module account_analytic_analysis. ' ) ,
2012-09-12 07:14:13 +00:00
' module_account_analytic_analysis ' : fields . boolean ( ' Use contracts management ' ,
2013-09-17 13:08:14 +00:00
help = ' Allows to define your customer contracts conditions: invoicing '
' method (fixed price, on timesheet, advance invoice), the exact pricing '
' (650€/day for a developer), the duration (one year support contract). \n '
' You will be able to follow the progress of the contract and invoice automatically. \n '
' -It installs the account_analytic_analysis module. ' ) ,
2012-09-12 07:14:13 +00:00
' time_unit ' : fields . many2one ( ' product.uom ' , ' The default working time unit for services is ' ) ,
' group_sale_pricelist ' : fields . boolean ( " Use pricelists to adapt your price per customers " ,
2012-03-22 13:03:20 +00:00
implied_group = ' product.group_sale_pricelist ' ,
2012-06-25 12:36:59 +00:00
help = """ Allows to manage different prices based on rules per category of customers.
2012-11-07 07:05:15 +00:00
Example : 10 % for retailers , promotion of 5 EUR on this product , etc . """ ),
2013-03-11 11:11:52 +00:00
' group_uom ' : fields . boolean ( " Allow using different units of measure " ,
2012-03-22 13:03:20 +00:00
implied_group = ' product.group_uom ' ,
2012-04-03 09:52:10 +00:00
help = """ Allows you to select and maintain different units of measure for products. """ ) ,
2012-12-21 16:48:08 +00:00
' group_discount_per_so_line ' : fields . boolean ( " Allow setting a discount on the sales order lines " ,
2012-03-21 14:26:29 +00:00
implied_group = ' sale.group_discount_per_so_line ' ,
2012-12-21 16:48:08 +00:00
help = " Allows you to apply some discount per sales order line. " ) ,
2013-02-20 08:27:07 +00:00
' group_product_variant ' : fields . boolean ( " Support multiple variants per products " ,
implied_group = ' product.group_product_variant ' ,
help = """ Allow to manage several variants per product. As an example, if you sell T-Shirts, for the same " Linux T-Shirt " , you may have variants on sizes or colors; S, M, L, XL, XXL. """ ) ,
2012-09-12 07:14:13 +00:00
' module_warning ' : fields . boolean ( " Allow configuring alerts by customer or products " ,
2013-07-24 13:45:48 +00:00
help = ' Allow to configure notification on products and trigger them when a user wants to sell a given product or a given customer. \n '
2013-09-17 13:08:14 +00:00
' Example: Product: this product is deprecated, do not purchase more than 5. \n '
' Supplier: don \' t forget to ask for an express delivery. ' ) ,
2012-09-12 07:14:13 +00:00
' module_sale_margin ' : fields . boolean ( " Display margins on sales orders " ,
2013-07-24 13:45:48 +00:00
help = ' This adds the \' Margin \' on sales order. \n '
2013-09-17 13:08:14 +00:00
' This gives the profitability by calculating the difference between the Unit Price and Cost Price. \n '
' -This installs the module sale_margin. ' ) ,
2014-01-25 23:08:47 +00:00
' module_website_quote ' : fields . boolean ( " Allow online quotations and templates " ,
2014-01-13 10:36:17 +00:00
help = ' This adds the online quotation ' ) ,
2012-09-12 07:14:13 +00:00
' module_sale_journal ' : fields . boolean ( " Allow batch invoicing of delivery orders through journals " ,
2013-07-24 13:45:48 +00:00
help = ' Allows you to categorize your sales and deliveries (picking lists) between different journals, '
2013-09-17 13:08:14 +00:00
' and perform batch operations on journals. \n '
' -This installs the module sale_journal. ' ) ,
2012-09-12 07:14:13 +00:00
' module_analytic_user_function ' : fields . boolean ( " One employee can have different roles per contract " ,
2013-07-24 13:45:48 +00:00
help = ' Allows you to define what is the default function of a specific user on a given account. \n '
2013-09-17 13:08:14 +00:00
' This is mostly used when a user encodes his timesheet. The values are retrieved and the fields are auto-filled. '
' But the possibility to change these values is still available. \n '
' -This installs the module analytic_user_function. ' ) ,
2012-04-03 14:39:13 +00:00
' module_project ' : fields . boolean ( " Project " ) ,
2012-12-19 09:49:42 +00:00
' module_sale_stock ' : fields . boolean ( " Trigger delivery orders automatically from sales orders " ,
2013-07-25 06:14:42 +00:00
help = ' Allows you to Make Quotation, Sale Order using different Order policy and Manage Related Stock. \n '
2013-09-17 13:08:14 +00:00
' -This installs the module sale_stock. ' ) ,
2014-01-15 11:05:47 +00:00
' group_sale_delivery_address ' : fields . boolean ( " Allow a different address for delivery and invoicing " ,
implied_group = ' sale.group_delivery_invoice_address ' ,
help = " Allows you to specify different delivery and invoice addresses on a sales order. " ) ,
2012-02-29 09:50:21 +00:00
}
2012-03-07 05:44:40 +00:00
def default_get ( self , cr , uid , fields , context = None ) :
2012-03-21 13:45:43 +00:00
ir_model_data = self . pool . get ( ' ir.model.data ' )
2012-03-07 05:44:40 +00:00
res = super ( sale_configuration , self ) . default_get ( cr , uid , fields , context )
2012-04-03 14:39:13 +00:00
if res . get ( ' module_project ' ) :
user = self . pool . get ( ' res.users ' ) . browse ( cr , uid , uid , context )
res [ ' time_unit ' ] = user . company_id . project_time_mode_id . id
else :
2014-01-29 03:08:53 +00:00
product = ir_model_data . xmlid_to_object ( cr , uid , ' product.product_product_consultant ' )
2014-01-27 10:35:05 +00:00
if product and product . exists ( ) :
2013-01-29 13:36:31 +00:00
res [ ' time_unit ' ] = product . uom_id . id
2012-03-07 05:44:40 +00:00
return res
2012-03-02 08:48:46 +00:00
2012-03-21 13:45:43 +00:00
def _get_default_time_unit ( self , cr , uid , context = None ) :
ids = self . pool . get ( ' product.uom ' ) . search ( cr , uid , [ ( ' name ' , ' = ' , _ ( ' Hour ' ) ) ] , context = context )
return ids and ids [ 0 ] or False
2012-02-29 09:50:21 +00:00
_defaults = {
2012-03-21 13:45:43 +00:00
' time_unit ' : _get_default_time_unit ,
2012-02-29 09:50:21 +00:00
}
2012-03-07 07:19:05 +00:00
2012-03-07 05:44:40 +00:00
def set_sale_defaults ( self , cr , uid , ids , context = None ) :
2012-03-21 14:05:19 +00:00
ir_model_data = self . pool . get ( ' ir.model.data ' )
2012-02-29 09:50:21 +00:00
wizard = self . browse ( cr , uid , ids ) [ 0 ]
if wizard . time_unit :
2014-01-29 05:35:33 +00:00
product = ir_model_data . xmlid_to_object ( cr , uid , ' product.product_product_consultant ' )
2014-01-27 10:35:05 +00:00
if product and product . exists ( ) :
2013-01-11 13:25:31 +00:00
product . write ( { ' uom_id ' : wizard . time_unit . id , ' uom_po_id ' : wizard . time_unit . id } )
2013-11-30 15:46:59 +00:00
else :
2013-01-29 13:36:31 +00:00
_logger . warning ( " Product with xml_id ' product.product_product_consultant ' not found, UoMs not updated! " )
2012-02-29 09:50:21 +00:00
2012-04-03 14:39:13 +00:00
if wizard . module_project and wizard . time_unit :
2012-03-21 13:45:43 +00:00
user = self . pool . get ( ' res.users ' ) . browse ( cr , uid , uid , context )
user . company_id . write ( { ' project_time_mode_id ' : wizard . time_unit . id } )
2012-04-03 14:01:20 +00:00
return { }
2012-03-07 08:56:32 +00:00
def onchange_task_work ( self , cr , uid , ids , task_work , context = None ) :
2012-03-21 13:45:43 +00:00
return { ' value ' : {
' module_project_timesheet ' : task_work ,
' module_project_mrp ' : task_work ,
} }
2012-03-07 08:56:32 +00:00
2012-03-30 12:38:33 +00:00
def onchange_timesheet ( self , cr , uid , ids , timesheet , context = None ) :
return { ' value ' : {
' timesheet ' : timesheet ,
' module_account_analytic_analysis ' : timesheet ,
} }
2012-03-29 14:21:21 +00:00
class account_config_settings ( osv . osv_memory ) :
_inherit = ' account.config.settings '
_columns = {
2012-10-03 09:16:21 +00:00
' module_sale_analytic_plans ' : fields . boolean ( ' Use multiple analytic accounts on sales ' ,
2012-06-25 12:36:59 +00:00
help = """ This allows install module sale_analytic_plans. """ ) ,
2012-09-12 07:14:13 +00:00
' group_analytic_account_for_sales ' : fields . boolean ( ' Analytic accounting for sales ' ,
2012-03-29 14:21:21 +00:00
implied_group = ' sale.group_analytic_accounting ' ,
2012-12-19 09:49:42 +00:00
help = " Allows you to specify an analytic account on sales orders. " ) ,
2012-03-29 14:21:21 +00:00
}
2012-06-08 11:56:39 +00:00
def onchange_sale_analytic_plans ( self , cr , uid , ids , module_sale_analytic_plans , context = None ) :
2012-06-25 12:36:59 +00:00
""" change group_analytic_account_for_sales following module_sale_analytic_plans """
2013-03-22 09:58:45 +00:00
if not module_sale_analytic_plans :
return { }
2012-06-25 12:36:59 +00:00
return { ' value ' : { ' group_analytic_account_for_sales ' : module_sale_analytic_plans } }
2012-03-29 14:21:21 +00:00
2012-03-20 13:50:02 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: