From 0be2e5e274227ff82c3c460b10fb569f513a88f5 Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Thu, 23 Feb 2012 18:05:56 +0530 Subject: [PATCH] [IMP]: Improved as per specifications. bzr revid: uco@tinyerp.com-20120223123556-gnpo1bu9bpnzs3jc --- addons/sale/sale.py | 186 ++++++++++++++++++++++---------------- addons/sale/sale_view.xml | 113 ++++++++++++----------- 2 files changed, 164 insertions(+), 135 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 95d4e9762af..a0fe02dbffe 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -1334,90 +1334,116 @@ class sale_config_picking_policy(osv.osv_memory): _inherit = 'sale.config.picking_policy' _columns = { -# 'name': fields.char('Name', size=64), -# 'sale_orders': fields.boolean('Based on Sales Orders',), -# 'deli_orders': fields.boolean('Based on Delivery Orders'), -# 'task_work': fields.boolean('Based on Tasks\' Work'), -# 'timesheet': fields.boolean('Based on Timesheet'), -# 'order_policy': fields.selection([ -# ('manual', 'Invoice Based on Sales Orders'), -# ('picking', 'Invoice Based on Deliveries'), -# ], 'Main Method Based On', required=True, help="You can generate invoices based on sales orders or based on shippings."), -# 'charge_delivery': fields.boolean('Do you charge the delivery?'), - 'time_unit': fields.many2one('product.uom','Main Working Time Unit') + 'sale_orders': fields.boolean('Based on Sales Orders',), + 'deli_orders': fields.boolean('Based on Delivery Orders'), + 'task_work': fields.boolean('Based on Tasks\' Work'), + 'timesheet': fields.boolean('Based on Timesheet'), + 'order_policy': fields.selection([ + ('manual', 'Invoice Based on Sales Orders'), + ('picking', 'Invoice Based on Deliveries'), + ], 'Main Method Based On', required=True, help="You can generate invoices based on sales orders or based on shippings."), + 'charge_delivery': fields.boolean('Do you charge the delivery?'), + 'time_unit': fields.many2one('product.uom','Main Working Time Unit'), + 'picking_policy' : fields.boolean("Deliver all products at once?"), + 'group_sale_pricelist_per_customer':fields.boolean("Activate pricelist to manage prices per customer "), + 'group_sale_uom_per_product':fields.boolean("Allow different unit of measure per product"), + 'group_sale_delivery_address':fields.boolean(" Allow delivery address different from invoice address"), + 'group_sale_disc_per_sale_order_line':fields.boolean("Allow to apply discounts per sale order lines "), + 'group_sale_notes_subtotal':fields.boolean("Allow notes and subtotals"), + 'group_sale_alerts_per_customer_products':fields.boolean("Allow to define alerts by products or customers"), + 'tax_value' : fields.float('Value'), + 'tax_policy': fields.selection([ + ('no_tax', 'No Tax'), + ('global_on_order', 'Global On Order'), + ('on_order_line', 'On Order Lines'), + ], 'Taxes'), + 'sale_margin' : fields.boolean("Display Margin For Users"), + 'sale_journal' : fields.boolean("Invoice_journal?"), } + + def default_module_get(self, cr, uid, ids, context=None): + #TODO: Need to be implemented + return {} + _defaults = { -# 'order_policy': 'manual', + 'order_policy': 'manual', + 'tax_policy': 'no_tax', 'time_unit': lambda self, cr, uid, c: self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=c) and self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=c)[0] or False, + 'task_work': default_module_get, + 'timesheet': default_module_get, } -# -# def onchange_order(self, cr, uid, ids, sale, deli, context=None): -# res = {} -# if sale: -# res.update({'order_policy': 'manual'}) -# elif deli: -# res.update({'order_policy': 'picking'}) -# return {'value':res} -# -# def execute(self, cr, uid, ids, context=None): -# ir_values_obj = self.pool.get('ir.values') -# data_obj = self.pool.get('ir.model.data') -# menu_obj = self.pool.get('ir.ui.menu') -# module_obj = self.pool.get('ir.module.module') -# module_upgrade_obj = self.pool.get('base.module.upgrade') -# module_name = [] -# -# group_id = data_obj.get_object(cr, uid, 'base', 'group_sale_salesman').id -# -# wizard = self.browse(cr, uid, ids)[0] -# -# if wizard.sale_orders: -# menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_invoicing_sales_order_lines').id -# menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]}) -# -# if wizard.deli_orders: -# menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_action_picking_list_to_invoice').id -# menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]}) -# -# if wizard.task_work: -# module_name.append('project_timesheet') -# module_name.append('project_mrp') -# module_name.append('account_analytic_analysis') -# -# if wizard.timesheet: -# module_name.append('account_analytic_analysis') -# -# if wizard.charge_delivery: -# module_name.append('delivery') -# -# if len(module_name): -# module_ids = [] -# need_install = False -# module_ids = [] -# for module in module_name: -# data_id = module_obj.name_search(cr, uid , module, [], '=') -# module_ids.append(data_id[0][0]) -# -# for module in module_obj.browse(cr, uid, module_ids): -# if module.state == 'uninstalled': -# module_obj.state_update(cr, uid, [module.id], 'to install', ['uninstalled'], context) -# need_install = True -# cr.commit() -# if need_install: -# pooler.restart_pool(cr.dbname, update_module=True)[1] -# -# if wizard.time_unit: -# prod_id = data_obj.get_object(cr, uid, 'product', 'product_consultant').id -# product_obj = self.pool.get('product.product') -# product_obj.write(cr, uid, prod_id, {'uom_id':wizard.time_unit.id, 'uom_po_id': wizard.time_unit.id}) -# -# ir_values_obj.set(cr, uid, 'default', False, 'order_policy', ['sale.order'], wizard.order_policy) -# if wizard.task_work and wizard.time_unit: -# company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id -# self.pool.get('res.company').write(cr, uid, [company_id], { -# 'project_time_mode_id': wizard.time_unit.id -# }, context=context) -# + + def onchange_order(self, cr, uid, ids, sale, deli, context=None): + res = {} + if sale: + res.update({'order_policy': 'manual'}) + elif deli: + res.update({'order_policy': 'picking'}) + return {'value':res} + + def write(self, cr, uid, ids, vals, context=None): + self.execute(cr, uid, ids, context=context) + return super(sale_config_picking_policy, self).write(cr, uid, ids, vals, context=context) + + def execute(self, cr, uid, ids, context=None): + ir_values_obj = self.pool.get('ir.values') + data_obj = self.pool.get('ir.model.data') + menu_obj = self.pool.get('ir.ui.menu') + module_obj = self.pool.get('ir.module.module') + module_upgrade_obj = self.pool.get('base.module.upgrade') + module_name = [] + + group_id = data_obj.get_object(cr, uid, 'base', 'group_sale_salesman').id + + wizard = self.browse(cr, uid, ids)[0] + + if wizard.sale_orders: + menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_invoicing_sales_order_lines').id + menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]}) + + if wizard.deli_orders: + menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_action_picking_list_to_invoice').id + menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]}) + + if wizard.task_work: + module_name.append('project_timesheet') + module_name.append('project_mrp') + module_name.append('account_analytic_analysis') + + if wizard.timesheet: + module_name.append('account_analytic_analysis') + + if wizard.charge_delivery: + module_name.append('delivery') + + if len(module_name): + module_ids = [] + need_install = False + module_ids = [] + for module in module_name: + data_id = module_obj.name_search(cr, uid , module, [], '=') + module_ids.append(data_id[0][0]) + + for module in module_obj.browse(cr, uid, module_ids): + if module.state == 'uninstalled': + module_obj.state_update(cr, uid, [module.id], 'to install', ['uninstalled'], context) + need_install = True + cr.commit() + if need_install: + pooler.restart_pool(cr.dbname, update_module=True)[1] + + if wizard.time_unit: + prod_id = data_obj.get_object(cr, uid, 'product', 'product_consultant').id + product_obj = self.pool.get('product.product') + product_obj.write(cr, uid, prod_id, {'uom_id':wizard.time_unit.id, 'uom_po_id': wizard.time_unit.id}) + + ir_values_obj.set(cr, uid, 'default', False, 'order_policy', ['sale.order'], wizard.order_policy) + if wizard.task_work and wizard.time_unit: + company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id + self.pool.get('res.company').write(cr, uid, [company_id], { + 'project_time_mode_id': wizard.time_unit.id + }, context=context) + sale_config_picking_policy() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 4c7cadd6cdb..b6b08732c9d 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -501,68 +501,71 @@ - + - - Setup Your Invoicing Method + + Configure Sales Applications sale.config.picking_policy form - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - -