[IMP]: Improved as per specifications.

bzr revid: uco@tinyerp.com-20120223123556-gnpo1bu9bpnzs3jc
This commit is contained in:
Ujjvala Collins (OpenERP)
2012-02-23 18:05:56 +05:30
parent 187b0d3532
commit 0be2e5e274
2 changed files with 164 additions and 135 deletions
+106 -80
View File
@@ -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:
+58 -55
View File
@@ -501,68 +501,71 @@
<menuitem id="base.menu_invoiced" name="Invoicing" parent="base.menu_base_partner" sequence="5" groups="base.group_extended"/>
<menuitem id="menu_invoicing_sales_order_lines" parent="base.menu_invoiced" action="action_order_line_tree2" sequence="2" groups="base.group_no_one"/>
<!-- configartion view -->
<!-- Configartion View -->
<record id="view_config_picking_policy_11" model="ir.ui.view">
<field name="name">Setup Your Invoicing Method</field>
<record id="view_config_picking_policy_sales" model="ir.ui.view">
<field name="name">Configure Sales Applications</field>
<field name="model">sale.config.picking_policy</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_config_picking_policy_1"/>
<field name="inherit_id" ref="base.view_config_picking_policy"/>
<field name="arch" type="xml">
<!--data>
< form position="attributes">
<attribute name="string">Setup your Invoicing Method</attribute>
</form>
<xpath expr="//separator[@string=&quot;title&quot;]" position="attributes">
<attribute name="string">Setup your Invoicing Method</attribute>
</xpath>
<xpath expr="//label[@string='description']" position="attributes">
<attribute name="string">This tool will help you to install the right module and configure the system according to the method you use to invoice your customers.</attribute>
</xpath-->
<field name="picking_policy" position="before">
<newline/>
<field name="time_unit" />
<newline/>
</field>
<!--group string="res_config_contents" position="replace">
<group colspan="4" col="4">
<field name="sale_orders" on_change="onchange_order(sale_orders,deli_orders)"/>
<newline/>
<field name="deli_orders" on_change="onchange_order(sale_orders,deli_orders)"/>
<newline/>
<field name="task_work"/>
<newline/>
<field name="timesheet"/>
<newline/>
<separator string="Options" colspan="4"/>
<field name="order_policy" attrs="{'invisible':['|',('sale_orders','!=',True),('deli_orders','!=',True)]}"/>
<newline/>
<field name="charge_delivery" attrs="{'invisible':[('sale_orders','!=',True), ('deli_orders','!=',True)]}"/>
<newline/>
<field name="time_unit" widget="selection" domain="[('category_id','=',%(product.uom_categ_wtime)s)]" attrs="{'invisible':[('task_work','=',False),('timesheet','=',False)]}"/>
<xpath expr="//form/separator[@string='Contracts']" position="before">
<separator string="Picking and Invoice Policy" colspan="4"/>
<group colspan="4" col="8">
<group colspan="4" col="4">
<field name="sale_orders" on_change="onchange_order(sale_orders,deli_orders)"/>
<newline/>
<field name="deli_orders" on_change="onchange_order(sale_orders,deli_orders)"/>
<newline/>
<field name="task_work"/>
<newline/>
<field name="timesheet"/>
<newline/>
</group>
<group colspan="4" col="4">
<newline/>
<field name="order_policy" attrs="{'invisible':['|',('sale_orders','!=',True),('deli_orders','!=',True)]}"/>
<newline/>
<field name="charge_delivery" attrs="{'invisible':[('sale_orders','!=',True), ('deli_orders','!=',True)]}"/>
<newline/>
<field name="picking_policy" attrs="{'invisible':[('deli_orders','!=',True)]}"/>
<newline/>
<field name="time_unit" attrs="{'invisible':[('task_work','!=',True),('timesheet','!=',True)]}"/>
</group>
</group>
</group>
</data-->
<separator string="Sale Order" colspan="4"/>
<group colspan="4" col="8">
<group colspan="4" col="4">
<field name="group_sale_pricelist_per_customer"/>
<newline/>
<group colspan="4" col="4">
<field name="tax_policy" align="0.0"/>
<field name="tax_value" nolabel="1" align="0.0"/>
</group>
<newline/>
<field name="sale_margin"/>
<newline/>
<field name="group_sale_alerts_per_customer_products"/>
<newline/>
</group>
<group colspan="4" col="4">
<newline/>
<field name="group_sale_uom_per_product"/>
<newline/>
<field name="group_sale_delivery_address"/>
<newline/>
<field name="group_sale_disc_per_sale_order_line"/>
<newline/>
<field name="group_sale_notes_subtotal"/>
<newline/>
<field name="sale_journal"/>
<newline/>
</group>
</group>
</xpath>
</field>
</record>
<!--record id="action_config_picking_policy" model="ir.actions.act_window">
<field name="name">Setup your Invoicing Method</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">sale.config.picking_policy</field>
<field name="view_id" ref="view_config_picking_policy"/>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<register configuration wizard >
<record id="config_wizard_step_sale_picking_policy" model="ir.actions.todo">
<field name="action_id" ref="action_config_picking_policy"/>
<field name="category_id" ref="base.category_sales_management_config"/>
<field name="type">once</field>
</record-->
</data>
</openerp>