usability improvement for crm, product, sale

bzr revid: rga@rga-desktop-20100525103859-a6hnc19h4m2rzfeq
This commit is contained in:
rga 2010-05-25 16:08:59 +05:30
parent 6df9520176
commit d11e854163
12 changed files with 78 additions and 72 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Attendee form view-->
<record id="base_calendar_attendee_form_view" model="ir.ui.view">
@ -24,7 +24,7 @@
<field name="user_id" string="Invited User"/>
<newline/>
<field name="partner_address_id"
string="Partner Contact" />
string="Contact" />
<field name="partner_id"
string="Partner" readonly="1" />
</group>
@ -67,7 +67,7 @@
</form>
</field>
</record>
<!-- Attendee tree view-->
<record id="base_calendar_attendee_tree_view" model="ir.ui.view">
@ -86,9 +86,9 @@
</tree>
</field>
</record>
<!-- Attendee search view-->
<record id="base_calendar_attendee_search_view" model="ir.ui.view">
<field name="name">calendar.attendee.search</field>
<field name="model">calendar.attendee</field>
@ -108,23 +108,19 @@
<field name="cutype" string="Invitation type" select="1"/>
<field name="event_date" select="1"/>
<newline/>
<group expand="0" string="Group By..." colspan="16">
<filter string="Type" icon="terp-project" help="Invitation Type"
domain="[]" context="{'group_by':'cutype'}" />
<filter string="Role" icon="terp-project"
domain="[]" context="{'group_by':'role'}" />
<filter string="Required Reply" icon="terp-crm"
domain="[]" context="{'group_by':'rsvp'}" />
<separator orientation="vertical" />
<group expand="0" string="Group By...">
<filter string="User" icon="terp-partner" domain="[]"
context="{'group_by':'user_id'}" />
<filter string="Contact" icon="terp-partner" domain="[]"
context="{'group_by':'partner_address_id'}" />
<filter string="Type" icon="terp-project" help="Invitation Type"
domain="[]" context="{'group_by':'cutype'}" />
<filter string="State" icon="terp-project" help="Invitation Type"
domain="[]" context="{'group_by':' state'}" />
</group>
</search>
</field>
</record>
<record id="action_view_attendee_form" model="ir.actions.act_window">
<field name="name">Event Invitations</field>
<field name="type">ir.actions.act_window</field>
@ -136,12 +132,12 @@
</record>
<!-- Calenadar's menu -->
<menuitem id="base.menu_calendar_configuration" name="Calendar"
parent="base.menu_base_config" sequence="10" />
<!-- Invitation menu -->
<menuitem id="menu_attendee_invitations"
name="Event Invitations" parent="base.menu_calendar_configuration"
sequence="10" action="action_view_attendee_form" />
@ -181,7 +177,6 @@
</tree>
</field>
</record>
<record id="action_res_alarm_view" model="ir.actions.act_window">
<field name="name">Available Alarms</field>
<field name="type">ir.actions.act_window</field>
@ -189,7 +184,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Menu for Alarms-->
<menuitem id="menu_crm_meeting_avail_alarm"
@ -296,7 +291,7 @@
nolabel="1" widget="one2many" mode="tree,form">
<tree string="Invitation details" editable="top">
<field name="email" />
<field name="role" select="1" />
<field name="role" width="200" select="1" />
<field name="state" />
</tree>
<form string="Invitation details">

View File

@ -75,24 +75,23 @@
<field name="name" string="Summary"/>
<field name="date" string="Planned Date"/>
<field name="user_id"/>
<button string="Schedule a Meeting"
name="action_make_meeting"
icon="gtk-redo"
type="object" />
<button string="Convert to Opportunity"
name="%(phonecall2opportunity_act)d"
icon="gtk-index" type="action"
attrs="{'invisible':[('opportunity_id','!=',False)]}" />
<field name="partner_phone"/>
<field name="duration"/>
<field name="section_id" colspan="1" widget="selection" />
<button string="Convert to Opportunity"
name="%(phonecall2opportunity_act)d"
icon="gtk-index" type="action"
attrs="{'invisible':[('opportunity_id','!=',False)]}" />
<button string="Schedule a Meeting"
name="action_make_meeting"
icon="gtk-redo"
type="object" />
<label colspan="6" string=""/>
<button string="Schedule Other Call"
icon="gtk-redo"
name="%(phonecall_to_phonecall_act)d"
type="action" />
</group>
<group col="3" colspan="2">
<separator colspan="3" string="Contacts" />
@ -150,18 +149,17 @@
<field name="name" string="Summary"/>
<field name="date" string="Planned Date"/>
<field name="user_id"/>
<button string="Convert to Opportunity"
name="%(phonecall2opportunity_act)d"
icon="gtk-index" type="action"
attrs="{'invisible':[('opportunity_id','!=',False)]}" />
<field name="partner_phone"/>
<field name="duration"/>
<field name="section_id" colspan="1" widget="selection" />
<button string="Schedule a Meeting"
name="action_make_meeting"
icon="gtk-redo"
type="object" />
<field name="partner_phone"/>
<field name="duration"/>
<field name="section_id" colspan="1" widget="selection" />
<button string="Convert to Opportunity"
name="%(phonecall2opportunity_act)d"
icon="gtk-index" type="action"
attrs="{'invisible':[('opportunity_id','!=',False)]}" />
<label colspan="6" string=""/>
<button string="Schedule Other Call"
icon="gtk-redo"

View File

@ -4,6 +4,9 @@
<menuitem id="base.menu_crm_configuration" name="Cases"
parent="base.menu_base_config" sequence="0" groups="base.group_extended"/>
<menuitem id="base.menu_crm_sales" name="Sales"
parent="base.menu_base_config" sequence="0" groups="base.group_extended"/>
<menuitem id="base.next_id_64" name="Reporting"
parent="base.menu_base_partner" sequence="8" />

View File

@ -107,7 +107,7 @@
help="My section" />
</field>
<field name="company_id" widget="selection">
<field name="company_id" widget="selection" groups="base.group_multi_company">
<filter icon="terp-crm"
context="{'invisible_section': False}"
domain="[('section_id.user_id.company_id','=',uid)]"

View File

@ -107,7 +107,7 @@
help="My section" />
</field>
<field name="company_id" widget="selection">
<field name="company_id" widget="selection" groups="base.group_multi_company">
<filter icon="terp-crm"
context="{'invisible_section': False}"
domain="[('section_id.user_id.company_id','=',uid)]"

View File

@ -17,6 +17,7 @@
<field name="date_planned"/>
<field name="warehouse_id" colspan="4"/>
<newline/>
<separator colspan="4"/>
<group col="2" colspan="4">
<button icon='gtk-cancel' special="cancel"
string="Cancel" />

View File

@ -12,15 +12,15 @@
<field name="user_salesman_id" />
<field name="partner_id" on_change="onchange_partner_pricelist(partner_id)"/>
<field name="contract_number" groups="base.group_extended"/>
</group>
<notebook colspan="4">
<page string="Sale Order ">
<page string="Sale Order ">
<field name="lines" colspan="4" nolabel="1">
<tree string="Order lines" editable="bottom">
<field name="product_id" on_change="onchange_product_id(parent.pricelist_id,product_id,qty,parent.partner_id)" width="275" />
<field name="qty" />
<field name="qty_rfd" groups="base.group_extended"/>
<field name="qty_rfd" groups="base.group_extended"/>
<field name="discount" on_change="onchange_discount(discount,price_unit)" />
<field name="price_ded" on_change="onchange_ded(price_ded, price_unit)" />
<field name="price_unit" readonly="1"/>
@ -729,7 +729,7 @@
<field name="expense_pdt"/>
<field name="am_out"/>
<field name="disc_controle"/>
<field name="company_id" groups="base.group_extended,base.group_multi_company""/>
<field name="company_id" groups="base.group_extended,base.group_multi_company"/>
</group>
<group colspan="2" col="2" name="Prices">
<separator string="Prices" colspan="2"/>

View File

@ -262,7 +262,7 @@ class product_template(osv.osv):
'produce_delay': fields.float('Manufacturing Lead Time', help="Average time to produce this product. This is only for the production order and, if it is a multi-level bill of material, it's only for the level of this product. Different lead times will be summed for all levels and purchase orders."),
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
'rental': fields.boolean('Can be Rent'),
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]"),
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Sale Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
'standard_price': fields.float('Cost Price', required=True, digits_compute=dp.get_precision('Account'), help="Product's cost for accounting stock valuation. It is the base price for the supplier price."),
'volume': fields.float('Volume', help="The volume in m3."),
@ -586,7 +586,7 @@ class product_packaging(osv.osv):
_rec_name = 'ean'
_columns = {
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of packaging."),
'name' : fields.char('Description', size=64),
'name' : fields.text('Description', size=64),
'qty' : fields.float('Quantity by Package',
help="The total number of products you can put by pallet or box."),
'ul' : fields.many2one('product.ul', 'Type of Package', required=True),
@ -645,9 +645,9 @@ class product_supplierinfo(osv.osv):
_name = "product.supplierinfo"
_description = "Information about a product supplier"
_columns = {
'name' : fields.many2one('res.partner', 'Partner', required=True, ondelete='cascade', help="Supplier of this product"),
'product_name': fields.char('Partner Product Name', size=128, help="This partner's product name will be used when printing a request for quotation. Keep empty to use the internal one."),
'product_code': fields.char('Partner Product Code', size=64, help="This partner's product code will be used when printing a request for quotation. Keep empty to use the internal one."),
'name' : fields.many2one('res.partner', 'Supplier', required=True, ondelete='cascade', help="Supplier of this product"),
'product_name': fields.char('Supplier Product Name', size=128, help="This supplier's product name will be used when printing a request for quotation. Keep empty to use the internal one."),
'product_code': fields.char('Supplier Product Code', size=64, help="This supplier's product code will be used when printing a request for quotation. Keep empty to use the internal one."),
'sequence' : fields.integer('Sequence', help="Assigns the priority to the list of product supplier."),
'qty' : fields.float('Minimal Quantity', required=True, help="The minimal quantity to purchase to this supplier, expressed in the default unit of measure."),
'product_id' : fields.many2one('product.template', 'Product', required=True, ondelete='cascade', select=True),

View File

@ -17,18 +17,22 @@
<field name="default_code"/>
<field name="name"/>
<field name="categ_id" widget="selection" operator="child_of"/>
<newline/>
<group col='8' colspan='15' expand='1' string='Group by...'>
<newline/>
<group expand="0" string="Extended filters..." groups="base.group_extended">
<field name="pricelist_id" widget="selection" context="{'pricelist': self}" />
</group>
<newline/>
<group expand='0' string='Group by...' groups="base.group_extended">
<filter string='Category' icon="terp-stock" domain="[]" context="{'group_by' : 'categ_id'}" />
<separator orientation="vertical"/>
<filter string='Default UOM' icon="terp-stock" domain="[]" context="{'group_by' : 'uom_id'}" />
<separator orientation="vertical"/>
<filter string='Type' icon="terp-stock" domain="[]" context="{'group_by' : 'type'}" />
</group>
<newline/>
<newline/>
<group col='8' colspan='14' expand="0" string="Extended options..." groups="base.group_extended">
<field name="pricelist_id" widget="selection" context="{'pricelist': self}" />
</group>
</group>
</search>
</field>
</record>
@ -104,7 +108,7 @@
</group>
<group colspan="2" col="2" name="uom">
<separator string="UOM" colspan="2"/>
<separator string="Unit of Measure" colspan="2"/>
<field name="uom_id" on_change="onchange_uom(uom_id,uom_po_id)" widget="selection"/>
<field name="uom_po_id" widget="selection"/>
</group>
@ -139,7 +143,7 @@
</page>
<page string="Prices &amp; Suppliers">
<separator string="Base Prices" colspan="4"/>
<separator string=" Base Prices" colspan="4"/>
<field name="standard_price" attrs="{'readonly':[('cost_method','=','average')]}"/>
<field name="list_price"/>
<newline/>
@ -175,8 +179,8 @@
<field name="height"/>
<field name="width"/>
<field name="length"/>
<separator colspan="4" string="Other Info"/>
<field colspan="4" name="name"/>
<separator colspan="4" string="Description"/>
<field colspan="4" name="name" nolabel="1"/>
</form>
</field>
</page>

View File

@ -10,16 +10,17 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Price list">
<field name="price_list" />
<field name="price_list" widget="selection"/>
<field name="qty1" colspan="2" />
<field name="qty2" colspan="2" />
<field name="qty3" colspan="2" />
<field name="qty4" colspan="2" />
<field name="qty5" colspan="2" />
<button icon='gtk-cancel' special="cancel"
string="Close" />
<button name="print_report" string="Print Report"
colspan="1" type="object" icon="gtk-print" />
<separator colspan="4"/>
<group col="2" colspan="4">
<button icon="gtk-cancel" special="cancel" string="Close"/>
<button name="print_report" string="Print Report" type="object" icon="gtk-print"/>
</group>
</form>
</field>
</record>

View File

@ -227,7 +227,7 @@ class sale_order(osv.osv):
'partner_id': fields.many2one('res.partner', 'Customer', readonly=True, states={'draft': [('readonly', False)]}, required=True, change_default=True, select=True),
'partner_invoice_id': fields.many2one('res.partner.address', 'Invoice Address', readonly=True, required=True, states={'draft': [('readonly', False)]}),
'partner_order_id': fields.many2one('res.partner.address', 'Ordering Contact', readonly=True, required=True, states={'draft': [('readonly', False)]}, help="The name and address of the contact who requested the order or quotation."),
'partner_shipping_id': fields.many2one('res.partner.address', 'Shipping Address', readonly=True, required=True, states={'draft': [('readonly', False)]}),
'partner_shipping_id': fields.many2one('res.partner.address', 'Shipping Address', readonly=True, required=True, states={'draft': [('readonly', False)]}, help="Shipping address for current sale order"),
'incoterm': fields.selection(_incoterm_get, 'Incoterm', size=3),
'picking_policy': fields.selection([('direct', 'Partial Delivery'), ('one', 'Complete Delivery')],
@ -243,7 +243,7 @@ class sale_order(osv.osv):
- The 'Shipping & Manual Invoice' will create the picking order directly and wait for the user to manually click on the 'Invoice' button to generate the draft invoice.
- The 'Invoice on Order After Delivery' choice will generate the draft invoice based on sale order after all picking lists have been finished.
- The 'Invoice from the picking' choice is used to create an invoice during the picking process."""),
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Pricelist version for current sale order"),
'project_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True, states={'draft': [('readonly', False)]}),
'order_line': fields.one2many('sale.order.line', 'order_id', 'Order Lines', readonly=True, states={'draft': [('readonly', False)]}),
@ -824,7 +824,7 @@ class sale_order_line(osv.osv):
'property_ids': fields.many2many('mrp.property', 'sale_order_line_property_rel', 'order_id', 'property_id', 'Properties', readonly=True, states={'draft':[('readonly',False)]}),
'address_allotment_id': fields.many2one('res.partner.address', 'Allotment Partner'),
'product_uom_qty': fields.float('Quantity (UoM)', digits=(16, 2), required=True, readonly=True, states={'draft':[('readonly',False)]}),
'product_uom': fields.many2one('product.uom', 'Product UoM', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'product_uom': fields.many2one('product.uom', 'Unit of Measure ', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'product_uos_qty': fields.float('Quantity (UoS)', readonly=True, states={'draft':[('readonly',False)]}),
'product_uos': fields.many2one('product.uom', 'Product UoS'),
'product_packaging': fields.many2one('product.packaging', 'Packaging'),
@ -1036,7 +1036,7 @@ class sale_order_line(osv.osv):
if product_obj.uos_id.category_id.id != uos2.category_id.id:
uos = False
else:
uos = False
uos = False
if product_obj.description_sale:
result['notes'] = product_obj.description_sale
fpos = fiscal_position and self.pool.get('account.fiscal.position').browse(cr, uid, fiscal_position) or False

View File

@ -380,7 +380,8 @@
<field name="delay" groups="base.group_extended"/>
<field name="price_subtotal"/>
<field name="th_weight"/>
<field colspan="4" name="tax_id" domain="[('parent_id','=',False),('type_tax_use','&lt;&gt;','purchase')]"/>
<separator colspan="4" string="Taxes"/>
<field colspan="4" name="tax_id" domain="[('parent_id','=',False),('type_tax_use','&lt;&gt;','purchase')]" nolabel="1"/>
<separator colspan="4" string="States"/>
<field name="state"/>
<group col="2" colspan="2">
@ -397,12 +398,12 @@
<!-- <page string="Properties" groups="base.group_extended">-->
<!-- <field name="property_ids" nolabel="1"/>-->
<!-- </page>-->
<page string="Notes">
<field colspan="4" name="notes" nolabel="1"/>
</page>
<page string="Invoice Lines" groups="base.group_extended">
<field colspan="4" name="invoice_lines" nolabel="1"/>
</page>
<page string="Notes">
<field colspan="4" name="notes" nolabel="1"/>
</page>
</notebook>
</form>
</field>
@ -443,10 +444,14 @@
<filter icon="terp-purchase" string="Shipped"
domain="[('state','=','done')]"
name="unshipped"
separator="1" />
/>
<filter icon="terp-purchase" string="Uninvoiced" name="uninvoiced"
domain="[('invoiced','&lt;&gt;', 1),('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]"
separator="1" />
domain="[('invoiced','&lt;&gt;', 1),('state','&lt;&gt;','draft'),('state','&lt;&gt;','cancel')]"
/>
<filter icon="terp-purchase" string="Sale Order"
domain="[('state','=','confirmed')]"
name="sale order"
/>
<separator orientation="vertical"/>
<field name="order_id"/>
<field name="order_partner_id"/>
@ -468,7 +473,6 @@
<field name="res_model">sale.order.line</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="context">{"search_default_uninvoiced":1,"search_default_unshipped":1}</field>
<field name="search_view_id" ref="view_sales_order_uninvoiced_line_filter" />
<field name="filter" eval="True"/>
</record>