[MERGE]: Merge with lp:~openerp-dev/openobject-addons/trunk-dev-addons2

bzr revid: rpa@tinyerp.com-20100514060432-30wqa3vwrdxul0y7
This commit is contained in:
rpa (Open ERP) 2010-05-14 11:34:32 +05:30
commit 594d903416
31 changed files with 1195 additions and 1060 deletions

View File

@ -36,7 +36,7 @@ class audittrail_rule(osv.osv):
"name": fields.char("Rule Name", size=32, required=True), "name": fields.char("Rule Name", size=32, required=True),
"object_id": fields.many2one('ir.model', 'Object', required=True), "object_id": fields.many2one('ir.model', 'Object', required=True),
"user_id": fields.many2many('res.users', 'audittail_rules_users', "user_id": fields.many2many('res.users', 'audittail_rules_users',
'user_id', 'rule_id', 'Users'), 'user_id', 'rule_id', 'Users', help="if User is not added then it will applicable for all users"),
"log_read": fields.boolean("Log reads"), "log_read": fields.boolean("Log reads"),
"log_write": fields.boolean("Log writes"), "log_write": fields.boolean("Log writes"),
"log_unlink": fields.boolean("Log deletes"), "log_unlink": fields.boolean("Log deletes"),

View File

@ -16,8 +16,9 @@
<field name="log_write" /> <field name="log_write" />
<field name="log_unlink" /> <field name="log_unlink" />
<field name="log_create" /> <field name="log_create" />
<field name="action_id" colspan="4" readonly="1"/> <separator string="Users (if User is not added then it will applicable for all users)" colspan="4" />
<field name="user_id" select="1" colspan="4"/> <field name="user_id" select="1" colspan="4" nolabel="1" />
<field name="action_id" colspan="4" readonly="1" groups="base.group_extended"/>
<field name="state" select="1" readonly="1" /> <field name="state" select="1" readonly="1" />
<group colspan="2" col="2"> <group colspan="2" col="2">
<button string="Subscribe" name="subscribe" <button string="Subscribe" name="subscribe"
@ -37,7 +38,7 @@
<tree string="AuditTrail Rules"> <tree string="AuditTrail Rules">
<field name="name" /> <field name="name" />
<field name="object_id"/> <field name="object_id"/>
<field name="user_id" /> <field name="user_id"/>
<field name="log_read" /> <field name="log_read" />
<field name="log_write" /> <field name="log_write" />
<field name="log_unlink" /> <field name="log_unlink" />
@ -46,7 +47,38 @@
</tree> </tree>
</field> </field>
</record> </record>
<!-- Audittrail rule Search View -->
<record id="view_audittrail_rule_filter" model="ir.ui.view">
<field name="name">Audittrail-rule Search</field>
<field name="model">audittrail.rule</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search rule">
<group>
<filter icon="terp-project"
string="Draft"
domain="[('state','=','draft')]"/>
<filter icon="terp-project"
name="subscribed"
string="Subscribed"
domain="[('state','=','subscribed')]"/>
<separator orientation="vertical"/>
<field name="name"/>
<field name="object_id" widget="selection"/>
<field name="user_id" widget="selection"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="State" icon="terp-crm" domain="[]" context="{'group_by':'state'}"/>
<filter string="Object" icon="terp-crm" domain="[]" context="{'group_by':'object_id'}"/>
</group>
<newline/>
</search>
</field>
</record>
<!-- Action for audittrail rule --> <!-- Action for audittrail rule -->
<record model="ir.actions.act_window" id="action_audittrail_rule_tree"> <record model="ir.actions.act_window" id="action_audittrail_rule_tree">
@ -55,7 +87,7 @@
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<!--<field name="view_id" ref="view_audittrail_rule_form" />--> <field name="search_view_id" ref="view_audittrail_rule_filter"/>
</record> </record>
<menuitem name="Audittrails" id="menu_action_audittrail" <menuitem name="Audittrails" id="menu_action_audittrail"
@ -89,14 +121,16 @@
<field name="res_id" readonly="1"/> <field name="res_id" readonly="1"/>
<field name="name" readonly="1" select="1"/> <field name="name" readonly="1" select="1"/>
<field name="line_ids" colspan="4" mode="tree,form" <field name="line_ids" colspan="4" mode="tree,form"
widget="one2many_list" readonly="1"> widget="one2many_list" readonly="1" nolabel="1">
<form string="Log Lines"> <form string="Log Lines">
<field name="field_id" colspan="4" <group colspan="4" col="2">
readonly="1" /> <field name="field_id"
readonly="1" colspan="4"/>
<newline /> <newline />
<field name="field_description" colspan="4" <field name="field_description"
readonly="1" /> readonly="1" colspan="4"/>
<newline /> <newline />
</group>
<separator string="Old Value : " <separator string="Old Value : "
colspan="2" /> colspan="2" />
<separator string="New Value : " <separator string="New Value : "
@ -142,6 +176,31 @@
</tree> </tree>
</field> </field>
</record> </record>
<record id="view_audittrail_log_filter" model="ir.ui.view">
<field name="name">Audittrail-log Search</field>
<field name="model">audittrail.log</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search log">
<group>
<field name="timestamp" />
<field name="name" />
<field name="object_id" widget="selection"/>
<field name="method" />
<field name="user_id" widget="selection"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="Log Date" icon="terp-crm" domain="[]" context="{'group_by':'timestamp'}"/>
<filter string="Log Method" icon="terp-crm" domain="[]" context="{'group_by':'method'}"/>
<filter string="Object" icon="terp-crm" domain="[]" context="{'group_by':'object_id'}"/>
<filter string="User" icon="terp-partner" name="user" domain="[]" context="{'group_by':'user_id'}"/>
</group>
<newline/>
</search>
</field>
</record>
<!-- Action for Audittrail Log --> <!-- Action for Audittrail Log -->
@ -149,13 +208,12 @@
<field name="name">Logs</field> <field name="name">Logs</field>
<field name="res_model">audittrail.log</field> <field name="res_model">audittrail.log</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_audittrail_log_filter"/>
</record> </record>
<menuitem name="Logs" id="menu_action_audittrail_log_tree" <menuitem name="Logs" id="menu_action_audittrail_log_tree"
action="action_audittrail_log_tree" parent="menu_action_audittrail" /> action="action_audittrail_log_tree" parent="menu_action_audittrail" />
<!-- <wizard string="View log" menu="False" model="audittrail.log" name="audittrail.view.log" id="wizard_audittrail_log"/>-->
<menuitem name="View Logs" id="menu_action_log_tree2"
action="action_audittrail_view_log" parent="menu_action_audittrail" />
</data> </data>
</openerp> </openerp>

View File

@ -25,11 +25,12 @@
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Note"> <form string="Note">
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="type" select="1" required="1"/> <field name="type" select="1" required="1"/>
<field name="user_id" select="1"/> <field name="user_id" select="1"/>
<field name="date" select="1"/> <field name="date" select="1"/>
<field colspan="4" name="note"/> <separator string="Notes" colspan="4"/>
<field colspan="4" name="note" nolabel="1"/>
</form> </form>
</field> </field>
</record> </record>
@ -70,7 +71,7 @@
name="%(action_board_menu_create)d" name="%(action_board_menu_create)d"
string="Create Menu" type="action" string="Create Menu" type="action"
icon="gtk-justify-fill" /> icon="gtk-justify-fill" />
<field colspan="4" name="line_ids"> <field colspan="4" name="line_ids" nolabel="1">
<tree string="Dashboard View"> <tree string="Dashboard View">
<field name="name"/> <field name="name"/>
<field name="sequence"/> <field name="sequence"/>

View File

@ -17,6 +17,7 @@
</group> </group>
<separator string="" colspan="4" /> <separator string="" colspan="4" />
<group colspan="4" col="6"> <group colspan="4" col="6">
<label string=" " colspan="2"/>
<button icon="gtk-cancel" special="cancel" <button icon="gtk-cancel" special="cancel"
string="Cancel" /> string="Cancel" />
<button icon="gtk-save" string="Create Menu" <button icon="gtk-save" string="Create Menu"

View File

@ -334,6 +334,7 @@ class crm_case_section(osv.osv):
'resource_calendar_id': fields.many2one('resource.calendar', "Resource's Calendar"), 'resource_calendar_id': fields.many2one('resource.calendar', "Resource's Calendar"),
'server_id':fields.many2one('email.smtpclient', 'Server ID'), 'server_id':fields.many2one('email.smtpclient', 'Server ID'),
'note': fields.text('Description'), 'note': fields.text('Description'),
'working_hours': fields.float('Working Hours', digits=(16,2 )),
} }
_defaults = { _defaults = {

View File

@ -16,31 +16,28 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Sales Team"> <form string="Sales Team">
<group col="6" colspan="4"> <group col="6" colspan="4">
<field name="name" select="1" colspan="4"/> <field name="name" select="1" colspan="2"/>
<field name="parent_id" select="2" widget="selection"/>
<field name="code" select="1"/> <field name="code" select="1"/>
<newline/> <newline/>
<field name="resource_calendar_id" select="2"/> <field name="user_id" select="2"/>
<field name="working_hours" widget="float_time"/>
<field name="active" select="2"/>
</group> </group>
<notebook colspan="4"> <notebook colspan="4">
<page string="Sales Team"> <page string="Sales Team">
<group col="2" colspan="1"> <group col="2" colspan="1">
<separator string="Responsible" colspan="2"/> <separator string="Mailgateway" colspan="2"/>
<field name="parent_id" select="2" widget="selection"/>
<field name="user_id" select="2"/>
</group>
<group col="2" colspan="1">
<separator string="Contact Information" colspan="2"/>
<field name="server_id" select="2"/>
<field name="reply_to" select="2"/> <field name="reply_to" select="2"/>
</group> </group>
<group col="2" colspan="1"> <group col="2" colspan="1">
<separator string="Sales Team Property" colspan="2"/> <separator string="Configuration" colspan="2"/>
<field name="active" select="2"/>
<field name="allow_unlink" select="2"/> <field name="allow_unlink" select="2"/>
</group> </group>
<separator string="Members List" colspan="4"/> <separator string="Team Members" colspan="4"/>
<field name="member_ids" nolabel="1" colspan="4"/> <field name="member_ids" nolabel="1" colspan="4"/>
<separator string="Note" colspan="4"/> </page>
<page string="Notes">
<field name="note" select="1" colspan="4" nolabel="1"/> <field name="note" select="1" colspan="4" nolabel="1"/>
</page> </page>
</notebook> </notebook>

View File

@ -16,7 +16,6 @@
login: user_crm login: user_crm
name: user_crm name: user_crm
password: user_crm password: user_crm
- | - |
I start by creating a new lead "New Customer" and I provide an address to this I start by creating a new lead "New Customer" and I provide an address to this
@ -25,7 +24,7 @@
!record {model: crm.lead, id: crm_lead_newcustomer0}: !record {model: crm.lead, id: crm_lead_newcustomer0}:
email_from: info@mycustomer.com email_from: info@mycustomer.com
name: New Customer name: New Customer
partner_name: Sandip zala partner_name: Capegemini
phone: (855) 924-4364 phone: (855) 924-4364
mobile: (333) 715-1450 mobile: (333) 715-1450
section_id: crm.section_sales_department section_id: crm.section_sales_department
@ -41,6 +40,11 @@
- -
!python {model: crm.lead}: | !python {model: crm.lead}: |
self.case_open(cr, uid, [ref("crm_lead_newcustomer0")]) self.case_open(cr, uid, [ref("crm_lead_newcustomer0")])
- |
I check that lead is now in 'open' state.
-
!assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in open state}:
- state == "open"
- | - |
As the lead seems to be a real business opportunity, I will convert it to a As the lead seems to be a real business opportunity, I will convert it to a
@ -49,8 +53,8 @@
- -
!python {model: crm.lead}: | !python {model: crm.lead}: |
lead = self.browse(cr, uid, ref('crm_lead_newcustomer0')) lead = self.browse(cr, uid, ref('crm_lead_newcustomer0'))
if not lead.partner_id: action = self.convert_opportunity(cr, uid, [ref("crm_lead_newcustomer0")], {'active_ids': [ref("crm_lead_newcustomer0")]})
self.convert_opportunity(cr, uid, [ref("crm_lead_newcustomer0")], {'active_ids': [ref("crm_lead_newcustomer0")]}) assert action['res_model'] == 'crm.lead2opportunity.partner'
- -
| |
Now, select "create a new partner" option in this wizard. Now, select "create a new partner" option in this wizard.
@ -66,7 +70,7 @@
Now, I give value to this wizard field. Now, I give value to this wizard field.
- -
!record {model: crm.lead2opportunity, id: crm_lead2opportunity_stonage_0}: !record {model: crm.lead2opportunity, id: crm_lead2opportunity_stonage_0}:
name: Sandip zala name: Capegemini
planned_revenue: 0.00 planned_revenue: 0.00
probability: 0.00 probability: 0.00
- -
@ -79,8 +83,8 @@
I can check that a lead and a business opportunity is now assigned to this I can check that a lead and a business opportunity is now assigned to this
lead. lead.
- -
# !python {model: crm.lead, id: crm_lead_newcustomer0}: # !python {model: crm.lead, id: crm_lead_newcustomer0}:
# - opportunity_id.id != False # - opportunity_id == False
- | - |
I check that the partner associated to this lead as the same country, phone number I check that the partner associated to this lead as the same country, phone number
@ -109,4 +113,4 @@
- | - |
I Reply to last Email to lead with some document attached.and check that communication history generated or not. I Reply to last Email to lead with some document attached.and check that communication history generated or not.

View File

@ -4,44 +4,55 @@
!record {model: crm.phonecall, id: crm_phonecall_interviewcall0}: !record {model: crm.phonecall, id: crm_phonecall_interviewcall0}:
date: '2010-04-21 18:59:00' date: '2010-04-21 18:59:00'
name: Interview call name: Interview call
partner_address_id: base.res_partner_address_1
partner_id: base.res_partner_9
partner_mobile: (+32)2 211 34 83
section_id: crm.section_sales_department section_id: crm.section_sales_department
- |
Now , I select partner by click on "Create a Partner" button.
-
!record {model: crm.phonecall2partner, id: crm_phonecall2partner_1}:
action: exist
partner_id: base.res_partner_9
-
Now, click on "Continue" button of this wizard.
-
!python {model: crm.phonecall2partner}: |
self.make_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]})
- | - |
As the success of phonecall seems to be a real business opportunity, I will convert As the success of phonecall seems to be a real business opportunity, I will convert
it to opportunity by clicking on the "Convert to Opportunity" button. it to opportunity by clicking on the "Convert to Opportunity" button.
-
!record {model: crm.phonecall2opportunity, id: crm_phonecall2opportunity_interviewcall0}:
name: Interview call
partner_id: base.res_partner_9
planned_revenue: 0.0
probability: 0.0
-
Now, I click on "Convert" button of this wizard.
- -
# !python {model: crm.phonecall2opportunity}: | !python {model: crm.phonecall2opportunity}: |
# self.action_apply(cr, uid, [1], {'active_id': ref('crm_phonecall_interviewcall0')}) self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")})
- -
# This is not working, find a way to do that in YAML # This is not working, find a way to do that in YAML
- | - |
I can see that a business opportunity is now assigned to this phonecall I can see that a business opportunity is now assigned to this phonecall
- | -
I check that the partner associated to this as the same country, phone number !assert {model: crm.phonecall, id: crm_phonecall_interviewcall0}:
and name than the phonecall. - opportunity_id == True
- |
In order to avoid the duplication of similar partner, OpenERP should be able to
detect if the partner exists or if it should be created from the phonecall during the
conversion.
- |
In order to test this, I log as the user "user_crm2"
- |
Then, I create the same phonecall than the preceeding one but I change the name
of the phonecall. But this customer keeps the same email.
- |
This time OpenERP should detect that this customer already exists in the
partner base and I check that in the wizard, proposes me to link to this existing
partner instead of creating another one.
- |
I confirm the conversion wizard.
- | - |
And I check that the phonecall and the newly created business opportunity is linked And I check that the phonecall and the newly created business opportunity is linked
to the partner to same partner
-
!python {model: crm.phonecall}: |
xid= ref('crm_phonecall_interviewcall0')
obj_phonecall = self.browse(cr, uid, xid)
ids = self.pool.get('crm.opportunity').search(cr, uid, [('name', '=', obj_phonecall.opportunity_id.name)])
obj_opp = self.pool.get('crm.opportunity').browse(cr, uid, ids)[0]
assert obj_phonecall.partner_id == obj_opp.partner_id
- | - |
I schedule Meeting on this current phonecall by clicking on "schedule I schedule Meeting on this current phonecall by clicking on "schedule
Meeting" Meeting"

View File

@ -148,7 +148,6 @@ class idea_idea(osv.osv):
if int(field_value) >= 0: if int(field_value) >= 0:
vote_obj.create(cr, uid, {'idea_id': id, 'user_id': uid, 'score': textual_value }) vote_obj.create(cr, uid, {'idea_id': id, 'user_id': uid, 'score': textual_value })
_columns = { _columns = {
'user_id': fields.many2one('res.users', 'Creator', required=True, readonly=True), 'user_id': fields.many2one('res.users', 'Creator', required=True, readonly=True),
'title': fields.char('Idea Summary', size=64, required=True), 'title': fields.char('Idea Summary', size=64, required=True),
@ -170,12 +169,16 @@ class idea_idea(osv.osv):
opened by the user, the state is \'Opened\'.\ opened by the user, the state is \'Opened\'.\
\nIf the idea is accepted, the state is \'Accepted\'.'), \nIf the idea is accepted, the state is \'Accepted\'.'),
'stat_vote_ids': fields.one2many('idea.vote.stat', 'idea_id', 'Statistics', readonly=True), 'stat_vote_ids': fields.one2many('idea.vote.stat', 'idea_id', 'Statistics', readonly=True),
'date': fields.date('Creation date'),
'vote_user': fields.integer('Maximum Vote per User',
help="Set to one if you require only one Vote per user"),
} }
_defaults = { _defaults = {
'user_id': lambda self,cr,uid,context: uid, 'user_id': lambda self,cr,uid,context: uid,
'my_vote': lambda *a: '-1', 'my_vote': lambda *a: '-1',
'state': lambda *a: 'draft' 'state': lambda *a: 'draft',
'vote_user': lambda * a: 1,
} }
_order = 'id desc' _order = 'id desc'
@ -196,7 +199,6 @@ class idea_idea(osv.osv):
return True return True
idea_idea() idea_idea()
class idea_comment(osv.osv): class idea_comment(osv.osv):
""" Apply Idea for Comment """ """ Apply Idea for Comment """
@ -210,7 +212,7 @@ class idea_comment(osv.osv):
'content': fields.text('Comment', required=True), 'content': fields.text('Comment', required=True),
'create_date': fields.datetime('Creation date', readonly=True), 'create_date': fields.datetime('Creation date', readonly=True),
} }
_defaults = { _defaults = {
'user_id': lambda self, cr, uid, context: uid 'user_id': lambda self, cr, uid, context: uid
} }
@ -230,7 +232,7 @@ class idea_vote(osv.osv):
_columns = { _columns = {
'user_id': fields.many2one('res.users', 'User'), 'user_id': fields.many2one('res.users', 'User'),
'idea_id': fields.many2one('idea.idea', 'Idea', required=True, ondelete='cascade'), 'idea_id': fields.many2one('idea.idea', 'Idea', required=True, ondelete='cascade'),
'score': fields.selection(VoteValues, 'Score', required=True) 'score': fields.selection(VoteValues, 'Score', required=True),
} }
_defaults = { _defaults = {
'score': lambda *a: DefaultVoteValue, 'score': lambda *a: DefaultVoteValue,
@ -238,7 +240,6 @@ class idea_vote(osv.osv):
idea_vote() idea_vote()
class idea_vote_stat(osv.osv): class idea_vote_stat(osv.osv):
""" Idea votes Statistics """ """ Idea votes Statistics """

View File

@ -14,7 +14,8 @@
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="parent_id" select="1"/> <field name="parent_id" select="1"/>
<newline/> <newline/>
<field name="summary" colspan="4"/> <separator string="Summary" colspan="4"/>
<field name="summary" colspan="4" nolabel="1"/>
</form> </form>
</field> </field>
</record> </record>
@ -128,6 +129,27 @@
</form> </form>
</field> </field>
</record> </record>
<!-- Search view for Idea vote -->
<record model="ir.ui.view" id="view_idea_vote_search">
<field name="name">idea.vote.search</field>
<field name="model">idea.vote</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Ideas vote">
<group col="10" colspan="4">
<field name="idea_id" widget="selection"/>
<field name="user_id" widget="selection"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="Idea" icon="terp-crm" domain="[]" context="{'group_by':'idea_id'}"/>
<filter string="User" name="user" icon="terp-partner" domain="[]" context="{'group_by':'user_id'}"/>
</group>
</search>
</field>
</record>
<!-- New Idea Form View --> <!-- New Idea Form View -->
@ -141,21 +163,25 @@
<page string="Idea"> <page string="Idea">
<field name="title" select="1" /> <field name="title" select="1" />
<field name="category_id" select="1"/> <field name="category_id" select="1"/>
<field name="date" />
<field name="user_id" select="1"/> <field name="user_id" select="1"/>
<field name="vote_avg" /> <field name="vote_avg" widget="progressbar"/>
<field name="description" colspan="4" widget="text_wiki"/> <field name="vote_user"/>
<separator string="Description" colspan="4"/>
<field name="description" colspan="4" widget="text_wiki" nolabel="1"/>
<field name="state"/> <field name="state"/>
<group colspan="2" col="3"> <group colspan="2" col="3">
<button name="idea_open" string="Open" states="draft" icon="gtk-go-forward"/> <button name="idea_open" string="Open" states="draft" icon="gtk-go-forward"/>
<button name="idea_close" string="Close" states="open" icon="gtk-close"/> <button name="idea_close" string="Close" states="open" icon="gtk-close" groups="base.group_extended"/>
<button name="idea_cancel" string="Cancel" states="open" icon="gtk-cancel"/> <button name="idea_cancel" string="Cancel" states="open" icon="gtk-cancel" groups="base.group_extended"/>
</group> </group>
</page> </page>
<page string="Comments"> <page string="Comments">
<field name="comment_ids" nolabel="1" colspan="4"> <field name="comment_ids" nolabel="1" colspan="4">
<form string="Comment"> <form string="Comment">
<separator string="Your comment" colspan="4"/> <field name="user_id" colspan="2"/>
<field name="content" nolabel="1" /> <separator string="User comment" colspan="4"/>
<field name="content" nolabel="1" colspan="4"/>
</form> </form>
</field> </field>
</page> </page>
@ -209,17 +235,25 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<search string="Ideas"> <search string="Ideas">
<group col="10" colspan="4"> <group col="10" colspan="4">
<filter icon="gtk-execute" string="My" domain="[('user_id','=',uid)]" help="My Ideas"/> <filter icon="terp-project" string="My" domain="[('user_id','=',uid)]" help="My Ideas"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter icon="gtk-execute" string="Draft" <filter icon="terp-project" string="Draft"
domain="[('state','=','draft')]" help="Draft Ideas" /> domain="[('state','=','draft')]" help="Draft Ideas" />
<filter icon="gtk-execute" string="Open" <filter icon="terp-project" string="Open"
domain="[('state','=','open')]" help="Open Ideas" /> domain="[('state','=','open')]" help="Open Ideas" />
<separator orientation="vertical"/> <separator orientation="vertical"/>
<field name="title" select="1"/> <field name="title" select="1"/>
<field name="category_id" select="1"/> <field name="category_id" widget="selection"/>
<field name="user_id" select="1"/> <field name="user_id" widget="selection"/>
</group> </group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="Category" icon="terp-crm" domain="[]" context="{'group_by':'category_id'}"/>
<filter string="State" icon="terp-crm" domain="[]" context="{'group_by':'state'}"/>
<separator orientation="vertical"/>
<filter string="Idea date" icon="terp-crm" domain="[]" context="{'group_by':'date'}"/>
<filter string="User" name="user" icon="terp-partner" domain="[]" context="{'group_by':'user_id'}"/>
</group>
</search> </search>
</field> </field>
</record> </record>
@ -327,6 +361,7 @@
<field name="res_model">idea.vote</field> <field name="res_model">idea.vote</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_idea_vote_search"/>
</record> </record>
<menuitem name="All Votes" parent="menu_ideas" id="menu_idea_vote" action="action_idea_vote"/> <menuitem name="All Votes" parent="menu_ideas" id="menu_idea_vote" action="action_idea_vote"/>

View File

@ -34,7 +34,8 @@ class idea_post_vote(osv.osv_memory):
('25', 'Bad'), ('25', 'Bad'),
('50', 'Normal'), ('50', 'Normal'),
('75', 'Good'), ('75', 'Good'),
('100', 'Very Good') ], 'Post Vote', required=True) ('100', 'Very Good') ], 'Post Vote', required=True),
'content': fields.text('Comment'),
} }
def view_init(self, cr, uid, fields, context=None): def view_init(self, cr, uid, fields, context=None):
@ -47,8 +48,16 @@ class idea_post_vote(osv.osv_memory):
@param context: A standard dictionary for contextual values @param context: A standard dictionary for contextual values
""" """
idea_obj = self.pool.get('idea.idea') idea_obj = self.pool.get('idea.idea')
for idea in idea_obj.browse(cr, uid, context.get('active_ids', [])): for idea in idea_obj.browse(cr, uid, context.get('active_ids', [])):
cr.execute('select count(id) from idea_vote where user_id=%s\
and idea_id=%s' % (uid, context.get('active_id')))
res = cr.fetchone()[0]
user_limit = idea.vote_user
if res >= user_limit:
raise osv.except_osv(_('Warning !'),_("You can not give Vote for this idea more than %s times") % (user_limit))
if idea.state in ['draft', 'close', 'cancel']: if idea.state in ['draft', 'close', 'cancel']:
raise osv.except_osv(_("Warning !"), _("Draft/Accepted/Cancelled \ raise osv.except_osv(_("Warning !"), _("Draft/Accepted/Cancelled \
ideas Could not be voted")) ideas Could not be voted"))
@ -57,7 +66,6 @@ ideas Could not be voted"))
\'Open\' state before vote for that idea.')) \'Open\' state before vote for that idea.'))
return False return False
def do_vote(self, cr, uid, ids, context): def do_vote(self, cr, uid, ids, context):
""" """
@ -67,14 +75,17 @@ ideas Could not be voted"))
@param ids: List of Idea Post votes IDs. @param ids: List of Idea Post votes IDs.
@return: Dictionary {} @return: Dictionary {}
""" """
data = context and context.get('active_id', False) or False data = context and context.get('active_id', False) or False
vote_obj = self.pool.get('idea.vote') vote_obj = self.pool.get('idea.vote')
comment_obj = self.pool.get('idea.comment')
for do_vote_obj in self.read(cr, uid, ids): for do_vote_obj in self.read(cr, uid, ids):
score = str(do_vote_obj['vote']) score = str(do_vote_obj['vote'])
dic = {'idea_id': data, 'user_id': uid, 'score': score } comment = do_vote_obj['content']
dic = {'idea_id': data, 'user_id': uid, 'score': score}
if comment:
comment_id = comment_obj.create(cr, uid, {'idea_id': data, 'user_id': uid, 'content': comment})
vote = vote_obj.create(cr, uid, dic) vote = vote_obj.create(cr, uid, dic)
return {} return {}

View File

@ -12,16 +12,19 @@
<form string="Create Tasks"> <form string="Create Tasks">
<group colspan="4" > <group colspan="4" >
<field name="vote"/> <field name="vote"/>
<separator string="Comment" colspan="4"/>
<field name="content" colspan="4" nolabel="1"/>
</group> </group>
<separator string="" colspan="4" /> <separator string="" colspan="4"/>
<group colspan="4" col="6"> <group colspan="4" col="6">
<label string="" colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="Cancel"/> <button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" name="do_vote" string="Post Vote" type="object"/> <button icon="gtk-ok" name="do_vote" string="Post Vote" type="object"/>
</group> </group>
</form> </form>
</field> </field>
</record> </record>
<!-- Post Idea for vote Action --> <!-- Post Idea for vote Action -->
<record id="action_idea_post_vote" model="ir.actions.act_window"> <record id="action_idea_post_vote" model="ir.actions.act_window">
@ -32,7 +35,7 @@
<field name="view_id" ref="view_idea_post_vote"/> <field name="view_id" ref="view_idea_post_vote"/>
<field name="target">new</field> <field name="target">new</field>
</record> </record>
<!-- Post Idea for vote Action Window --> <!-- Post Idea for vote Action Window -->
<act_window id="action_idea_post_vote_values" <act_window id="action_idea_post_vote_values"

View File

@ -47,10 +47,8 @@
'lunch_report.xml', 'lunch_report.xml',
#'process/lunch_process.xml' #'process/lunch_process.xml'
], ],
"demo_xml": ['lunch_demo.xml', "demo_xml": ['lunch_demo.xml'],
], "test": ['test/test_lunch.yml'],
"test": ['test/test_lunch.yml'
],
"installable": True, "installable": True,
} }

View File

@ -56,13 +56,46 @@
</tree> </tree>
</field> </field>
</record> </record>
<record id="view_lunch_order_filter" model="ir.ui.view">
<field name="name">lunch-order Search</field>
<field name="model">lunch.order</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search order">
<group>
<filter icon="terp-project"
string="Draft"
domain="[('state','=','draft')]"/>
<filter icon="terp-project"
name="confirmed"
string="Confirmed"
domain="[('state','=','confirmed')]"/>
<separator orientation="vertical"/>
<field name="product" widget="selection"/>
<field name="user_id" select="1" widget="selection" default="1">
</field>
<field name="date"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="Product" icon="terp-purchase" domain="[]" context="{'group_by':'product'}"/>
<filter string="State" icon="terp-purchase" domain="[]" context="{'group_by':'state'}"/>
<filter string="Order date" icon="terp-purchase" domain="[]" context="{'group_by':'date'}"/>
<filter string="User" name="user" icon="terp-partner" domain="[]" context="{'group_by':'user_id'}"/>
</group>
<newline/>
</search>
</field>
</record>
<!-- Lunch order Action --> <!-- Lunch order Action -->
<record model="ir.actions.act_window" id="action_lunch_order_form"> <record model="ir.actions.act_window" id="action_lunch_order_form">
<field name="name">Lunch Orders</field> <field name="name">Lunch Orders</field>
<field name="res_model">lunch.order</field> <field name="res_model">lunch.order</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_lunch_order_filter"/>
</record> </record>
<menuitem name="Lunch Order" parent="menu_lunch" <menuitem name="Lunch Order" parent="menu_lunch"
@ -116,10 +149,10 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="CashMove"> <form string="CashMove">
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="user_cashmove" select="1"/>
<field name="amount"/>
<field name="box" select="1"/>
<field name="create_date" select="1"/> <field name="create_date" select="1"/>
<field name="user_cashmove" select="1"/>
<field name="box" select="1"/>
<field name="amount"/>
<field name="active" select="1"/> <field name="active" select="1"/>
</form> </form>
</field> </field>
@ -141,12 +174,37 @@
</tree> </tree>
</field> </field>
</record> </record>
<record id="view_lunch_cashmove_filter" model="ir.ui.view">
<field name="name">CashMove Search</field>
<field name="model">lunch.cashmove</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search order">
<group>
<field name="name"/>
<field name="user_cashmove" widget="selection" default="1"/>
<field name="amount"/>
<field name="box" widget="selection"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="CashBox" icon="terp-purchase" domain="[]" context="{'group_by':'box'}"/>
<filter string="Order date" icon="terp-purchase" domain="[]" context="{'group_by':'create_date'}"/>
<filter string="User" name="user" icon="terp-partner" domain="[]" context="{'group_by':'user_cashmove'}"/>
</group>
<newline/>
</search>
</field>
</record>
<!-- Cash Move Action --> <!-- Cash Move Action -->
<record model="ir.actions.act_window" id="action_lunch_cashmove_form"> <record model="ir.actions.act_window" id="action_lunch_cashmove_form">
<field name="name">CashMove</field> <field name="name">CashMove</field>
<field name="res_model">lunch.cashmove</field> <field name="res_model">lunch.cashmove</field>
<field name="search_view_id" ref="view_lunch_cashmove_filter"/>
</record> </record>
<menuitem name="Cash Moves" parent="menu_lunch" <menuitem name="Cash Moves" parent="menu_lunch"
@ -240,7 +298,6 @@
id="menu_lunch_category_form" id="menu_lunch_category_form"
action="action_lunch_category_form" sequence="1" /> action="action_lunch_category_form" sequence="1" />
<!-- Lunch Amount Tree view --> <!-- Lunch Amount Tree view -->
<record model="ir.ui.view" id="view_report_lunch_amount_tree"> <record model="ir.ui.view" id="view_report_lunch_amount_tree">
@ -255,29 +312,53 @@
</tree> </tree>
</field> </field>
</record> </record>
<!-- Lunch Amount Form view --> <record id="view_order_product_graph" model="ir.ui.view">
<field name="name">Lunch.amount.report.graph</field>
<record model="ir.ui.view" id="view_report_lunch_amount_form"> <field name="model">report.lunch.amount</field>
<field name="name">Lunch amount</field> <field name="type">graph</field>
<field name="model">report.lunch.amount</field> <field name="arch" type="xml">
<field name="type">form</field> <graph orientation="vertical" string="Case Position by User" type="bar">
<field name="arch" type="xml"> <field name="user_id"/>
<form string="Box Amount by User"> <field name="amount"/>
<field name="user_id" select="1"/> </graph>
<field name="box" select="1"/> </field>
<field name="amount" select="1"/>
</form>
</field>
</record> </record>
<!-- Lunch Amount search view -->
<record id="view_report_lunch_amount_filter" model="ir.ui.view">
<field name="name">Lunch amount Search</field>
<field name="model">report.lunch.amount</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search lunch amount">
<group>
<field name="user_id" widget="selection" default="1">
</field>
<field name="box" widget="selection"/>
<field name="amount"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="14">
<filter string="CashBox" name="cashbox" icon="terp-purchase" domain="[]" context="{'group_by':'box'}"/>
<filter string="User" name="user" icon="terp-partner" domain="[]" context="{'group_by':'user_id'}"/>
</group>
<newline/>
</search>
</field>
</record>
<!-- Lunch Amount Action --> <!-- Lunch Amount Action -->
<record model="ir.actions.act_window" id="action_report_lunch_amount_tree"> <record model="ir.actions.act_window" id="action_report_lunch_amount_tree">
<field name="name">Lunch amount</field> <field name="name">Lunch amount</field>
<field name="res_model">report.lunch.amount</field> <field name="res_model">report.lunch.amount</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,graph</field>
<field name="search_view_id" ref="view_report_lunch_amount_filter"/>
<field name="context">{'search_default_user':1, 'group_by_no_leaf':1,'group_by':[]}</field>
</record> </record>
<menuitem name="Cash Position by User" <menuitem name="Cash Position by User"

View File

@ -14,7 +14,8 @@
<label string="Are you sure you want to reset this cashbox ?"/> <label string="Are you sure you want to reset this cashbox ?"/>
</group> </group>
<separator string="" colspan="4" /> <separator string="" colspan="4" />
<group colspan="4" col="6"> <group colspan="6" >
<label string=" " colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="No"/> <button icon="gtk-cancel" special="cancel" string="No"/>
<button icon="gtk-ok" name="set_to_zero" string="Set to Zero" type="object"/> <button icon="gtk-ok" name="set_to_zero" string="Set to Zero" type="object"/>
</group> </group>
@ -22,14 +23,7 @@
</field> </field>
</record> </record>
<record id="action_lunch_cashbox_clean" model="ir.actions.act_window"> <!-- Action for lunch cashbox set to zero. -->
<field name="name">Set CashBox to Zero</field>
<field name="res_model">lunch.cashbox.clean</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_lunch_cashbox_clean"/>
<field name="target">new</field>
</record>
<act_window id="action_lunch_cashbox_clean_values" <act_window id="action_lunch_cashbox_clean_values"
key2="client_action_multi" name="Set CashBox to Zero" key2="client_action_multi" name="Set CashBox to Zero"

View File

@ -14,7 +14,8 @@
<label string="Are you sure you want to cancel this order ?"/> <label string="Are you sure you want to cancel this order ?"/>
</group> </group>
<separator string="" colspan="4" /> <separator string="" colspan="4" />
<group colspan="4" col="6"> <group colspan="6">
<label string=" " colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="No"/> <button icon="gtk-cancel" special="cancel" string="No"/>
<button icon="gtk-ok" name="cancel" string="Yes" type="object"/> <button icon="gtk-ok" name="cancel" string="Yes" type="object"/>
</group> </group>
@ -22,14 +23,7 @@
</field> </field>
</record> </record>
<record id="action_lunch_order_cancel" model="ir.actions.act_window"> <!-- Action for Cancel Order -->
<field name="name">Cancel Order</field>
<field name="res_model">lunch.order.cancel</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_lunch_order_cancel"/>
<field name="target">new</field>
</record>
<act_window id="action_lunch_order_cancel_values" <act_window id="action_lunch_order_cancel_values"
key2="client_action_multi" name="Cancel Order" key2="client_action_multi" name="Cancel Order"

View File

@ -16,7 +16,8 @@
<newline/> <newline/>
</group> </group>
<separator string="" colspan="4" /> <separator string="" colspan="4" />
<group colspan="4" col="6"> <group colspan="6">
<label colspan="2" string=" "/>
<button icon="gtk-cancel" special="cancel" string="Cancel"/> <button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" name="confirm" string="Confirm Order" type="object"/> <button icon="gtk-ok" name="confirm" string="Confirm Order" type="object"/>
</group> </group>
@ -24,14 +25,7 @@
</field> </field>
</record> </record>
<record id="action_lunch_order_confirm" model="ir.actions.act_window"> <!-- Action for Confirm order -->
<field name="name">Confirm Order</field>
<field name="res_model">lunch.order.confirm</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_lunch_order_confirm"/>
<field name="target">new</field>
</record>
<act_window id="action_lunch_order_confirm_values" <act_window id="action_lunch_order_confirm_values"
key2="client_action_multi" name="Confirm Order" key2="client_action_multi" name="Confirm Order"

View File

@ -20,8 +20,7 @@
############################################################################## ##############################################################################
import sale_journal import sale_journal
import sale_journal_inherit import report
import sale_journal_report
import sale_journal_picking_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -54,8 +54,7 @@
'update_xml': [ 'update_xml': [
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'sale_journal_view.xml', 'sale_journal_view.xml',
'picking_journal_view.xml', 'report/sale_journal_report_view.xml',
'picking_journal_view_report.xml'
], ],
'demo_xml': ['sale_journal_demo.xml'], 'demo_xml': ['sale_journal_demo.xml'],
'installable': True, 'installable': True,

View File

@ -1,110 +0,0 @@
<openerp>
<data>
<record model="ir.ui.view" id="view_picking_journal_form">
<field name="name">sale_journal.picking.journal.form</field>
<field name="model">sale_journal.picking.journal</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Picking Journal">
<notebook>
<page string="Journal">
<separator string="Journal Information" colspan="4"/>
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="user_id" select="1"/>
<field name="date" select="1"/>
<field name="date_created" select="1"/>
<field name="date_validation" select="1"/>
<separator string="States" colspan="4"/>
<field name="state"/>
<group col="3" colspan="2">
<button name="button_open" string="Open Journal" states="draft" type="object" icon="gtk-open"/>
<button name="button_close" string="Close Journal" states="open" type="object" icon="gtk-close"/>
<button name="button_draft" string="Set to Draft" states="close,open" type="object" icon="gtk-convert"/>
</group>
</page>
<page string="Picking">
<button string="Cancel Picking" name="button_picking_cancel" states="draft,open" type="object" icon="gtk-cancel"/>
<newline/>
<field name="picking_stats_ids" colspan="4" nolabel="1"/>
</page><page string="Notes">
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_picking_journal_tree">
<field name="name">sale_journal.picking.journal.tree</field>
<field name="model">sale_journal.picking.journal</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Picking Journal">
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="user_id" select="1"/>
<field name="date" select="1"/>
<field name="state"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_picking_journal_search">
<field name="name">sale_journal.picking.journal.search</field>
<field name="model">sale_journal.picking.journal</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Picking Journal">
<group col="8" colspan="4">
<filter icon="terp-hr" string="My Picking Journals" domain="[('user_id','=',uid)]" help="My Picking Journals"/>
<filter icon="terp-hr" string="Open" domain="[('state','=','open')]" help="Open Picking Journals"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="user_id" select="1" widget="selection"/>
<field name="date" select="1"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_definition_picking_journal">
<field name="name">Picking journals</field>
<field name="res_model">sale_journal.picking.journal</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_picking_journal_search"/>
</record>
<menuitem name="Picking Journals" id="menu_definition_journal_picking" parent="stock.menu_stock_configuration" action="action_definition_picking_journal"/>
<record model="ir.actions.act_window" id="action_invoice_type_tree">
<field name="name">Picking by invoice_method</field>
<field name="name">sale_journal.invoice.type.tree</field>
<field name="res_model">sale_journal.invoice.type</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">tree</field>
</record>
<!--<menuitem name="Picking to Invoice" id="menu_definition_journal_picking_invoice" parent="stock.menu_action_picking_tree"/>-->
<!--<menuitem name="Picking by Invoice Method" id="menu_definition_journal_picking_invoice_method" parent="menu_definition_journal_picking_invoice" action="action_invoice_type_tree"/>-->
<record model="ir.actions.act_window" id="action_invoice_type_picking_open">
<field name="name">Picking to invoice</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','done'),('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]</field>
</record>
<record model="ir.values" id="ir_open_invoice_type">
<field name="key2">tree_but_open</field>
<field name="model">sale_journal.invoice.type</field>
<field name="name">Picking to invoice</field>
<field name="value" eval="'ir.actions.act_window,%d'%action_invoice_type_picking_open"/>
<field name="object" eval="True"/>
</record>
</data>
</openerp>

View File

@ -1,151 +0,0 @@
<openerp>
<data>
#
# Pickings by invoice type
#
<record model="ir.ui.view" id="view_picking_invoice_type_stats_form">
<field name="name">sale_journal.invoice.type.stats.form</field>
<field name="model">sale_journal.invoice.type.stats</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Picking by invoice method">
<field name="name" select="1"/>
<field name="month" select="1"/>
<field name="invoice_state" select="1"/>
<field name="state" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_total"/>
<field name="price_average"/>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_picking_invoice_type_stats_tree">
<field name="name">sale_journal.invoice.type.stats.tree</field>
<field name="model">sale_journal.invoice.type.stats</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Picking by invoice method">
<field name="name"/>
<field name="month"/>
<field name="invoice_state"/>
<field name="state"/>
<field name="invoice_type_id"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_total"/>
<field name="price_average"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_picking_invoice_type_stats_search">
<field name="name">sale_journal.invoice.type.stats.search</field>
<field name="model">sale_journal.invoice.type.stats</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Picking by invoice method">
<group col="8" colspan="4">
<filter icon="terp-sale" string="This Year" domain="[('name','=',time.strftime('%%Y'))]" help="Picking by invoice method in this year"/>
<filter icon="terp-sale" string="This Month" domain="[('month','=',time.strftime('%%m'))]" help="Picking by invoice method in this month"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="month" select="1"/>
<field name="invoice_state" select="1"/>
<field name="state" select="1"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_invoice_type_picking_stats_open">
<field name="name">Statistics on picking to invoice</field>
<field name="res_model">sale_journal.invoice.type.stats</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]</field>
</record>
<menuitem name="Picking Journal" id="menu_definition_journal_reporting" parent="stock.next_id_61"/>
<record model="ir.actions.act_window" id="action_invoice_type_picking_stats_open_menu_all">
<field name="name">Picking by invoice method</field>
<field name="res_model">sale_journal.invoice.type.stats</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_picking_invoice_type_stats_search"/>
</record>
<menuitem name="Picking by Invoice Method" id="menu_invoice_type_picking_stats_open_all" parent="menu_definition_journal_reporting" action="action_invoice_type_picking_stats_open_menu_all"/>
#
# Packing by journal
#
<record model="ir.ui.view" id="view_picking_journal_stats_form">
<field name="name">sale_journal.picking.stats.form</field>
<field name="model">sale_journal.picking.stats</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Picking by journals">
<field name="name" select="1"/>
<field name="month" select="1"/>
<field name="state" select="1"/>
<field name="journal_id" select="1"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_total"/>
<field name="price_average"/>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_picking_journal_stats_tree">
<field name="name">sale_journal.picking.stats.tree</field>
<field name="model">sale_journal.picking.stats</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Picking by journals">
<field name="name"/>
<field name="state"/>
<field name="journal_id"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_total"/>
<field name="price_average"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_picking_journal_stats_search">
<field name="name">sale_journal.picking.stats.search</field>
<field name="model">sale_journal.picking.stats</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Picking by journals">
<group col="8" colspan="4">
<filter icon="terp-sale" string="This Year" domain="[('name','=',time.strftime('%%Y'))]" help="Picking by journals in this year"/>
<filter icon="terp-sale" string="This Month" domain="[('month','=',time.strftime('%%m'))]" help="Picking by journals in this month"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="month" select="1"/>
<field name="state" select="1"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_picking_picking_stats_open_menu_all">
<field name="name">Picking by journal</field>
<field name="res_model">sale_journal.picking.stats</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_picking_journal_stats_search"/>
</record>
<menuitem name="Picking by Journal" id="menu_picking_picking_stats_open_all" parent="menu_definition_journal_reporting" action="action_picking_picking_stats_open_menu_all"/>
</data>
</openerp>

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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/>.
#
##############################################################################
import sale_journal_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,141 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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 osv import fields, osv
import tools
class sale_journal_report(osv.osv):
_name = "sale.journal.report"
_description = "Sales Orders by Journal"
_auto = False
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'month':fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'),
('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'),
('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'state': fields.selection([
('draft', 'Quotation'),
('waiting_date', 'Waiting Schedule'),
('manual', 'Manual in progress'),
('progress', 'In progress'),
('shipping_except', 'Shipping Exception'),
('invoice_except', 'Invoice Exception'),
('done', 'Done'),
('cancel', 'Cancel')
], 'Order State', readonly=True),
'journal_id':fields.many2one('sale_journal.sale.journal', 'Journal', readonly=True),
'quantity': fields.float('Quantities', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True),
'count': fields.integer('# of Lines', readonly=True),
}
_order = 'journal_id, name desc,price_total desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_journal_report')
cr.execute("""
create or replace view sale_journal_report as (
select
min(l.id) as id,
to_char(s.date_order, 'YYYY') as name,
to_char(s.date_order,'MM') as month,
s.state,
s.journal_id,
sum(l.product_uom_qty) as quantity,
count(*),
sum(l.product_uom_qty*l.price_unit) as price_total,
(sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty))::decimal(16,2) as price_average
from sale_order s
right join sale_order_line l on (s.id=l.order_id)
group by s.journal_id , to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'), s.state
)
""")
sale_journal_report()
#==========================================
#picking report
#==========================================
class sale_journal_picking_report(osv.osv):
"""
Picking list by journal and by invoice
"""
_name = "sale.journal.picking.report"
_description = "Picking lists"
_auto = False
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'month':fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), ('05', 'May'), ('06', 'June'),
('07', 'July'), ('08', 'August'), ('09', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'invoice_state':fields.selection([
("invoiced", "invoiced"),
("2binvoiced", "to be invoiced"),
("none", "None")
], "Invoice state", readonly=True),
'state': fields.selection([
('draft', 'draft'),
('auto', 'waiting'),
('confirmed', 'confirmed'),
('assigned', 'assigned'),
('done', 'done'),
('cancel', 'cancel'),
], 'State', readonly=True),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
'journal_id':fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
'quantity': fields.float('Quantities', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True),
'count': fields.integer('# of Lines', readonly=True),
}
_order = 'journal_id, name desc, price_total desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_journal_picking_report')
cr.execute("""
create or replace view sale_journal_picking_report as (
select
min(l.id) as id,
to_char(s.date, 'YYYY') as name,
to_char(s.date, 'MM') as month,
s.state,
s.invoice_state,
s.invoice_type_id,
s.journal_id,
sum(l.product_qty) as quantity,
count(*) as count,
sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0)) as price_total,
(sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0))/sum(l.product_qty))::decimal(16,2) as price_average
from stock_picking s
right join stock_move l on (s.id=l.picking_id)
left join sale_order_line ol on (l.sale_line_id=ol.id)
group by s.journal_id, s.invoice_type_id, to_char(s.date, 'YYYY'),to_char(s.date, 'MM'),s.state, s.invoice_state
order by s.invoice_type_id, s.invoice_state, s.state
)
""")
sale_journal_picking_report()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,187 @@
<openerp>
<data>
<!-- Sales by journal's view -->
<record model="ir.ui.view" id="view_sale_journal_report_tree">
<field name="name">sale.journal.report.tree</field>
<field name="model">sale.journal.report</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Sales by Journal">
<field name="name" invisible="1"/>
<field name="state" invisible="1"/>
<field name="journal_id" invisible="1"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_average"/>
<field name="price_total"/>
</tree>
</field>
</record>
<!-- sales journal graph view -->
<record id="view_sale_journal_graph" model="ir.ui.view">
<field name="name">sale.journal.report.graph</field>
<field name="model">sale.journal.report</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Sales journal Statistics" type="bar">
<field name="journal_id"/>
<field name="price_total"/>
</graph>
</field>
</record>
<!-- sales by journal search view -->
<record model="ir.ui.view" id="view_sale_journal_report_search">
<field name="name">sale.journal.report.search</field>
<field name="model">sale.journal.report</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Sales by Journal">
<group col="8" colspan="4">
<filter icon="terp-sale" string="This Year" domain="[('name','!=','')]" help="Sale journal in this year"/>
<filter icon="terp-sale" string="This Month" domain="[('name','=',time.strftime('%%Y-%%m-01'))]" help="Sale journal in this month"/>
<separator orientation="vertical"/>
<filter icon="terp-sale"
string="Quotations"
domain="[('state','=','draft')]"/>
<filter icon="terp-sale"
string="Waiting Schedule"
domain="[('state','=','waiting_date')]"/>
<filter icon="terp-sale"
string="In progress"
domain="[('state','=','progress')]"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="state" select="1"/>
<field name="journal_id" widget="selection"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="4" col="12">
<filter string="journal" name="journal" icon="terp-sale" context="{'group_by':'journal_id'}"/>
<filter string="State" icon="terp-sale" context="{'group_by':'state'}"/>
</group>
</search>
</field>
</record>
<!-- Action of sales by journal view-->
<record model="ir.actions.act_window" id="action_sale_journal_report_open_menu_all">
<field name="name">Sales by Journal</field>
<field name="res_model">sale.journal.report</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="search_view_id" ref="view_sale_journal_report_search"/>
<field name="context">{'search_default_journal': 1,'group_by_no_leaf':1,'group_by':[]}</field>
</record>
<menuitem name="Sales by Journal" id="menu_sale_journal_report_open_all" parent="base.next_id_64" action="action_sale_journal_report_open_menu_all"/>
<!-- picking by journal and invoice's tree view-->
<record model="ir.ui.view" id="view_sale_journal_picking_report_tree">
<field name="name">sale.journal.picking.report.tree</field>
<field name="model">sale.journal.picking.report</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Picking journal">
<field name="name" invisible="1"/>
<field name="month" invisible="1"/>
<field name="invoice_state" invisible="1"/>
<field name="state" invisible="1"/>
<field name="invoice_type_id" invisible="1"/>
<field name="journal_id" invisible="1"/>
<field name="quantity" />
<field name="count" />
<field name="price_average"/>
<field name="price_total"/>
</tree>
</field>
</record>
<!-- picking journal's graph view -->
<record id="view_sale_journal_picking_graph" model="ir.ui.view">
<field name="name">sale.journal.picking.report.graph</field>
<field name="model">sale.journal.picking.report</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Picking journal Statistics" type="bar">
<field name="journal_id"/>
<field name="invoice_type_id"/>
<field name="price_total"/>
</graph>
</field>
</record>
<!-- Picking journal search view -->
<record model="ir.ui.view" id="view_sale_journal_picking_report_search">
<field name="name">sale.journal.picking.report.search</field>
<field name="model">sale.journal.picking.report</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Picking journal">
<group col="8" colspan="4">
<filter icon="terp-sale" string="This Year" name="year" domain="[('name','=',time.strftime('%%Y'))]" help="Picking by invoice or by journal method in this year"/>
<filter icon="terp-sale" string="This Month" name="month" domain="[('month','=',time.strftime('%%m'))]" help="Picking by invoice or by journal method in this month"/>
<separator orientation="vertical"/>
<filter icon="terp-stock"
string="Draft"
domain="[('state','=','draft')]"/>
<filter icon="terp-stock"
string="Pending"
domain="[('state','=','waiting')]"/>
<filter icon="terp-stock"
string="Confirmed"
domain="[('state','=','confirmed')]"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="month" select="1"/>
<field name="invoice_state" select="1"/>
<field name="state" select="1"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="4" col="12">
<filter string="Journal" icon="terp-stock" context="{'group_by':'journal_id'}"/>
<filter string="Invoice" icon="terp-stock" context="{'group_by':'invoice_type_id'}"/>
<separator orientation="vertical"/>
<filter string="Invoice state" icon="terp-stock" context="{'group_by':'invoice_state'}"/>
<filter string="state" icon="terp-stock" context="{'group_by':'state'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_sale_journal_picking_report_open">
<field name="name">Statistics on picking to invoice</field>
<field name="res_model">sale.journal.picking.report</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]</field>
</record>
<!-- Action for picking journal view -->
<record model="ir.actions.act_window" id="action_sale_journal_picking_report_open_menu_all">
<field name="name">Picking journal</field>
<field name="res_model">sale.journal.picking.report</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="search_view_id" ref="view_sale_journal_picking_report_search"/>
<field name="context">{'search_default_month':1, 'group_by_no_leaf':1,'group_by':[]}</field>
</record>
<menuitem name="Picking journal" id="menu_invoice_type_picking_stats_open_all" parent="stock.next_id_61" action="action_sale_journal_picking_report_open_menu_all"/>
</data>
</openerp>

View File

@ -48,7 +48,7 @@ class sale_journal(osv.osv):
'date': fields.date('Journal date', required=True), 'date': fields.date('Journal date', required=True),
'date_created': fields.date('Creation date', readonly=True, required=True), 'date_created': fields.date('Creation date', readonly=True, required=True),
'date_validation': fields.date('Validation date', readonly=True), 'date_validation': fields.date('Validation date', readonly=True),
'sale_stats_ids': fields.one2many("sale_journal.sale.stats", "journal_id", 'Sale Stats', readonly=True), 'sale_stats_ids': fields.one2many("sale.journal.report", "journal_id", 'Sale Stats', readonly=True),
'state': fields.selection([ 'state': fields.selection([
('draft','Draft'), ('draft','Draft'),
('open','Open'), ('open','Open'),
@ -98,7 +98,7 @@ class picking_journal(osv.osv):
'date': fields.date('Journal date', required=True), 'date': fields.date('Journal date', required=True),
'date_created': fields.date('Creation date', readonly=True, required=True), 'date_created': fields.date('Creation date', readonly=True, required=True),
'date_validation': fields.date('Validation date', readonly=True), 'date_validation': fields.date('Validation date', readonly=True),
'picking_stats_ids': fields.one2many("sale_journal.picking.stats", "journal_id", 'Journal Stats', readonly=True), 'picking_stats_ids': fields.one2many("sale.journal.picking.report", "journal_id", 'Journal Stats', readonly=True),
'state': fields.selection([ 'state': fields.selection([
('draft','Draft'), ('draft','Draft'),
('open','Open'), ('open','Open'),
@ -130,5 +130,55 @@ class picking_journal(osv.osv):
return True return True
picking_journal() picking_journal()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: #==============================================
# sale journal inherit
#==============================================
class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'property_invoice_type': fields.property(
'sale_journal.invoice.type',
type='many2one',
relation='sale_journal.invoice.type',
string="Invoicing Method",
method=True,
view_load=True,
group_name="Accounting Properties",
help="The type of journal used for sales and picking."),
}
res_partner()
class picking(osv.osv):
_inherit="stock.picking"
_columns = {
'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal'),
'sale_journal_id': fields.many2one('sale_journal.sale.journal', 'Sale Journal'),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', readonly=True)
}
picking()
class sale(osv.osv):
_inherit="sale.order"
_columns = {
'journal_id': fields.many2one('sale_journal.sale.journal', 'Journal'),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type')
}
def action_ship_create(self, cr, uid, ids, *args):
result = super(sale, self).action_ship_create(cr, uid, ids, *args)
for order in self.browse(cr, uid, ids, context={}):
pids = [ x.id for x in order.picking_ids]
self.pool.get('stock.picking').write(cr, uid, pids, {
'invoice_type_id': order.invoice_type_id.id,
'sale_journal_id': order.journal_id.id
})
return result
def onchange_partner_id(self, cr, uid, ids, part):
result = super(sale, self).onchange_partner_id(cr, uid, ids, part)
if part:
itype = self.pool.get('res.partner').browse(cr, uid, part).property_invoice_type.id
result['value']['invoice_type_id'] = itype
return result
sale()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,73 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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 osv import osv, fields
class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'property_invoice_type': fields.property(
'sale_journal.invoice.type',
type='many2one',
relation='sale_journal.invoice.type',
string="Invoicing Method",
method=True,
view_load=True,
group_name="Accounting Properties",
help="The type of journal used for sales and picking."),
}
res_partner()
class picking(osv.osv):
_inherit="stock.picking"
_columns = {
'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal'),
'sale_journal_id': fields.many2one('sale_journal.sale.journal', 'Sale Journal'),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', readonly=True)
}
picking()
class sale(osv.osv):
_inherit="sale.order"
_columns = {
'journal_id': fields.many2one('sale_journal.sale.journal', 'Journal'),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type')
}
def action_ship_create(self, cr, uid, ids, *args):
result = super(sale, self).action_ship_create(cr, uid, ids, *args)
for order in self.browse(cr, uid, ids, context={}):
pids = [ x.id for x in order.picking_ids]
self.pool.get('stock.picking').write(cr, uid, pids, {
'invoice_type_id': order.invoice_type_id.id,
'sale_journal_id': order.journal_id.id
})
return result
def onchange_partner_id(self, cr, uid, ids, part):
result = super(sale, self).onchange_partner_id(cr, uid, ids, part)
if part:
itype = self.pool.get('res.partner').browse(cr, uid, part).property_invoice_type.id
result['value']['invoice_type_id'] = itype
return result
sale()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,124 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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 osv import fields,osv
import tools
class report_sale_journal_invoice_type_stats(osv.osv):
_name = "sale_journal.invoice.type.stats"
_description = "Stats on picking by invoice method"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
'invoice_state':fields.selection([
("invoiced","invoiced"),
("2binvoiced","to be invoiced"),
("none","None")
], "Invoice state", readonly=True),
'state': fields.selection([
('draft','draft'),
('auto','waiting'),
('confirmed','confirmed'),
('assigned','assigned'),
('done','done'),
('cancel','cancel'),
], 'State', readonly=True),
'invoice_type_id':fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
'quantity': fields.float('Quantities', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True),
'count': fields.integer('# of Lines', readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
}
_order = 'state,invoice_state,name desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_journal_invoice_type_stats')
cr.execute("""
create or replace view sale_journal_invoice_type_stats as (
select
min(l.id) as id,
to_char(s.date, 'YYYY') as name,
to_char(s.date, 'MM') as month,
s.state,
s.invoice_state,
s.invoice_type_id,
sum(l.product_qty) as quantity,
count(*) as count,
sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0)) as price_total,
(sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0))/sum(l.product_qty))::decimal(16,2) as price_average
from stock_picking s
left join stock_move l on (s.id=l.picking_id)
left join sale_order_line ol on (l.sale_line_id=ol.id)
group by s.invoice_type_id, to_char(s.date, 'YYYY'),to_char(s.date, 'MM'),s.state, s.invoice_state
order by s.invoice_type_id, s.invoice_state, s.state
)
""")
report_sale_journal_invoice_type_stats()
class report_sale_journal_picking(osv.osv):
_name = "sale_journal.picking.stats"
_description = "Picking lists by Journal"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
'state': fields.selection([
('draft','draft'),
('auto','waiting'),
('confirmed','confirmed'),
('assigned','assigned'),
('done','done'),
('cancel','cancel'),
], 'State', readonly=True),
'journal_id':fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
'quantity': fields.float('Quantities', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True),
'count': fields.integer('# of Lines', readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
}
_order = 'journal_id,name desc,price_total desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_journal_picking_stats')
cr.execute("""
create or replace view sale_journal_picking_stats as (
select
min(l.id) as id,
to_char(s.date, 'YYYY') as name,
to_char(s.date, 'MM') as month,
s.state,
s.journal_id,
sum(l.product_qty) as quantity,
count(*) as count,
sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0)) as price_total,
(sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0))/sum(l.product_qty))::decimal(16,2) as price_average
from stock_picking s
right join stock_move l on (s.id=l.picking_id)
right join sale_order_line ol on (l.sale_line_id=ol.id)
group by s.journal_id, to_char(s.date, 'YYYY'),to_char(s.date, 'MM'),s.state
)
""")
report_sale_journal_picking()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,73 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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 osv import fields,osv
import tools
class report_sale_journal_sale(osv.osv):
_name = "sale_journal.sale.stats"
_description = "Sales Orders by Journal"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
'state': fields.selection([
('draft','Quotation'),
('waiting_date','Waiting Schedule'),
('manual','Manual in progress'),
('progress','In progress'),
('shipping_except','Shipping Exception'),
('invoice_except','Invoice Exception'),
('done','Done'),
('cancel','Cancel')
], 'Order State', readonly=True),
'journal_id':fields.many2one('sale_journal.sale.journal', 'Journal', readonly=True),
'quantity': fields.float('Quantities', readonly=True),
'price_total': fields.float('Total Price', readonly=True),
'price_average': fields.float('Average Price', readonly=True),
'count': fields.integer('# of Lines', readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
}
_order = 'journal_id,name desc,price_total desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'sale_journal_sale_stats')
cr.execute("""
create or replace view sale_journal_sale_stats as (
select
min(l.id) as id,
to_char(s.date_order, 'YYYY') as name,
to_char(s.date_order,'MM') as month,
s.state,
s.journal_id,
sum(l.product_uom_qty) as quantity,
count(*),
sum(l.product_uom_qty*l.price_unit) as price_total,
(sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty))::decimal(16,2) as price_average
from sale_order s
right join sale_order_line l on (s.id=l.order_id)
group by s.journal_id, to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'),s.state
)
""")
report_sale_journal_sale()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,385 +1,471 @@
<openerp> <openerp>
<data> <data>
<record model="ir.ui.view" id="view_sale_journal_invoice_type_form">
<field name="name">sale_journal.invoice.type.form</field> <!-- sale journal invoice Type's Form view -->
<field name="model">sale_journal.invoice.type</field>
<field name="type">form</field> <record model="ir.ui.view" id="view_sale_journal_invoice_type_form">
<field name="arch" type="xml"> <field name="name">sale_journal.invoice.type.form</field>
<form string="Invoice Type"> <field name="model">sale_journal.invoice.type</field>
<field name="name" select="1"/> <field name="type">form</field>
<field name="active" select="1"/> <field name="arch" type="xml">
<field name="invoicing_method" select="1"/> <form string="Invoice Type">
<newline/> <field name="name" select="1"/>
<field name="note" colspan="4"/> <field name="active" select="1"/>
</form> <field name="invoicing_method" select="1"/>
</field> <newline/>
</record> <field name="note" colspan="4"/>
<record model="ir.ui.view" id="view_sale_journal_invoice_type_tree"> </form>
<field name="name">sale_journal.invoice.type.tree</field> </field>
<field name="model">sale_journal.invoice.type</field> </record>
<field name="type">tree</field>
<field name="arch" type="xml"> <!-- sale journal invoice Type's tree view -->
<tree string="Invoice Type">
<field name="name"/> <record model="ir.ui.view" id="view_sale_journal_invoice_type_tree">
<field name="invoicing_method"/> <field name="name">sale_journal.invoice.type.tree</field>
</tree> <field name="model">sale_journal.invoice.type</field>
</field> <field name="type">tree</field>
</record> <field name="arch" type="xml">
<record model="ir.actions.act_window" id="action_definition_journal_invoice_type"> <tree string="Invoice Type">
<field name="res_model">sale_journal.invoice.type</field> <field name="name"/>
<field name="view_type">form</field> <field name="invoicing_method"/>
<field name="view_mode">tree,form</field> </tree>
</record> </field>
</record>
<!-- <menuitem name="Invoicing Methods" id="menu_definition_journal_invoice_type" parent="sale.menu_shop_configuration" action="action_definition_journal_invoice_type"/>-->
<!-- Action for sale journal invoice Type -->
<record model="ir.ui.view" id="view_sale_journal_form">
<field name="name">sale_journal.sale.journal.form</field> <record model="ir.actions.act_window" id="action_definition_journal_invoice_type">
<field name="model">sale_journal.sale.journal</field> <field name="res_model">sale_journal.invoice.type</field>
<field name="type">form</field> <field name="view_type">form</field>
<field name="arch" type="xml"> <field name="view_mode">tree,form</field>
<form string="Sale Journal"> </record>
<notebook>
<page string="Journal"> <!-- <menuitem name="Invoicing Methods" id="menu_definition_journal_invoice_type" parent="sale.menu_shop_configuration" action="action_definition_journal_invoice_type"/> -->
<separator string="Journal Information" colspan="4"/>
<field name="name" select="1"/> <!-- sale journal Form view -->
<field name="code" select="1"/>
<field name="user_id" select="1"/> <record model="ir.ui.view" id="view_sale_journal_form">
<field name="date" select="1"/> <field name="name">sale_journal.sale.journal.form</field>
<field name="date_created" select="1"/> <field name="model">sale_journal.sale.journal</field>
<field name="date_validation" select="1"/> <field name="type">form</field>
<separator string="States" colspan="4"/> <field name="arch" type="xml">
<field name="state"/> <form string="Sale Journal">
<group col="3" colspan="2"> <notebook>
<button name="button_open" string="Open Journal" states="draft" type="object" icon="gtk-open"/> <page string="Journal">
<button name="button_close" string="Close Journal" states="open" type="object" icon="gtk-close"/> <separator string="Journal Information" colspan="4"/>
<button name="button_draft" string="Set to Draft" states="close,open" type="object" icon="gtk-convert"/> <field name="name" select="1"/>
</group> <field name="code" select="1"/>
</page> <field name="user_id" select="1"/>
<page string="Sales"> <field name="date" select="1"/>
<button string="Confirm Sales" name="button_sale_confirm" states="draft,open" type="object" icon="gtk-execute"/> <field name="date_created" select="1"/>
<button string="Cancel Sales" name="button_sale_cancel" states="draft,open" type="object" icon="gtk-cancel"/> <field name="date_validation" select="1"/>
<newline/> <separator string="States" colspan="4"/>
<field name="sale_stats_ids" colspan="4" nolabel="1"> <field name="state"/>
<tree string="Sales"> <group col="3" colspan="2">
<field name="name"/> <button name="button_open" string="Open Journal" states="draft" type="object" icon="gtk-open"/>
<field name="quantity"/> <button name="button_close" string="Close Journal" states="open" type="object" icon="gtk-close"/>
<field name="price_total"/> <button name="button_draft" string="Set to Draft" states="close,open" type="object" icon="gtk-convert"/>
<field name="price_average"/> </group>
<field name="count"/> </page>
<field name="state"/> <page string="Sales">
</tree> <button string="Confirm Sales" name="button_sale_confirm" states="draft,open" type="object" icon="gtk-execute"/>
</field> <button string="Cancel Sales" name="button_sale_cancel" states="draft,open" type="object" icon="gtk-cancel"/>
</page><page string="Notes"> <newline/>
<field name="note" colspan="4" nolabel="1"/> <field name="sale_stats_ids" colspan="4" nolabel="1">
</page> <tree string="Sales">
</notebook> <field name="name"/>
</form> <field name="quantity"/>
</field> <field name="price_total"/>
</record> <field name="price_average"/>
<record model="ir.ui.view" id="view_sale_journal_tree"> <field name="count"/>
<field name="name">sale_journal.sale.journal.tree</field> <field name="state"/>
<field name="model">sale_journal.sale.journal</field> </tree>
<field name="type">tree</field> </field>
<field name="arch" type="xml"> </page><page string="Notes">
<tree string="Sale Journal"> <field name="note" colspan="4" nolabel="1"/>
<field name="name" select="1"/> </page>
<field name="code" select="1"/> </notebook>
<field name="user_id" select="1"/> </form>
<field name="date" select="1"/> </field>
<field name="state"/> </record>
</tree>
</field> <!-- Sale journal tree view -->
</record>
<record model="ir.ui.view" id="view_sale_journal_tree">
<record model="ir.ui.view" id="view_sale_journal_search"> <field name="name">sale_journal.sale.journal.tree</field>
<field name="name">sale_journal.sale.journal.search</field> <field name="model">sale_journal.sale.journal</field>
<field name="model">sale_journal.sale.journal</field> <field name="type">tree</field>
<field name="type">search</field> <field name="arch" type="xml">
<field name="arch" type="xml"> <tree string="Sale Journal">
<search string="Sales by Journal">
<group col="8" colspan="4">
<filter icon="terp-sale" string="My Sale Journals" domain="[('user_id','=',uid)]" help="My Sale Journals"/>
<filter icon="terp-sale" string="Open" domain="[('state','=','open')]" help="Open Sale Journals"/>
<separator orientation="vertical"/>
<field name="name" select="1"/> <field name="name" select="1"/>
<field name="code" select="1"/> <field name="code" select="1"/>
<field name="user_id" select="1"/> <field name="user_id" select="1"/>
<field name="date" select="1"/> <field name="date" select="1"/>
</group> <field name="state"/>
</search> </tree>
</field> </field>
</record> </record>
<record model="ir.actions.act_window" id="action_definition_journal"> <!-- Sale journal search view -->
<field name="res_model">sale_journal.sale.journal</field>
<field name="view_type">form</field> <record model="ir.ui.view" id="view_sale_journal_search">
<field name="view_mode">tree,form</field> <field name="name">sale_journal.sale.journal.search</field>
<field name="search_view_id" ref="view_sale_journal_search"/> <field name="model">sale_journal.sale.journal</field>
</record> <field name="type">search</field>
<field name="arch" type="xml">
<!-- <menuitem name="Sales Journals" id="menu_definition_journal" parent="sale.menu_shop_configuration" action="action_definition_journal"/>--> <search string="Sales by Journal">
<menuitem id="menu_sale_journal" name="Journal" parent="base.menu_base_config" sequence="60" /> <group col="8" colspan="4">
<menuitem name="Sales Journals" id="menu_definition_journal" parent="menu_sale_journal" action="action_definition_journal"/> <filter icon="terp-sale" string="My Sale Journals" domain="[('user_id','=',uid)]" help="My Sale Journals"/>
<filter icon="terp-sale" string="Open" domain="[('state','=','open')]" help="Open Sale Journals"/>
<record model="ir.ui.view" id="sale_journal_sale_order"> <separator orientation="vertical"/>
<field name="name">sale.order.journal.view.form</field> <field name="name" select="1"/>
<field name="type">form</field> <field name="code" select="1"/>
<field name="model">sale.order</field> <field name="user_id" select="1"/>
<field name="inherit_id" ref="sale.view_order_form" /> <field name="date" select="1"/>
<field name="arch" type="xml"> </group>
<field name="invoiced" position="after"> </search>
<field name="journal_id" select="1"/> </field>
<field name="invoice_type_id" select="1"/> </record>
</field>
</field> <!-- Action for sale journal view -->
</record>
<record model="ir.ui.view" id="sale_journal_sale_order_tree"> <record model="ir.actions.act_window" id="action_definition_journal">
<field name="name">sale.order.journal.view.tree</field> <field name="res_model">sale_journal.sale.journal</field>
<field name="type">tree</field> <field name="view_type">form</field>
<field name="model">sale.order</field> <field name="view_mode">tree,form</field>
<field name="inherit_id" ref="sale.view_order_tree" /> <field name="search_view_id" ref="view_sale_journal_search"/>
<field name="arch" type="xml"> </record>
<field name="state" position="after">
<field name="invoice_type_id"/> <menuitem id="menu_definition_journal" name="Sales Journals" parent="base.menu_base_config" action="action_definition_journal" sequence="60" />
<field name="journal_id"/>
</field> <!-- Inherit sales order form view -->
</field>
</record> <record model="ir.ui.view" id="sale_journal_sale_order">
<field name="name">sale.order.journal.view.form</field>
<record model="ir.ui.view" id="sale_journal_picking_order"> <field name="type">form</field>
<field name="name">stock.picking.journal.view.form</field> <field name="model">sale.order</field>
<field name="type">form</field> <field name="inherit_id" ref="sale.view_order_form" />
<field name="model">stock.picking</field> <field name="arch" type="xml">
<field name="inherit_id" ref="stock.view_picking_form" /> <field name="invoiced" position="after">
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_tree">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree" />
<field name="arch" type="xml">
<field name="invoice_state" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_del">
<field name="name">stock.picking.journal.view.form</field>
<field name="type">form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_delivery_form" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_tree_del">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_delivery_tree" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_in">
<field name="name">stock.picking.journal.view.form</field>
<field name="type">form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_in_form" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_tree_in">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_in_tree" />
<field name="arch" type="xml">
<field name="invoice_state" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_out">
<field name="name">stock.picking.journal.view.form</field>
<field name="type">form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_form" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_tree_out">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_tree" />
<field name="arch" type="xml">
<field name="invoice_state" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="view_sale_journal_sale_stats_tree">
<field name="name">sale_journal.sale.stats.tree</field>
<field name="model">sale_journal.sale.stats</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Sales by Journal">
<field name="name"/>
<field name="state"/>
<field name="journal_id"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_total"/>
<field name="price_average"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_sale_journal_sale_stats_form">
<field name="name">sale_journal.sale.stats.form</field>
<field name="model">sale_journal.sale.stats</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sales by Journal">
<field name="name" select="1"/>
<field name="state" select="1"/>
<field name="journal_id" select="1"/>
<field name="quantity"/>
<field name="count"/>
<field name="price_total"/>
<field name="price_average"/>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_sale_journal_sale_stats_search">
<field name="name">sale_journal.sale.stats.search</field>
<field name="model">sale_journal.sale.stats</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Sales by Journal">
<group col="8" colspan="4">
<filter icon="terp-sale" string="This Year" domain="[('name','!=','')]" help="Sale journal in this year"/>
<filter icon="terp-sale" string="This Month" domain="[('name','=',time.strftime('%%Y-%%m-01'))]" help="Sale journal in this month"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="state" select="1"/>
<field name="journal_id" select="1"/> <field name="journal_id" select="1"/>
</group> <field name="invoice_type_id" select="1"/>
</search> </field>
</field> </field>
</record> </record>
<!-- Inherit sales order tree view-->
<record model="ir.ui.view" id="sale_journal_sale_order_tree">
<field name="name">sale.order.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree" />
<field name="arch" type="xml">
<field name="state" position="after">
<field name="invoice_type_id"/>
<field name="journal_id"/>
</field>
</field>
</record>
<record model="ir.actions.act_window" id="action_sale_sale_stats_open_menu_all"> <!-- Inherit stock picking's form view -->
<field name="name">Sales by Journal</field>
<field name="res_model">sale_journal.sale.stats</field> <record model="ir.ui.view" id="sale_journal_picking_order">
<field name="type">ir.actions.act_window</field> <field name="name">stock.picking.journal.view.form</field>
<field name="view_type">form</field> <field name="type">form</field>
<field name="view_mode">tree,form</field> <field name="model">stock.picking</field>
<field name="search_view_id" ref="view_sale_journal_sale_stats_search"/> <field name="inherit_id" ref="stock.view_picking_form" />
</record> <field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<menuitem name="Reporting" id="menu_definition_report_sales" parent="base.menu_base_partner" sequence="8"/> <!-- Inherit stock picking's tree view -->
<menuitem name="Sales by Journal" id="menu_sale_sale_stats_open_all" parent="menu_definition_report_sales" action="action_sale_sale_stats_open_menu_all"/>
<record model="ir.ui.view" id="sale_journal_picking_order_tree">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.vpicktree" />
<field name="arch" type="xml">
<field name="invoice_state" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<!-- Inherit stock picking delivery's form view.-->
<record model="ir.ui.view" id="sale_journal_picking_order_del">
<field name="name">stock.picking.journal.view.form</field>
<field name="type">form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_delivery_form" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<!-- Inherit stock picking delivery's tree view.-->
<record model="ir.ui.view" id="sale_journal_picking_order_tree_del">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_delivery_tree" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_in">
<field name="name">stock.picking.journal.view.form</field>
<field name="type">form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_in_form" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_tree_in">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_in_tree" />
<field name="arch" type="xml">
<field name="invoice_state" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_out">
<field name="name">stock.picking.journal.view.form</field>
<field name="type">form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_form" />
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="journal_id" select="1"/>
<field name="sale_journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="sale_journal_picking_order_tree_out">
<field name="name">stock.picking.journal.view.tree</field>
<field name="type">tree</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_tree" />
<field name="arch" type="xml">
<field name="invoice_state" position="after">
<field name="journal_id" select="1"/>
<field name="invoice_type_id" select="1"/>
<field name="sale_journal_id" select="1"/>
</field>
</field>
</record>
<!-- Action of sale journal report in sale journal -->
<act_window name="Monthly sales"
domain="[('journal_id', '=', active_id)]"
res_model="sale.journal.report"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_sale_journal_sale_stats"/>
<!-- Action of stock picking in picking journal -->
<act_window name="Assigned picking"
domain="[('journal_id', '=', active_id),('state', '=', 'assigned')]"
res_model="stock.picking"
src_model="sale_journal.picking.journal"
id="act_sale_journal_picking_journal_2_stock_picking_assigned"/>
<!-- Action of stock picking in picking journal -->
<act_window name="Confirmed picking"
domain="[('journal_id', '=', active_id),('state', '=', 'confirmed')]"
res_model="stock.picking"
src_model="sale_journal.picking.journal"
id="act_sale_journal_picking_journal_2_stock_picking_confirmed"/>
<!-- Action of stock picking in sale journal -->
<act_window name="Assigned picking"
domain="[('sale_journal_id', '=', active_id),('state', '=', 'assigned')]"
res_model="stock.picking"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_stock_picking_assigned"/>
<act_window name="Monthly sales" <!-- Action of stock picking in sale journal -->
domain="[('journal_id', '=', active_id)]"
res_model="sale_journal.sale.stats"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_sale_journal_sale_stats"/>
<act_window name="Assigned picking" <act_window name="Confirmed picking"
domain="[('journal_id', '=', active_id),('state', '=', 'assigned')]" domain="[('sale_journal_id', '=', active_id),('state', '=', 'confirmed')]"
res_model="stock.picking" res_model="stock.picking"
src_model="sale_journal.picking.journal" src_model="sale_journal.sale.journal"
id="act_sale_journal_picking_journal_2_stock_picking_assigned"/> id="act_sale_journal_sale_journal_2_stock_picking_confirmed"/>
<act_window name="Confirmed picking" <!-- Action of sale order in sale journal -->
domain="[('journal_id', '=', active_id),('state', '=', 'confirmed')]"
res_model="stock.picking" <act_window name="Draft sales"
src_model="sale_journal.picking.journal" domain="[('journal_id', '=', active_id),('state', '=', 'draft')]"
id="act_sale_journal_picking_journal_2_stock_picking_confirmed"/> res_model="sale.order"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_sale_order_draft"/>
<!-- Action of sale order in sale journal -->
<act_window name="Approved sales"
domain="[('journal_id', '=', active_id),('state', '=', 'approved')]"
res_model="sale.order"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_sale_order_approved"/>
<record id="view_partner_property_form" model="ir.ui.view">
<field name="name">res.partner.journal.property.form.inherit</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<page string="Sales &amp; Purchases" position="inside">
<field name="property_invoice_type"/>
</page>
</field>
</record>
<!--=====================================================-->
<!-- picking journal view-->
<!--===================================================== -->
<record model="ir.ui.view" id="view_picking_journal_form">
<field name="name">sale_journal.picking.journal.form</field>
<field name="model">sale_journal.picking.journal</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Picking Journal">
<notebook>
<page string="Journal">
<separator string="Journal Information" colspan="4"/>
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="user_id" select="1"/>
<field name="date" select="1"/>
<field name="date_created" select="1"/>
<field name="date_validation" select="1"/>
<separator string="States" colspan="4"/>
<field name="state"/>
<group col="3" colspan="2">
<button name="button_open" string="Open Journal" states="draft" type="object" icon="gtk-open"/>
<button name="button_close" string="Close Journal" states="open" type="object" icon="gtk-close"/>
<button name="button_draft" string="Set to Draft" states="close,open" type="object" icon="gtk-convert"/>
</group>
</page>
<page string="Picking">
<button string="Cancel Picking" name="button_picking_cancel" states="draft,open" type="object" icon="gtk-cancel"/>
<newline/>
<field name="picking_stats_ids" colspan="4" nolabel="1"/>
</page><page string="Notes">
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_picking_journal_tree">
<field name="name">sale_journal.picking.journal.tree</field>
<field name="model">sale_journal.picking.journal</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Picking Journal">
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="user_id" select="1"/>
<field name="date" select="1"/>
<field name="state"/>
</tree>
</field>
</record>
<act_window name="Assigned picking" <!-- Picking journal tree view -->
domain="[('sale_journal_id', '=', active_id),('state', '=', 'assigned')]"
res_model="stock.picking" <record model="ir.ui.view" id="view_picking_journal_search">
src_model="sale_journal.sale.journal" <field name="name">sale_journal.picking.journal.search</field>
id="act_sale_journal_sale_journal_2_stock_picking_assigned"/> <field name="model">sale_journal.picking.journal</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Picking Journal">
<group col="8" colspan="4">
<filter icon="terp-hr" string="My Picking Journals" domain="[('user_id','=',uid)]" help="My Picking Journals"/>
<filter icon="terp-hr" string="Open" domain="[('state','=','open')]" help="Open Picking Journals"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="user_id" select="1" widget="selection"/>
<field name="date" select="1"/>
</group>
</search>
</field>
</record>
<!-- Action of Picking journals -->
<record model="ir.actions.act_window" id="action_definition_picking_journal">
<field name="name">Picking journals</field>
<field name="res_model">sale_journal.picking.journal</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_picking_journal_search"/>
</record>
<menuitem name="Picking Journals" id="menu_definition_journal_picking" parent="stock.menu_stock_configuration" action="action_definition_picking_journal"/>
<record model="ir.actions.act_window" id="action_invoice_type_tree">
<field name="name">Picking by invoice_method</field>
<field name="res_model">sale_journal.invoice.type</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">tree</field>
</record>
<record model="ir.actions.act_window" id="action_invoice_type_picking_open">
<field name="name">Picking to invoice</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','done'),('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]</field>
</record>
<record model="ir.values" id="ir_open_invoice_type">
<field name="key2">tree_but_open</field>
<field name="model">sale_journal.invoice.type</field>
<field name="name">Picking to invoice</field>
<field name="value" eval="'ir.actions.act_window,%d'%action_invoice_type_picking_open"/>
<field name="object" eval="True"/>
</record>
<act_window name="Confirmed picking" </data>
domain="[('sale_journal_id', '=', active_id),('state', '=', 'confirmed')]"
res_model="stock.picking"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_stock_picking_confirmed"/>
<act_window name="Draft sales"
domain="[('journal_id', '=', active_id),('state', '=', 'draft')]"
res_model="sale.order"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_sale_order_draft"/>
<act_window name="Approved sales"
domain="[('journal_id', '=', active_id),('state', '=', 'approved')]"
res_model="sale.order"
src_model="sale_journal.sale.journal"
id="act_sale_journal_sale_journal_2_sale_order_approved"/>
<record id="view_partner_property_form" model="ir.ui.view">
<field name="name">res.partner.journal.property.form.inherit</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<page string="Sales &amp; Purchases" position="inside">
<field name="property_invoice_type"/>
</page>
</field>
</record>
</data>
</openerp> </openerp>

View File

@ -1,12 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_sale_journal_invoice_type_stats","sale_journal.invoice.type.stats","model_sale_journal_invoice_type_stats","sale.group_sale_user",1,0,0,0
"access_sale_journal_picking_stats","sale_journal.picking.stats","model_sale_journal_picking_stats","sale.group_sale_user",1,0,0,0
"access_sale_journal_invoice_type","sale_journal.invoice.type","model_sale_journal_invoice_type","sale.group_sale_user",1,0,0,0
"access_sale_journal_invoice_type_finance_invoice","sale_journal.invoice.type invoice","model_sale_journal_invoice_type","account.group_account_invoice",1,0,0,0 "access_sale_journal_invoice_type_finance_invoice","sale_journal.invoice.type invoice","model_sale_journal_invoice_type","account.group_account_invoice",1,0,0,0
"access_sale_journal_invoice_type_partner_manager","sale_journal.invoice.type partner manager","model_sale_journal_invoice_type","base.group_partner_manager",1,0,0,0 "access_sale_journal_invoice_type_partner_manager","sale_journal.invoice.type partner manager","model_sale_journal_invoice_type","base.group_partner_manager",1,0,0,0
"access_sale_journal_sale_journal","sale_journal.sale.journal","model_sale_journal_sale_journal","sale.group_sale_user",1,0,0,0 "access_sale_journal_sale_journal","sale_journal.sale.journal","model_sale_journal_sale_journal","sale.group_sale_user",1,0,0,0
"access_sale_journal_picking_journal","sale_journal.picking.journal","model_sale_journal_picking_journal","sale.group_sale_user",1,0,0,0
"access_sale_journal_sale_stats","sale_journal.sale.stats","model_sale_journal_sale_stats","sale.group_sale_user",1,0,0,0
"access_sale_journal_invoice_type_manager","sale_journal.invoice.type.manager","model_sale_journal_invoice_type","sale.group_sale_manager",1,1,1,1 "access_sale_journal_invoice_type_manager","sale_journal.invoice.type.manager","model_sale_journal_invoice_type","sale.group_sale_manager",1,1,1,1
"access_sale_journal_sale_journal_manager","sale_journal.sale.journal.manager","model_sale_journal_sale_journal","sale.group_sale_manager",1,1,1,1 "access_sale_journal_sale_journal_manager","sale_journal.sale.journal.manager","model_sale_journal_sale_journal","sale.group_sale_manager",1,1,1,1
"access_sale_journal_picking_journal_manager","sale_journal.picking.journal.manager","model_sale_journal_picking_journal","sale.group_sale_manager",1,1,1,1 "access_sale_journal_picking_journal_manager","sale_journal.picking.journal.manager","model_sale_journal_picking_journal","sale.group_sale_manager",1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
access_sale_journal_invoice_type_stats sale_journal.invoice.type.stats model_sale_journal_invoice_type_stats sale.group_sale_user 1 0 0 0
access_sale_journal_picking_stats sale_journal.picking.stats model_sale_journal_picking_stats sale.group_sale_user 1 0 0 0
access_sale_journal_invoice_type sale_journal.invoice.type model_sale_journal_invoice_type sale.group_sale_user 1 0 0 0
2 access_sale_journal_invoice_type_finance_invoice sale_journal.invoice.type invoice model_sale_journal_invoice_type account.group_account_invoice 1 0 0 0
3 access_sale_journal_invoice_type_partner_manager sale_journal.invoice.type partner manager model_sale_journal_invoice_type base.group_partner_manager 1 0 0 0
4 access_sale_journal_sale_journal sale_journal.sale.journal model_sale_journal_sale_journal sale.group_sale_user 1 0 0 0
access_sale_journal_picking_journal sale_journal.picking.journal model_sale_journal_picking_journal sale.group_sale_user 1 0 0 0
access_sale_journal_sale_stats sale_journal.sale.stats model_sale_journal_sale_stats sale.group_sale_user 1 0 0 0
5 access_sale_journal_invoice_type_manager sale_journal.invoice.type.manager model_sale_journal_invoice_type sale.group_sale_manager 1 1 1 1
6 access_sale_journal_sale_journal_manager sale_journal.sale.journal.manager model_sale_journal_sale_journal sale.group_sale_manager 1 1 1 1
7 access_sale_journal_picking_journal_manager sale_journal.picking.journal.manager model_sale_journal_picking_journal sale.group_sale_manager 1 1 1 1

View File

@ -586,6 +586,7 @@
<field name="origin"/> <field name="origin"/>
<field name="date"/> <field name="date"/>
<field name="min_date"/> <field name="min_date"/>
<field name="invoice_state"/>
<field name="state"/> <field name="state"/>
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-go-forward" help="Validate Picking"/> <button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-go-forward" help="Validate Picking"/>
<button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" help="Cancel" confirm="This operation will cancel the picking. Do you want to continue?"/> <button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" help="Cancel" confirm="This operation will cancel the picking. Do you want to continue?"/>