commit
34949277ae
|
@ -136,7 +136,6 @@ class account_account_type(osv.osv):
|
|||
'name': fields.char('Acc. Type Name', size=64, required=True, translate=True),
|
||||
'code': fields.char('Code', size=32, required=True),
|
||||
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of account types."),
|
||||
'partner_account': fields.boolean('Partner account'),
|
||||
'close_method': fields.selection([('none', 'None'), ('balance', 'Balance'), ('detail', 'Detail'), ('unreconciled', 'Unreconciled')], 'Deferral Method', required=True),
|
||||
'sign': fields.selection([(-1, 'Negative'), (1, 'Positive')], 'Sign on Reports', required=True, help='Allows you to change the sign of the balance amount displayed in the reports, so that you can see positive figures instead of negative ones in expenses accounts.'),
|
||||
'report_type':fields.selection([
|
||||
|
@ -366,11 +365,11 @@ class account_account(osv.osv):
|
|||
'currency_id': fields.many2one('res.currency', 'Secondary Currency', help="Forces all moves for this account to have this secondary currency."),
|
||||
'code': fields.char('Code', size=64, required=True),
|
||||
'type': fields.selection([
|
||||
('view', 'View'),
|
||||
('other', 'Regular'),
|
||||
('receivable', 'Receivable'),
|
||||
('payable', 'Payable'),
|
||||
('view', 'View'),
|
||||
('consolidation', 'Consolidation'),
|
||||
('other', 'Others'),
|
||||
('closed', 'Closed'),
|
||||
], 'Internal Type', required=True, help="This type is used to differentiate types with "\
|
||||
"special effects in Open ERP: view can not have entries, consolidation are accounts that "\
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
<data>
|
||||
|
||||
<!--
|
||||
Fiscal Year
|
||||
-->
|
||||
Fiscal Year
|
||||
-->
|
||||
|
||||
<record id="view_account_fiscalyear_form" model="ir.ui.view">
|
||||
<field name="name">account.fiscalyear.form</field>
|
||||
|
@ -12,7 +12,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Fiscalyear">
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="date_start"/>
|
||||
|
@ -32,7 +32,7 @@
|
|||
</field>
|
||||
<separator colspan="4" string="States"/>
|
||||
<group>
|
||||
<field name="state" select="1" readonly="1"/>
|
||||
<field name="state" select="1" readonly="1"/>
|
||||
<button name="create_period" states="draft" string="Create Monthly Periods" type="object" icon="gtk-dnd"/>
|
||||
<button name="create_period3" states="draft" string="Create 3 Months Periods" type="object" icon="gtk-dnd"/>
|
||||
</group>
|
||||
|
@ -57,17 +57,17 @@
|
|||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Fiscalyear">
|
||||
<group>
|
||||
<filter string="Done" domain="[('state','=','done')]" icon="terp-dolar_ok!"/>
|
||||
<filter string="Draft" domain="[('state','=','draft')]" icon="terp-document-new"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="state"/>
|
||||
<group>
|
||||
<filter string="Done" domain="[('state','=','done')]" icon="terp-dolar_ok!"/>
|
||||
<filter string="Draft" domain="[('state','=','draft')]" icon="terp-document-new"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/>
|
||||
<filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -133,9 +133,8 @@
|
|||
|
||||
|
||||
<!--
|
||||
Accounts
|
||||
-->
|
||||
|
||||
Accounts
|
||||
-->
|
||||
<record id="view_account_form" model="ir.ui.view">
|
||||
<field name="name">account.account.form</field>
|
||||
<field name="model">account.account</field>
|
||||
|
@ -143,21 +142,21 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Account">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<newline/>
|
||||
<field name="parent_id"/>
|
||||
<field name="type" select="1"/>
|
||||
<field name="user_type" select="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<newline/>
|
||||
<field name="currency_id"/>
|
||||
<field name="active"/>
|
||||
<field name="currency_mode"/>
|
||||
<field name="reconcile"/>
|
||||
<field name="active"/>
|
||||
<field name="check_history"/>
|
||||
<field name="type" select="1"/>
|
||||
<newline/>
|
||||
<separator string="Default Taxes" colspan="4"/>
|
||||
<field colspan="4" name="tax_ids" nolabel="1" domain="[('parent_id','=',False)]"/>
|
||||
|
@ -178,21 +177,21 @@
|
|||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Accounts">
|
||||
<group col="10" colspan="4">
|
||||
<group col="10" colspan="4">
|
||||
<filter icon="terp-sale" string="Receivable Accounts" domain="[('type','=','receivable')]"/>
|
||||
<filter icon="terp-purchase" string="Purchase Accounts" domain="[('type','=','purchase')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="user_type"/>
|
||||
<field name="type"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="user_type"/>
|
||||
<field name="type"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Parent Account" icon="terp-folder-orange" domain="" context="{'group_by':'parent_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="User Type" icon="terp-folder-blue" domain="" context="{'group_by':'user_type'}"/>
|
||||
<filter string="Internal Type" icon="terp-folder-yellow" domain="" context="{'group_by':'type'}"/>
|
||||
<filter string="Parent Account" icon="terp-folder-orange" domain="" context="{'group_by':'parent_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="User Type" icon="terp-folder-blue" domain="" context="{'group_by':'user_type'}"/>
|
||||
<filter string="Internal Type" icon="terp-folder-yellow" domain="" context="{'group_by':'type'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -308,11 +307,11 @@
|
|||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Search Account Journal">
|
||||
<group>
|
||||
<filter domain="[('type', '=', 'sale')]" string="Sale Journals" icon="terp-sale"/>
|
||||
<filter domain="[('type', '=', 'purchase')]" string="Purchase Journals" icon="terp-purchase"/>
|
||||
<filter domain="[('centralisation', '=', 'True')]" string="Centralized Journals" icon="terp-stock"/>
|
||||
<separator orientation="vertical"/>
|
||||
<group>
|
||||
<filter domain="[('type', '=', 'sale')]" string="Sale Journals" icon="terp-sale"/>
|
||||
<filter domain="[('type', '=', 'purchase')]" string="Purchase Journals" icon="terp-purchase"/>
|
||||
<filter domain="[('centralisation', '=', 'True')]" string="Centralized Journals" icon="terp-stock"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
|
@ -376,7 +375,7 @@
|
|||
<separator string="Other Configuration" colspan="4"/>
|
||||
<field name="centralisation" groups="base.group_extended"/>
|
||||
<field name="entry_posted"/>
|
||||
<field name="update_posted"/>
|
||||
<!-- <field name="update_posted"/> -->
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
@ -443,19 +442,19 @@
|
|||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Bank Statements">
|
||||
<group>
|
||||
<filter string="Draft" domain="[('state','=','draft')]" icon="terp-document-new"/>
|
||||
<filter string="Confirm" domain="[('state','=','confirm')]" icon="terp-camera_test"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
<group>
|
||||
<filter string="Draft" domain="[('state','=','draft')]" icon="terp-document-new"/>
|
||||
<filter string="Confirm" domain="[('state','=','confirm')]" icon="terp-camera_test"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Journal" context="{'group_by': 'journal_id'}" icon="terp-folder-orange"/>
|
||||
<filter string="Period" context="{'group_by': 'period_id'}" icon="terp-go-month"/>
|
||||
<filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/>
|
||||
<filter string="Journal" context="{'group_by': 'journal_id'}" icon="terp-folder-orange"/>
|
||||
<filter string="Period" context="{'group_by': 'period_id'}" icon="terp-go-month"/>
|
||||
<filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -596,11 +595,10 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Account Type">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name" select="1" colspan="4"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="sequence"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="partner_account"/>
|
||||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Reporting Configuration" colspan="4"/>
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-06 03:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.6\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-07-06 03:17+0000\n"
|
||||
"PO-Revision-Date: 2010-07-06 10:39+0000\n"
|
||||
"Last-Translator: Black Jack <onetimespeed@hotmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-06 03:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -45,7 +45,7 @@ msgstr "设置过期支付的催款信息"
|
|||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_confirmstatementfromdraft0
|
||||
msgid "Confirm statement from draft"
|
||||
msgstr "从草稿确认"
|
||||
msgstr "从草稿确认对帐单"
|
||||
|
||||
#. module: account
|
||||
#: model:account.account.type,name:account.account_type_asset
|
||||
|
@ -60,7 +60,7 @@ msgstr "在动作定义使用了无效的模块名。"
|
|||
#. module: account
|
||||
#: help:account.journal,currency:0
|
||||
msgid "The currency used to enter statement"
|
||||
msgstr "报表使用的货币"
|
||||
msgstr "使用的货币"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account_use_models,init_form:0
|
||||
|
@ -454,7 +454,7 @@ msgstr "特殊计算"
|
|||
#. module: account
|
||||
#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
|
||||
msgid "Confirm statement with/without reconciliation from draft statement"
|
||||
msgstr "从草稿确认将不对账"
|
||||
msgstr "从草稿确认与对/不对帐"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.move.bank.reconcile,init:0
|
||||
|
@ -487,7 +487,7 @@ msgstr "税用在"
|
|||
msgid ""
|
||||
"Set if the amount of tax must be included in the base amount before "
|
||||
"computing the next taxes."
|
||||
msgstr "如果这税额必须包含在计算下一个税的基础金额里, 请设置"
|
||||
msgstr "如果这税额必须在计算下一个税的基础金额里, 请设置"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.ui.menu,name:account.menu_finance_periodical_processing
|
||||
|
@ -954,7 +954,7 @@ msgstr "默认借方科目"
|
|||
#: model:ir.actions.act_window,name:account.action_bank_statement_tree
|
||||
#: model:ir.ui.menu,name:account.menu_bank_statement_tree
|
||||
msgid "Entries by Statements"
|
||||
msgstr "银行对帐单"
|
||||
msgstr "对帐单"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_analyticinvoice0
|
||||
|
@ -1092,7 +1092,7 @@ msgstr "含税价计算代码"
|
|||
#: model:ir.actions.act_window,name:account.action_tax_code_list
|
||||
#: model:ir.ui.menu,name:account.menu_action_tax_code_list
|
||||
msgid "Tax codes"
|
||||
msgstr "税代码"
|
||||
msgstr "税事务"
|
||||
|
||||
#. module: account
|
||||
#: field:account.fiscal.position.template,chart_template_id:0
|
||||
|
@ -1739,7 +1739,7 @@ msgstr "成本分类账的会计期间"
|
|||
#: model:ir.actions.act_window,name:account.action_bank_statement_tree2
|
||||
#: model:ir.ui.menu,name:account.menu_bank_statement_tree2
|
||||
msgid "New Statement"
|
||||
msgstr "新银行对帐单"
|
||||
msgstr "新对帐单"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:account.analytic.account.chart,init,from_date:0
|
||||
|
@ -2581,7 +2581,7 @@ msgstr "应付账"
|
|||
#. module: account
|
||||
#: wizard_view:populate_statement_from_inv,init:0
|
||||
msgid "Import Invoices in Statement"
|
||||
msgstr "在银行对帐单里导入发票"
|
||||
msgstr "在对帐单里导入发票"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice:0
|
||||
|
@ -2873,12 +2873,12 @@ msgstr "跳过'草稿'状态创建分录"
|
|||
#: field:account.invoice.tax,account_id:0
|
||||
#: field:account.move.line,tax_code_id:0
|
||||
msgid "Tax Account"
|
||||
msgstr "税科目"
|
||||
msgstr "税事务"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,note:account.process_transition_statemententries0
|
||||
msgid "From statement, create entries"
|
||||
msgstr "从对账单创建分录"
|
||||
msgstr "从对帐单创建分录"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.account,complete_name:0
|
||||
|
@ -2913,7 +2913,7 @@ msgstr "会计报表"
|
|||
#. module: account
|
||||
#: rml:account.overdue:0
|
||||
msgid "Document: Customer account statement"
|
||||
msgstr "文档:客户报表"
|
||||
msgstr "文档:客户科目"
|
||||
|
||||
#. module: account
|
||||
#: view:product.product:0
|
||||
|
@ -3003,7 +3003,7 @@ msgid ""
|
|||
"The maturity date of the generated entries for this model. You can chosse "
|
||||
"between the date of the creation action or the the date of the creation of "
|
||||
"the entries plus the partner payment terms."
|
||||
msgstr "这模型在到期日产生分录. 你能从创建日期到到付款期限间选择."
|
||||
msgstr "这模型在付款到期日产生分录. 你能从创建日期到到付款期限间选择."
|
||||
|
||||
#. module: account
|
||||
#: selection:account.analytic.journal,type:0
|
||||
|
@ -3212,7 +3212,7 @@ msgstr "平均汇率"
|
|||
#: model:process.node,note:account.process_node_bankstatement0
|
||||
#: model:process.node,note:account.process_node_supplierbankstatement0
|
||||
msgid "Statement encoding produces payment entries"
|
||||
msgstr "产品付款分录清单"
|
||||
msgstr "产品付款分录对帐单"
|
||||
|
||||
#. module: account
|
||||
#: field:account.account,code:0
|
||||
|
@ -3694,7 +3694,7 @@ msgstr "周期性分录科目"
|
|||
#: field:account.move.line,date_maturity:0
|
||||
#: rml:account.overdue:0
|
||||
msgid "Maturity date"
|
||||
msgstr "到期日期"
|
||||
msgstr "付款到期日"
|
||||
|
||||
#. module: account
|
||||
#: view:account.subscription:0
|
||||
|
@ -3798,7 +3798,7 @@ msgstr "付款分录"
|
|||
#. module: account
|
||||
#: help:account.move.line,tax_code_id:0
|
||||
msgid "The Account can either be a base tax code or tax code account."
|
||||
msgstr "这科目可以选基础税的代码或税代码科目"
|
||||
msgstr "可以选基于的税务代码或税务代码"
|
||||
|
||||
#. module: account
|
||||
#: help:account.automatic.reconcile,init,account_ids:0
|
||||
|
@ -4011,7 +4011,7 @@ msgstr "凭证"
|
|||
#: view:account.bank.statement:0
|
||||
#: field:account.bank.statement,line_ids:0
|
||||
msgid "Statement lines"
|
||||
msgstr "银行对帐单明细"
|
||||
msgstr "对帐单明细"
|
||||
|
||||
#. module: account
|
||||
#: field:account.move.line,amount_taxed:0
|
||||
|
@ -4182,7 +4182,7 @@ msgstr "报表上显示的会计年度名称"
|
|||
msgid ""
|
||||
"This field is used for payable and receivable entries. You can put the limit "
|
||||
"date for the payment of this entry line."
|
||||
msgstr "这字段用于应付和应收分录. 你可以在付款分录明细放入的限制日期"
|
||||
msgstr "这字段用于应付和应收分录. 你可以放入该分录明细的付款限定日期"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.tax.code.entries:0
|
||||
|
@ -4552,7 +4552,7 @@ msgstr "将根据选择的模板自动设置你的科目一览表、银行帐号
|
|||
#: field:account.bank.statement.line,statement_id:0
|
||||
#: field:account.move.line,statement_id:0
|
||||
msgid "Statement"
|
||||
msgstr "银行对帐单"
|
||||
msgstr "对帐单"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_move_line_form_encode_by_move
|
||||
|
@ -4622,12 +4622,12 @@ msgstr "运行中"
|
|||
msgid ""
|
||||
"Indicate if the amount of tax must be included in the base amount for the "
|
||||
"computation of the next taxes"
|
||||
msgstr "表明如果税额必须包含在计算下一个税的基础金额里"
|
||||
msgstr "指出如果税额必须在计算下一个税的基础金额里"
|
||||
|
||||
#. module: account
|
||||
#: model:process.node,name:account.process_node_draftstatement0
|
||||
msgid "Draft statement"
|
||||
msgstr "银行对帐单草稿"
|
||||
msgstr "对帐单草稿"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.journal,name:0
|
||||
|
@ -4637,7 +4637,7 @@ msgstr "分录集合名称"
|
|||
#. module: account
|
||||
#: model:process.transition,note:account.process_transition_invoiceimport0
|
||||
msgid "Import invoice from statement"
|
||||
msgstr "从银行对帐单导入发票"
|
||||
msgstr "从对帐单导入发票"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.automatic.reconcile,init,power:0
|
||||
|
@ -4730,7 +4730,7 @@ msgstr "已取消"
|
|||
#: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree
|
||||
#: model:ir.ui.menu,name:account.menu_bank_statement_draft_tree
|
||||
msgid "Draft statements"
|
||||
msgstr "银行对帐单草稿"
|
||||
msgstr "对帐单草稿"
|
||||
|
||||
#. module: account
|
||||
#: wizard_field:populate_statement_from_inv,init,date:0
|
||||
|
@ -5887,7 +5887,7 @@ msgstr "财务结构"
|
|||
#. module: account
|
||||
#: model:process.process,name:account.process_process_statementprocess0
|
||||
msgid "Statement Process"
|
||||
msgstr "银行对帐单处理"
|
||||
msgstr "对帐单处理"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_bank_statement_reconcile
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<group expand="1" string="Group By...">
|
||||
<filter string="User" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Currency" icon="terp-dolar" context="{'group_by':'currency_id'}"/>
|
||||
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
|
|
|
@ -74,13 +74,10 @@
|
|||
icon="terp-check"
|
||||
domain="[('state','in',('draft','open'))]"
|
||||
help = "Draft and Open Invoices"/>
|
||||
<filter string="Pro-forma"
|
||||
icon="terp-check"
|
||||
domain="[('state','=','proforma'),('state','=','proforma2')]"
|
||||
help = "Pro-forma Invoices"/>
|
||||
<filter string="Current"
|
||||
domain="[('state', '=' ,'open')]"
|
||||
help = "open Invoices"/>
|
||||
<filter string="Pro-forma"
|
||||
icon="terp-check"
|
||||
domain="[('state','=','proforma'),('state','=','proforma2')]"
|
||||
help = "Pro-forma Invoices"/>
|
||||
<filter string="Done"
|
||||
icon="terp-dialog-close"
|
||||
domain="[('state','=','paid')]"
|
||||
|
@ -95,7 +92,7 @@
|
|||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<group expand="1" string="Group By...">
|
||||
<filter string="Salesman" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True}"/>
|
||||
|
|
|
@ -88,3 +88,6 @@
|
|||
"access_report_account_type_sales","report.account_type.sales","model_report_account_type_sales","account.group_account_manager",1,0,0,0
|
||||
"access_report_account_sales","report.account.sales","model_report_account_sales","account.group_account_manager",1,0,0,0
|
||||
"access_account_invoice_report","account.invoice.report","model_account_invoice_report","account.group_account_manager",1,0,0,0
|
||||
"access_account_account_report_manager","account.account.report","model_account_account_report","account.group_account_manager",1,0,0,0
|
||||
"access_account_entries_report_manager","account.entries.report","model_account_entries_report","account.group_account_manager",1,0,0,0
|
||||
"access_analytic_entries_report_manager","analytic.entries.report","model_analytic_entries_report","account.group_account_manager",1,0,0,0
|
||||
|
|
|
|
@ -200,7 +200,7 @@ class account_analytic_account(osv.osv):
|
|||
res[id] = round(res.get(id, 0.0),2) + round(res2.get(id, 0.0),2)
|
||||
return res
|
||||
|
||||
def _last_worked_date_calc (self, cr, uid, ids, name, arg, context = None):
|
||||
def _last_worked_date_calc (self, cr, uid, ids, name, arg, context=None):
|
||||
res = {}
|
||||
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)]))
|
||||
if parent_ids:
|
||||
|
@ -384,6 +384,7 @@ class account_analytic_account(osv.osv):
|
|||
'month_ids': fields.function(_month, method=True, type='many2many', relation='account_analytic_analysis.summary.month', string='Month'),
|
||||
'user_ids': fields.function(_user, method=True, type="many2many", relation='account_analytic_analysis.summary.user', string='User'),
|
||||
}
|
||||
|
||||
account_analytic_account()
|
||||
|
||||
class account_analytic_account_summary_user(osv.osv):
|
||||
|
@ -507,11 +508,11 @@ class account_analytic_account_summary_user(osv.osv):
|
|||
res.extend(cr.dictfetchall())
|
||||
else:
|
||||
res = map(lambda x: {'id': x}, ids)
|
||||
|
||||
res_trans_obj = self.pool.get('ir.translation')
|
||||
for f in fields_pre:
|
||||
if self._columns[f].translate:
|
||||
ids = map(lambda x: x['id'], res)
|
||||
res_trans = self.pool.get('ir.translation')._get_ids(cr, user, self._name+','+f, 'model', context.get('lang', False) or 'en_US', ids)
|
||||
res_trans = res_trans_obj._get_ids(cr, user, self._name+','+f, 'model', context.get('lang', False) or 'en_US', ids)
|
||||
for r in res:
|
||||
r[f] = res_trans.get(r['id'], False) or r[f]
|
||||
|
||||
|
@ -683,11 +684,12 @@ class account_analytic_account_summary_month(osv.osv):
|
|||
res.extend(cr.dictfetchall())
|
||||
else:
|
||||
res = map(lambda x: {'id': x}, ids)
|
||||
|
||||
|
||||
res_trans_obj = self.pool.get('ir.translation')
|
||||
for f in fields_pre:
|
||||
if self._columns[f].translate:
|
||||
ids = map(lambda x: x['id'], res)
|
||||
res_trans = self.pool.get('ir.translation')._get_ids(cr, user, self._name+','+f, 'model', context.get('lang', False) or 'en_US', ids)
|
||||
res_trans = res_trans_obj._get_ids(cr, user, self._name+','+f, 'model', context.get('lang', False) or 'en_US', ids)
|
||||
for r in res:
|
||||
r[f] = res_trans.get(r['id'], False) or r[f]
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-04 03:45+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_analytic_analysis
|
||||
|
|
|
@ -33,7 +33,7 @@ Allows to automatically select analytic accounts based on criterions:
|
|||
""",
|
||||
'author' : 'Tiny',
|
||||
'website' : 'http://www.openerp.com',
|
||||
'depends' : ['account', 'sale'],
|
||||
'depends' : ['sale'],
|
||||
'init_xml' : [],
|
||||
'update_xml': ['security/ir.model.access.csv', 'account_analytic_default_view.xml'],
|
||||
'demo_xml' : [],
|
||||
|
|
|
@ -38,6 +38,7 @@ class account_analytic_default(osv.osv):
|
|||
'date_start': fields.date('Start Date'),
|
||||
'date_stop': fields.date('End Date'),
|
||||
}
|
||||
|
||||
def account_get(self, cr, uid, product_id=None, partner_id=None, user_id=None, date=None, context=None):
|
||||
domain = []
|
||||
if product_id:
|
||||
|
@ -65,6 +66,7 @@ class account_analytic_default(osv.osv):
|
|||
res = rec
|
||||
best_index = index
|
||||
return res
|
||||
|
||||
account_analytic_default()
|
||||
|
||||
class account_invoice_line(osv.osv):
|
||||
|
@ -79,6 +81,7 @@ class account_invoice_line(osv.osv):
|
|||
else:
|
||||
res_prod['value'].update({'account_analytic_id':False})
|
||||
return res_prod
|
||||
|
||||
account_invoice_line()
|
||||
|
||||
|
||||
|
@ -105,14 +108,14 @@ class sale_order_line(osv.osv):
|
|||
create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context)
|
||||
if not ids:
|
||||
return create_ids
|
||||
sale_line_obj = self.browse(cr, uid, ids[0], context)
|
||||
pool_inv_line = self.pool.get('account.invoice.line')
|
||||
|
||||
for line in pool_inv_line.browse(cr, uid, create_ids, context):
|
||||
rec = self.pool.get('account.analytic.default').account_get(cr, uid, line.product_id.id, sale_line_obj.order_id.partner_id.id, uid, time.strftime('%Y-%m-%d'), context)
|
||||
sale_line = self.browse(cr, uid, ids[0], context)
|
||||
inv_line_obj = self.pool.get('account.invoice.line')
|
||||
anal_def_obj = self.pool.get('account.analytic.default')
|
||||
for line in inv_line_obj.browse(cr, uid, create_ids, context):
|
||||
rec = anal_def_obj.account_get(cr, uid, line.product_id.id, sale_line.order_id.partner_id.id, uid, time.strftime('%Y-%m-%d'), context)
|
||||
|
||||
if rec:
|
||||
pool_inv_line.write(cr, uid, [line.id], {'account_analytic_id':rec.analytic_id.id}, context=context)
|
||||
inv_line_obj.write(cr, uid, [line.id], {'account_analytic_id':rec.analytic_id.id}, context=context)
|
||||
return create_ids
|
||||
|
||||
sale_order_line()
|
||||
|
|
|
@ -53,6 +53,7 @@ class account_analytic_plan(osv.osv):
|
|||
'name': fields.char('Analytic Plan', size=64, required=True, select=True,),
|
||||
'plan_ids': fields.one2many('account.analytic.plan.line','plan_id','Analytic Plans'),
|
||||
}
|
||||
|
||||
account_analytic_plan()
|
||||
|
||||
class account_analytic_plan_line(osv.osv):
|
||||
|
@ -71,6 +72,7 @@ class account_analytic_plan_line(osv.osv):
|
|||
'min_required': 100.0,
|
||||
'max_required': 100.0,
|
||||
}
|
||||
|
||||
account_analytic_plan_line()
|
||||
|
||||
class account_analytic_plan_instance(osv.osv):
|
||||
|
@ -187,16 +189,18 @@ class account_analytic_plan_instance(osv.osv):
|
|||
pids = self.pool.get('account.analytic.plan.instance').search(cr, uid, [('name','=',vals['name']),('code','=',vals['code']),('plan_id','<>',False)])
|
||||
if pids:
|
||||
raise osv.except_osv(_('Error'), _('A model having this name and code already exists !'))
|
||||
|
||||
res = self.pool.get('account.analytic.plan.line').search(cr, uid, [('plan_id','=',journal.plan_id.id)])
|
||||
|
||||
acct_anal_acct = self.pool.get('account.analytic.account')
|
||||
acct_anal_plan_line_obj = self.pool.get('account.analytic.plan.line')
|
||||
res = acct_anal_plan_line_obj.search(cr, uid, [('plan_id','=',journal.plan_id.id)])
|
||||
for i in res:
|
||||
total_per_plan = 0
|
||||
item = self.pool.get('account.analytic.plan.line').browse(cr, uid, i)
|
||||
item = acct_anal_plan_line_obj.browse(cr, uid, i)
|
||||
temp_list=['account1_ids','account2_ids','account3_ids','account4_ids','account5_ids','account6_ids']
|
||||
for l in temp_list:
|
||||
if vals.has_key(l):
|
||||
for tempo in vals[l]:
|
||||
if self.pool.get('account.analytic.account').search(cr, uid, [('parent_id','child_of',[item.root_analytic_id.id]),('id','=',tempo[2]['analytic_account_id'])]):
|
||||
if acct_anal_acct.search(cr, uid, [('parent_id','child_of',[item.root_analytic_id.id]),('id','=',tempo[2]['analytic_account_id'])]):
|
||||
total_per_plan += tempo[2]['rate']
|
||||
if total_per_plan < item.min_required or total_per_plan > item.max_required:
|
||||
raise osv.except_osv(_('Value Error') ,_('The Total Should be Between %s and %s') % (str(item.min_required), str(item.max_required)))
|
||||
|
@ -252,6 +256,7 @@ class account_journal(osv.osv):
|
|||
_columns = {
|
||||
'plan_id':fields.many2one('account.analytic.plan', 'Analytic Plans'),
|
||||
}
|
||||
|
||||
account_journal()
|
||||
|
||||
class account_invoice_line(osv.osv):
|
||||
|
@ -277,6 +282,7 @@ class account_invoice_line(osv.osv):
|
|||
if rec and rec.analytics_id:
|
||||
res_prod['value'].update({'analytics_id':rec.analytics_id.id})
|
||||
return res_prod
|
||||
|
||||
account_invoice_line()
|
||||
|
||||
class account_move_line(osv.osv):
|
||||
|
@ -345,6 +351,7 @@ class account_invoice(osv.osv):
|
|||
sign = -1
|
||||
|
||||
iml = self.pool.get('account.invoice.line').move_line_get(cr, uid, inv.id)
|
||||
acct_ins_obj = self.pool.get('account.analytic.plan.instance')
|
||||
|
||||
for il in iml:
|
||||
if il['analytics_id']:
|
||||
|
@ -353,14 +360,14 @@ class account_invoice(osv.osv):
|
|||
ref = inv.reference
|
||||
else:
|
||||
ref = self._convert_ref(cr, uid, inv.number)
|
||||
obj_move_line=self.pool.get('account.analytic.plan.instance').browse(cr, uid, il['analytics_id'])
|
||||
amount_calc=cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, il['price'], context={'date': inv.date_invoice}) * sign
|
||||
qty=il['quantity']
|
||||
obj_move_line = acct_ins_obj.browse(cr, uid, il['analytics_id'])
|
||||
amount_calc = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, il['price'], context={'date': inv.date_invoice}) * sign
|
||||
qty = il['quantity']
|
||||
il['analytic_lines']=[]
|
||||
for line2 in obj_move_line.account_ids:
|
||||
amt=amount_calc * (line2.rate/100)
|
||||
qtty=qty* (line2.rate/100)
|
||||
al_vals={
|
||||
amt = amount_calc * (line2.rate/100)
|
||||
qtty = qty* (line2.rate/100)
|
||||
al_vals = {
|
||||
'name': il['name'],
|
||||
'date': inv['date_invoice'],
|
||||
'unit_amount':qtty,
|
||||
|
@ -389,6 +396,7 @@ class analytic_default(osv.osv):
|
|||
_columns = {
|
||||
'analytics_id': fields.many2one('account.analytic.plan.instance', 'Analytic Distribution'),
|
||||
}
|
||||
|
||||
analytic_default()
|
||||
|
||||
class sale_order_line(osv.osv):
|
||||
|
@ -398,14 +406,15 @@ class sale_order_line(osv.osv):
|
|||
def invoice_line_create(self, cr, uid, ids, context=None):
|
||||
create_ids = super(sale_order_line,self).invoice_line_create(cr, uid, ids, context)
|
||||
if ids:
|
||||
sale_line_obj = self.browse(cr, uid, ids[0], context)
|
||||
pool_inv_line = self.pool.get('account.invoice.line')
|
||||
|
||||
for line in pool_inv_line.browse(cr, uid, create_ids, context):
|
||||
rec = self.pool.get('account.analytic.default').account_get(cr, uid, line.product_id.id, sale_line_obj.order_id.partner_id.id, uid, time.strftime('%Y-%m-%d'), context)
|
||||
sale_line = self.browse(cr, uid, ids[0], context)
|
||||
inv_line_obj = self.pool.get('account.invoice.line')
|
||||
acct_anal_def_obj = self.pool.get('account.analytic.default')
|
||||
|
||||
for line in inv_line_obj.browse(cr, uid, create_ids, context):
|
||||
rec = acct_anal_def_obj.account_get(cr, uid, line.product_id.id, sale_line.order_id.partner_id.id, uid, time.strftime('%Y-%m-%d'), context)
|
||||
|
||||
if rec:
|
||||
pool_inv_line.write(cr, uid, [line.id], {'analytics_id':rec.analytics_id.id}, context=context)
|
||||
inv_line_obj.write(cr, uid, [line.id], {'analytics_id':rec.analytics_id.id}, context=context)
|
||||
return create_ids
|
||||
|
||||
sale_order_line()
|
||||
|
|
|
@ -22,4 +22,5 @@ import product
|
|||
import stock
|
||||
import purchase
|
||||
import invoice
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -17,11 +17,12 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
{
|
||||
"name" : "Stock Accounting for Anglo Saxon countries",
|
||||
"version" : "1.2",
|
||||
"author" : "Tiny, Veritos",
|
||||
"website" : "http://tinyerp.com - http://veritos.nl",
|
||||
"name" : "Stock Accounting for Anglo Saxon countries",
|
||||
"version" : "1.2",
|
||||
"author" : "Tiny, Veritos",
|
||||
"website" : "http://tinyerp.com - http://veritos.nl",
|
||||
"description" : """This module will support the Anglo-Saxons accounting methodology by
|
||||
changing the accounting logic with stock transactions. The difference between the Anglo-Saxon accounting countries
|
||||
and the Rhine or also called Continental accounting countries is the moment of taking the Cost of Goods Sold versus Cost of Sales.
|
||||
|
@ -29,12 +30,13 @@
|
|||
This module will add this functionality by using a interim account, to store the value of shipped goods and will contra book this interim account
|
||||
when the invoice is created to transfer this amount to the debtor or creditor account.
|
||||
Secondly, price differences between actual purchase price and fixed product standard price are booked on a seperate account""",
|
||||
"depends" : ["product", "account", "sale", "purchase", "stock"],
|
||||
"category" : "Generic Modules/Inventory Control",
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"depends" : ["product", "purchase"],
|
||||
"category" : "Generic Modules/Inventory Control",
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"update_xml" : ["product_view.xml",],
|
||||
"active": False,
|
||||
"active" : False,
|
||||
"installable": True
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -5,13 +5,11 @@
|
|||
<field name="name">product.normal.form.inherit.stock</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="inherit_id" ref="account.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page/field[@name='property_account_expense']" position="after">
|
||||
<field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />
|
||||
<newline/>
|
||||
<!-- <field name="property_account_sending_goods" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('sale_ok','=',0)]}" />-->
|
||||
<!-- <field name="property_account_received_goods" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />-->
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -20,13 +18,11 @@
|
|||
<field name="name">product.template.product.form.inherit</field>
|
||||
<field name="model">product.template</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="product.product_template_form_view"/>
|
||||
<field name="inherit_id" ref="account.product_template_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page/field[@name='property_account_expense']" position="after">
|
||||
<field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />
|
||||
<newline/>
|
||||
<!-- <field name="property_account_sending_goods" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('sale_ok','=',0)]}" />-->
|
||||
<!-- <field name="property_account_received_goods" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />-->
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -41,8 +37,6 @@
|
|||
<group col="2" colspan="2">
|
||||
<separator string=" Accounting Property" colspan="2"/>
|
||||
<field name="property_account_creditor_price_difference_categ" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />
|
||||
<!-- <field name="property_account_sending_goods_categ" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('sale_ok','=',0)]}" />-->
|
||||
<!-- <field name="property_account_received_goods_categ" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" />-->
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
@ -22,5 +22,6 @@
|
|||
import crossovered_budget
|
||||
import report
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -20,14 +20,9 @@
|
|||
##############################################################################
|
||||
|
||||
from osv import osv,fields
|
||||
import tools
|
||||
import netsvc
|
||||
from mx import DateTime
|
||||
import time
|
||||
import datetime
|
||||
from tools.translate import _
|
||||
|
||||
|
||||
def strToDate(dt):
|
||||
dt_date=datetime.date(int(dt[0:4]),int(dt[5:7]),int(dt[8:10]))
|
||||
return dt_date
|
||||
|
@ -127,13 +122,6 @@ class crossovered_budget(osv.osv):
|
|||
'creating_user_id': lambda self,cr,uid,context: uid,
|
||||
}
|
||||
|
||||
# def action_set_to_draft(self, cr, uid, ids, *args):
|
||||
# self.write(cr, uid, ids, {'state': 'draft'})
|
||||
# wf_service = netsvc.LocalService('workflow')
|
||||
# for id in ids:
|
||||
# wf_service.trg_create(uid, self._name, id, cr)
|
||||
# return True
|
||||
|
||||
def budget_confirm(self, cr, uid, ids, *args):
|
||||
self.write(cr, uid, ids, {
|
||||
'state':'confirm'
|
||||
|
|
|
@ -19,17 +19,16 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
"name" : "Account Cancel",
|
||||
"version" : "1.1",
|
||||
"depends" : ["account"],
|
||||
"author" : "Tiny",
|
||||
"category": 'Generic Modules/Accounting',
|
||||
"description": """
|
||||
Module Add Allow cancelling entries field on form view of account journal if it set to true it allows user to cancel entries & invoices.
|
||||
Module adds 'Allow cancelling entries' field on form view of account journal. If set to true it allows user to cancel entries & invoices.
|
||||
""",
|
||||
'website': 'http://www.openerp.com',
|
||||
"depends" : ["account"],
|
||||
'init_xml': [],
|
||||
'update_xml': ['account_cancel_view.xml' ],
|
||||
'demo_xml': [],
|
||||
|
@ -37,4 +36,5 @@
|
|||
'active': False,
|
||||
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page[@string='General Information']/group/field[@name='centralisation']" position="after">
|
||||
<xpath expr="/form/notebook/page[@string='General Information']/group/group/field[@name='centralisation']" position="after">
|
||||
<field name="update_posted"/>
|
||||
</xpath>
|
||||
</field>
|
||||
|
|
|
@ -21,5 +21,6 @@
|
|||
|
||||
import account_coda
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -20,23 +20,24 @@
|
|||
##############################################################################
|
||||
|
||||
{
|
||||
"name":"Account CODA - import bank statements from coda file",
|
||||
"version":"1.0",
|
||||
"author":"Tiny",
|
||||
"category":"Account CODA",
|
||||
"description":"""
|
||||
"name" : "Account CODA - import bank statements from coda file",
|
||||
"version" : "1.0",
|
||||
"author" : "Tiny",
|
||||
"category" : "Account CODA",
|
||||
"description": """
|
||||
Module provides functionality to import
|
||||
bank statements from coda files.
|
||||
""",
|
||||
"depends":["base", "account"],
|
||||
"demo_xml":["account_coda_demo.xml"],
|
||||
"init_xml":[],
|
||||
"update_xml" : ["security/ir.model.access.csv",
|
||||
"depends" : ["account"],
|
||||
"demo_xml" : [],
|
||||
"init_xml" : [],
|
||||
"update_xml": ["security/ir.model.access.csv",
|
||||
"wizard/account_coda_import.xml",
|
||||
"account_coda_view.xml"],
|
||||
"active":False,
|
||||
"installable":True,
|
||||
"active" : False,
|
||||
"installable" : True,
|
||||
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -26,25 +26,26 @@ class account_coda(osv.osv):
|
|||
_name = "account.coda"
|
||||
_description = "coda for an Account"
|
||||
_columns = {
|
||||
'name': fields.binary('Coda file', readonly=True ,help="Store the detail of bank statements"),
|
||||
'statement_ids': fields.one2many('account.bank.statement','coda_id','Generated Bank Statements', readonly=True),
|
||||
'name': fields.binary('Coda file', readonly=True, help="Store the detail of bank statements"),
|
||||
'statement_ids': fields.one2many('account.bank.statement', 'coda_id', 'Generated Bank Statements', readonly=True),
|
||||
'note': fields.text('Import log', readonly=True),
|
||||
'journal_id': fields.many2one('account.journal','Journal', readonly=True, select=True,help="Bank Journal"),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal', readonly=True, select=True, help="Bank Journal"),
|
||||
'date': fields.date('Date', readonly=True, select=True, help="Import Date"),
|
||||
'user_id': fields.many2one('res.users','User', readonly=True, select=True),
|
||||
'user_id': fields.many2one('res.users', 'User', readonly=True, select=True),
|
||||
}
|
||||
_defaults = {
|
||||
'date': time.strftime('%Y-%m-%d'),
|
||||
'user_id': lambda self,cr,uid,context: uid,
|
||||
}
|
||||
|
||||
account_coda()
|
||||
|
||||
class account_bank_statement(osv.osv):
|
||||
_inherit = "account.bank.statement"
|
||||
_columns = {
|
||||
'coda_id':fields.many2one('account.coda','Coda'),
|
||||
'coda_id':fields.many2one('account.coda', 'Coda'),
|
||||
}
|
||||
|
||||
account_bank_statement()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -21,7 +21,6 @@
|
|||
##############################################################################
|
||||
|
||||
import time
|
||||
from mx import DateTime
|
||||
import base64
|
||||
|
||||
from osv import fields
|
||||
|
@ -54,7 +53,8 @@ class account_coda_import(osv.osv_memory):
|
|||
'coda': fields.binary('Coda File', required=True),
|
||||
'note':fields.text('Log'),
|
||||
}
|
||||
def coda_parsing(self, cr, uid, ids, context):
|
||||
|
||||
def coda_parsing(self, cr, uid, ids, context=None):
|
||||
|
||||
journal_obj=self.pool.get('account.journal')
|
||||
account_period_obj = self.pool.get('account.period')
|
||||
|
@ -65,10 +65,12 @@ class account_coda_import(osv.osv_memory):
|
|||
statement_reconcile_obj = self.pool.get('account.bank.statement.reconcile')
|
||||
account_coda_obj = self.pool.get('account.coda')
|
||||
mod_obj = self.pool.get('ir.model.data')
|
||||
|
||||
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
data = self.read(cr, uid, ids)[0]
|
||||
|
||||
|
||||
codafile = data['coda']
|
||||
journal_code = journal_obj.browse(cr, uid, data['journal_id'], context).code
|
||||
|
||||
|
@ -265,6 +267,7 @@ class account_coda_import(osv.osv_memory):
|
|||
context.update({ 'statment_ids':bkst_list})
|
||||
model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'account_coda_note_view')], context=context)
|
||||
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
|
||||
|
||||
return {
|
||||
'name': _('Result'),
|
||||
'res_id': ids[0],
|
||||
|
@ -277,7 +280,10 @@ class account_coda_import(osv.osv_memory):
|
|||
'context': context,
|
||||
'type': 'ir.actions.act_window',
|
||||
}
|
||||
def action_open_window(self, cr, uid, data, context):
|
||||
|
||||
def action_open_window(self, cr, uid, data, context=None):
|
||||
if not context:
|
||||
cotext = {}
|
||||
return {
|
||||
'domain':"[('id','in',%s)]"%(context.get('statment_ids', False)),
|
||||
'name': 'Statement',
|
||||
|
@ -287,6 +293,7 @@ class account_coda_import(osv.osv_memory):
|
|||
'view_id': False,
|
||||
'type': 'ir.actions.act_window',
|
||||
}
|
||||
|
||||
account_coda_import()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -40,4 +40,5 @@ This module implement the modification on the invoice form.
|
|||
'active': False,
|
||||
'certificate': '0070514190381',
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
import time
|
||||
|
||||
from osv import fields, osv
|
||||
import decimal_precision as dp
|
||||
|
||||
class account_invoice(osv.osv):
|
||||
_inherit = "account.invoice"
|
||||
|
@ -117,7 +116,7 @@ class account_invoice_line(osv.osv):
|
|||
return super(account_invoice_line, self)._price_unit_default(cr, uid, context)
|
||||
return 0
|
||||
|
||||
def _get_invoice(self, cr, uid, ids, context):
|
||||
def _get_invoice(self, cr, uid, ids, context=None):
|
||||
result = {}
|
||||
for inv in self.pool.get('account.invoice').browse(cr, uid, ids, context=context):
|
||||
for line in inv.invoice_line:
|
||||
|
@ -126,9 +125,9 @@ class account_invoice_line(osv.osv):
|
|||
|
||||
_columns = {
|
||||
'price_subtotal': fields.function(_amount_line2, method=True, string='Subtotal w/o tax', multi='amount',
|
||||
store={'account.invoice':(_get_invoice,['price_type'],10), 'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids, None,10)}),
|
||||
store={'account.invoice':(_get_invoice,['price_type'], 10), 'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids, None,10)}),
|
||||
'price_subtotal_incl': fields.function(_amount_line2, method=True, string='Subtotal', multi='amount',
|
||||
store={'account.invoice':(_get_invoice,['price_type'],10), 'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids, None,10)}),
|
||||
store={'account.invoice':(_get_invoice,['price_type'], 10), 'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids, None,10)}),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
|
|
@ -31,15 +31,10 @@
|
|||
""",
|
||||
"category" : "Generic Modules/Accounting",
|
||||
"website" : "http://tinyerp.com",
|
||||
"depends" : [
|
||||
"base",
|
||||
"account"
|
||||
],
|
||||
"init_xml" : [
|
||||
],
|
||||
"depends" : ["account"],
|
||||
"init_xml" : [],
|
||||
|
||||
"demo_xml" : [
|
||||
],
|
||||
"demo_xml" : [],
|
||||
|
||||
"update_xml" : [
|
||||
"security/ir.model.access.csv",
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_account_voucher_user","account.voucher","model_account_voucher","account.group_account_user",1,0,0,0
|
||||
"access_account_voucher_line_user","account.voucher.line","model_account_voucher_line","account.group_account_user",1,0,0,0
|
||||
"access_account_open_voucher_user","account.open.voucher","model_account_open_voucher","account.group_account_user",1,0,0,0
|
||||
"access_account_voucher_manager","account.voucher","model_account_voucher","account.group_account_manager",1,1,1,1
|
||||
"access_account_voucher_line_manager","account.voucher.line","model_account_voucher_line","account.group_account_manager",1,1,1,1
|
||||
"access_account_open_voucher_manager","account.open.voucher","model_account_open_voucher","account.group_account_manager",1,1,1,1
|
||||
|
|
|
|
@ -138,7 +138,7 @@
|
|||
|
||||
<!-- Receipt Vouchers -->
|
||||
<record model="ir.actions.act_window" id="action_receipt_vou_voucher_list">
|
||||
<field name="name">Customer Vouchers</field>
|
||||
<field name="name">Receivable Vouchers</field>
|
||||
<field name="res_model">account.voucher</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
|
@ -151,7 +151,7 @@
|
|||
|
||||
<!-- Purchase Vouchers -->
|
||||
<record model="ir.actions.act_window" id="action_pay_vou_voucher_list">
|
||||
<field name="name">Vendor Vouchers</field>
|
||||
<field name="name">Payable Vouchers</field>
|
||||
<field name="res_model">account.voucher</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
|
|
|
@ -1,3 +1 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_account_voucher_unreconcile_user","account.voucher.unreconcile","model_account_voucher_unreconcile","account.group_account_user",1,0,0,0
|
||||
"access_account_voucher_unreconcile_manager","account.voucher.unreconcile","model_account_voucher_unreconcile","account.group_account_manager",1,1,1,1
|
||||
|
|
|
|
@ -22,4 +22,3 @@
|
|||
"access_report_object_encoded","report.object.encoded","model_report_object_encoded","base.group_user",1,0,0,0
|
||||
"access_report_object_encoded_manager","report.object.encoded.manager","model_report_object_encoded_manager","base.group_user",1,0,0,0
|
||||
"access_report_unclassified_objects","report.unclassified.objects","model_report_unclassified_objects","base.group_user",1,0,0,0
|
||||
"access_auction_lots_buyer_map_user","auction_lots_buyer_map_user","model_auction_lots_buyer_map","base.group_user",1,0,0,0
|
||||
|
|
|
|
@ -12,7 +12,7 @@
|
|||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval="'Luc Latour'" name="partner_name"/>
|
||||
<field eval="'open'" name="state"/>
|
||||
<field eval="'draft'" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="'(726) 782-0636'" name="mobile"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -21,13 +21,14 @@
|
|||
<field eval="'The Oil Company'" name="name"/>
|
||||
<field eval="'(769) 703-274'" name="phone"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_electonicgoodsdealer0" model="crm.lead">
|
||||
<field name="type_id" ref="crm.type_lead7"/>
|
||||
<field eval="'4'" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval="'Marc Dufour'" name="partner_name"/>
|
||||
<field eval="'open'" name="state"/>
|
||||
<field eval="'draft'" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="'(392) 895-7917'" name="mobile"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -36,13 +37,14 @@
|
|||
<field eval="'Le Club SARL'" name="name"/>
|
||||
<field eval="'(956) 293-2595'" name="phone"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_developingwebapplications0" model="crm.lead">
|
||||
<field name="type_id" ref="crm.type_lead5"/>
|
||||
<field eval="'2'" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field eval="'Fabien Pinckaers'" name="partner_name"/>
|
||||
<field eval="'done'" name="state"/>
|
||||
<field eval="'draft'" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="'(820) 167-3208'" name="mobile"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -67,13 +69,14 @@
|
|||
<field eval="'The Gas Company'" name="name"/>
|
||||
<field eval="'(514) 698-4118'" name="phone"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_itdeveloper0" model="crm.lead">
|
||||
<field name="type_id" ref="crm.type_lead4"/>
|
||||
<field eval="'3'" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval="'Carrie Helle'" name="partner_name"/>
|
||||
<field eval="'pending'" name="state"/>
|
||||
<field eval="'draft'" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="'(333) 715-1450'" name="mobile"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -82,6 +85,7 @@
|
|||
<field eval="'Stonage IT'" name="name"/>
|
||||
<field eval="'(855) 924-4364'" name="phone"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_mgroperations0" model="crm.lead">
|
||||
<field name="partner_address_id" ref="base.res_partner_address_1"/>
|
||||
<field eval="1" name="active"/>
|
||||
|
@ -91,7 +95,7 @@
|
|||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval="'Tina Pinero'" name="partner_name"/>
|
||||
<field eval="'cancel'" name="state"/>
|
||||
<field eval="'draft'" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="'(468) 017-2684'" name="mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor8"/>
|
||||
|
@ -107,7 +111,7 @@
|
|||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval="'Wendi Baltz'" name="partner_name"/>
|
||||
<field eval="'done'" name="state"/>
|
||||
<field eval="'draft'" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval="'(463) 014-1208'" name="mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor4"/>
|
||||
|
@ -115,5 +119,107 @@
|
|||
<field eval="'Gardner Group'" name="name"/>
|
||||
<field eval="'(282) 603-7489'" name="phone"/>
|
||||
</record>
|
||||
<record id="crm_case_webvisitor0" model="crm.lead">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="type_id" ref="crm.type_lead5"/>
|
||||
<field eval=""1"" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field eval=""Questionnaire"" name="name"/>
|
||||
<field eval=""open"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval=""Smith John"" name="partner_name2"/>
|
||||
<field eval=""(487) 013-1504"" name="partner_mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor6"/>
|
||||
<field eval=""Website Visitor"" name="partner_name"/>
|
||||
<field eval=""smith_john@gmail.com"" name="email_from"/>
|
||||
<field eval="time.strftime('%Y-%m-16 10:05:15')" name="date"/>
|
||||
</record>
|
||||
<record id="crm_case_business_card0" model="crm.lead">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="type_id" ref="crm.type_lead3"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval=""Marketing Products"" name="name"/>
|
||||
<field eval=""open"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval=""Elvis Borne"" name="partner_name2"/>
|
||||
<field eval=""(147) 014-6574"" name="partner_mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor5"/>
|
||||
<field name="stage_id" ref="crm.stage_lead1"/>
|
||||
<field eval=""Business Card"" name="partner_name"/>
|
||||
<field eval=""(124) 587-8974"" name="partner_phone"/>
|
||||
<field eval="time.strftime('%Y-%m-16 11:05:15')" name="date"/>
|
||||
</record>
|
||||
<record id="crm_case_imported_contact0" model="crm.lead">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="type_id" ref="crm.type_lead8"/>
|
||||
<field eval=""2"" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field eval=""Business Group"" name="name"/>
|
||||
<field eval=""cancel"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval=""Drew Clark"" name="partner_name2"/>
|
||||
<field eval=""(125) 021-4781"" name="partner_mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor1"/>
|
||||
<field name="stage_id" ref="crm.stage_lead2"/>
|
||||
<field eval=""Imported Contact"" name="partner_name"/>
|
||||
</record>
|
||||
<record id="crm_case_employee0" model="crm.lead">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="type_id" ref="crm.type_lead3"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field eval=""OpenERP Campaining"" name="name"/>
|
||||
<field eval=""draft"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval=""Carl Nelson"" name="partner_name2"/>
|
||||
<field eval=""(874) 022-6574"" name="partner_mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor3"/>
|
||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||
<field eval=""Campaining"" name="partner_name"/>
|
||||
<field eval=""(232) 147-6329"" name="partner_phone"/>
|
||||
</record>
|
||||
<record id="crm_case_company_partnership0" model="crm.lead">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="type_id" ref="crm.type_lead3"/>
|
||||
<field eval=""3"" name="priority"/>
|
||||
<field name="type">lead</field>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field eval=""Offer"" name="name"/>
|
||||
<field eval=""done"" name="state"/>
|
||||
<field name="section_id" ref="crm.section_sales_department"/>
|
||||
<field eval=""Joe Lucas"" name="partner_name2"/>
|
||||
<field eval=""(234) 031-1254"" name="partner_mobile"/>
|
||||
<field name="categ_id" ref="crm.categ_oppor7"/>
|
||||
<field name="stage_id" ref="crm.stage_lead1"/>
|
||||
<field eval=""Partnership Offer"" name="partner_name"/>
|
||||
<field eval=""(254) 954-2147"" name="partner_phone"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Call Function to Open the leads-->
|
||||
<function model="crm.lead" name="case_open">
|
||||
<value eval="[ref('crm_case_itisatelesalescampaign0'), ref('crm_case_electonicgoodsdealer0'), ref('crm_case_company_partnership0'), ref('crm_case_webvisitor0'), ref('crm_case_business_card0')]"/>
|
||||
</function>
|
||||
|
||||
<!-- Call Function to mark the lead as Pending-->
|
||||
<function model="crm.lead" name="case_pending">
|
||||
<value eval="[ref('crm_case_itdeveloper0')]"/>
|
||||
</function>
|
||||
|
||||
<!-- Call Function to Close the leads-->
|
||||
<function model="crm.lead" name="case_close">
|
||||
<value eval="[ref('crm_case_vpoperations0'), ref('crm_case_developingwebapplications0'), ref('crm_case_webvisitor0')]"/>
|
||||
</function>
|
||||
|
||||
<!-- Call Function to Cancel the leads-->
|
||||
<function model="crm.lead" name="case_cancel">
|
||||
<value eval="[ref('crm_case_mgroperations0'), ref('crm_case_imported_contact0')]"/>
|
||||
</function>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<group expand="1" string="Group By...">
|
||||
<filter string="User" name="user" icon="terp-personal"
|
||||
domain="[]" context="{'group_by':'user_id'}" />
|
||||
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}" />
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<group expand="1" string="Group By...">
|
||||
<filter string="User" name="User" icon="terp-personal"
|
||||
domain="[]" context="{'group_by':'user_id'}" />
|
||||
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}" />
|
||||
|
|
|
@ -33,7 +33,7 @@ class hr_employee_category(osv.osv):
|
|||
'child_ids': fields.one2many('hr.employee.category', 'parent_id', 'Child Categories')
|
||||
}
|
||||
|
||||
def _check_recursion(self, cr, uid, ids):
|
||||
def _check_recursion(self, cr, uid, ids, context=None):
|
||||
level = 100
|
||||
while len(ids):
|
||||
cr.execute('select distinct parent_id from hr_employee_category where id IN %s', (tuple(ids), ))
|
||||
|
@ -53,9 +53,10 @@ class hr_employee_marital_status(osv.osv):
|
|||
_name = "hr.employee.marital.status"
|
||||
_description = "Employee Marital Status"
|
||||
_columns = {
|
||||
'name': fields.char('Marital Status', size=30, required=True),
|
||||
'name': fields.char('Marital Status', size=32, required=True),
|
||||
'description': fields.text('Status Description'),
|
||||
}
|
||||
|
||||
hr_employee_marital_status()
|
||||
|
||||
class hr_job(osv.osv):
|
||||
|
@ -95,11 +96,11 @@ class hr_employee(osv.osv):
|
|||
'country_id': fields.many2one('res.country', 'Nationality'),
|
||||
'birthday': fields.date("Birthday"),
|
||||
'ssnid': fields.char('SSN No', size=32, help='Social Security Number'),
|
||||
'sinid': fields.char('SIN No', size=32),
|
||||
'sinid': fields.char('SIN No', size=32, help="Social Insurance Number"),
|
||||
'otherid': fields.char('Other ID', size=32),
|
||||
'gender': fields.selection([('male', 'Male'),('female', 'Female')], 'Gender'),
|
||||
'marital': fields.many2one('hr.employee.marital.status', 'Marital Status'),
|
||||
'bank_account': fields.char('Bank Account', size=56),
|
||||
'bank_account': fields.char('Bank Account', size=64),
|
||||
'partner_id': fields.related('company_id', 'partner_id', type='many2one', relation='res.partner', readonly=True),
|
||||
'department_id':fields.many2one('hr.department','Department'),
|
||||
'address_id': fields.many2one('res.partner.address', 'Working Address'),
|
||||
|
@ -127,7 +128,7 @@ class hr_employee(osv.osv):
|
|||
'photo': _get_photo,
|
||||
}
|
||||
|
||||
def _check_recursion(self, cr, uid, ids):
|
||||
def _check_recursion(self, cr, uid, ids, context=None):
|
||||
level = 100
|
||||
while len(ids):
|
||||
cr.execute('select distinct parent_id from hr_employee where id IN %s',(tuple(ids),))
|
||||
|
@ -143,4 +144,4 @@ class hr_employee(osv.osv):
|
|||
|
||||
hr_employee()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -39,7 +39,7 @@ class hr_department(osv.osv):
|
|||
return res
|
||||
|
||||
def _dept_name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None):
|
||||
res = self.name_get(cr, uid, ids, context)
|
||||
res = self.name_get(cr, uid, ids, context=context)
|
||||
return dict(res)
|
||||
|
||||
_name = "hr.department"
|
||||
|
@ -53,20 +53,20 @@ class hr_department(osv.osv):
|
|||
'manager_id': fields.many2one('res.users', 'Manager', required=True),
|
||||
'member_ids': fields.many2many('res.users', 'hr_department_user_rel', 'department_id', 'user_id', 'Members'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
||||
_defaults = {
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.department', context=c),
|
||||
}
|
||||
}
|
||||
|
||||
def _get_members(self,cr, uid, context=None):
|
||||
mids = self.search(cr, uid, [('manager_id', '=', uid)])
|
||||
result = {uid:1}
|
||||
for m in self.browse(cr, uid, mids, context):
|
||||
result = {uid: 1}
|
||||
for m in self.browse(cr, uid, mids, context=context):
|
||||
for user in m.member_ids:
|
||||
result[user.id] = 1
|
||||
return result.keys()
|
||||
|
||||
def _check_recursion(self, cr, uid, ids):
|
||||
def _check_recursion(self, cr, uid, ids, context=None):
|
||||
level = 100
|
||||
while len(ids):
|
||||
cr.execute('select distinct parent_id from hr_department where id IN %s',(tuple(ids),))
|
||||
|
@ -122,12 +122,12 @@ class res_users(osv.osv):
|
|||
result[user_id] = parent_ids
|
||||
return result
|
||||
|
||||
def _parent_search(self, cr, uid, obj, name, args, context):
|
||||
def _parent_search(self, cr, uid, obj, name, args, context=None):
|
||||
parent = []
|
||||
for arg in args:
|
||||
if arg[0] == 'parent_id':
|
||||
parent = arg[2]
|
||||
child_ids = self._child_compute(cr, uid, parent, name, args, {})
|
||||
child_ids = self._child_compute(cr, uid, parent, name, args, context=context)
|
||||
if not child_ids:
|
||||
return [('id', 'in', [0])]
|
||||
return [('id', 'in', child_ids.get(uid,[]))]
|
||||
|
@ -163,7 +163,7 @@ class res_users(osv.osv):
|
|||
for arg in args:
|
||||
if arg[0] == 'child_ids':
|
||||
parent = arg[2]
|
||||
child_ids = self._child_compute(cr, uid, parent, name, args, {})
|
||||
child_ids = self._child_compute(cr, uid, parent, name, args, context=context)
|
||||
if not child_ids:
|
||||
return [('id', 'in', [0])]
|
||||
return [('id', 'in', child_ids.get(uid,[]))]
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
<field name="department_id"/>
|
||||
<field name="job_id"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="coach_id" invisible="1" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -150,9 +151,20 @@
|
|||
<!--
|
||||
=======================
|
||||
Employee marital status
|
||||
=======================
|
||||
=======================
|
||||
-->
|
||||
|
||||
<record id="hr_hr_employee_marital_status_tree" model="ir.ui.view">
|
||||
<field name="name">hr.hr.employee.marital.status.tree</field>
|
||||
<field name="model">hr.employee.marital.status</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Marital Status">
|
||||
<field name="name" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_hr_employee_marital_status_form" model="ir.ui.view">
|
||||
<field name="name">hr.hr.employee.marital.status</field>
|
||||
<field name="model">hr.employee.marital.status</field>
|
||||
|
@ -171,6 +183,7 @@
|
|||
<field name="res_model">hr.employee.marital.status</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="hr_hr_employee_marital_status_tree"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_hr_marital_status" id="hr_menu_marital_status"
|
||||
|
@ -307,6 +320,7 @@
|
|||
<group col="6" colspan="4">
|
||||
<field name="name" />
|
||||
<field name="department_id" />
|
||||
<newline/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="expected_employees"/>
|
||||
<field name="no_of_employee"/>
|
||||
|
@ -358,7 +372,7 @@
|
|||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
<field name="department_id" widget="selection">
|
||||
<filter icon="terp-gtk-select-all" domain="[('department_id','=',context.get('department_id',False))]" help="My Departments Jobs"/>
|
||||
<filter icon="terp-gtk-select-all" domain="[('department_id', '=', context.get('department_id', False))]" help="My Departments Jobs"/>
|
||||
</field>
|
||||
</search>
|
||||
</field>
|
||||
|
|
|
@ -2,6 +2,5 @@
|
|||
"access_hr_action_reason_employee","hr action reason employee","model_hr_action_reason","hr_attendance.group_hr_attendance",1,0,0,0
|
||||
"access_hr_action_reason_employee","hr action reason employee","model_hr_action_reason","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_attendance_employee","hr attendance employee","model_hr_attendance","hr_attendance.group_hr_attendance",1,1,1,1
|
||||
"access_hr_sign_in_out","hr attendance sign in out","model_hr_sign_in_out","hr_attendance.group_hr_attendance",1,1,1,1
|
||||
"access_hr_attendance_employee","hr employee attendance sign in out","hr.model_hr_employee","hr_attendance.group_hr_attendance",1,0,0,0
|
||||
"access_hr_attendance_resource","hr resource attendance sign in out","resource.model_resource_resource","hr_attendance.group_hr_attendance",1,0,0,0
|
||||
|
|
|
|
@ -38,6 +38,7 @@ class hr_expense_report(osv.osv):
|
|||
'product_id':fields.many2one('product.product', 'Product', readonly=True),
|
||||
'journal_id': fields.many2one('account.journal', 'Force Journal', readonly=True),
|
||||
'product_qty':fields.float('Qty', readonly=True),
|
||||
'invoiced':fields.integer('# of Invoiced Lines', readonly=True),
|
||||
'employee_id': fields.many2one('hr.employee', "Employee's Name", readonly=True),
|
||||
'date_confirm': fields.date('Confirmation Date', readonly=True),
|
||||
'date_valid': fields.date('Validation Date', readonly=True),
|
||||
|
@ -77,6 +78,7 @@ class hr_expense_report(osv.osv):
|
|||
to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_confirm,
|
||||
to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_valid,
|
||||
s.invoice_id,
|
||||
count(s.invoice_id) as invoiced,
|
||||
s.user_valid as user_id,
|
||||
s.department_id,
|
||||
to_char(date_trunc('day',s.create_date), 'YYYY') as year,
|
||||
|
|
|
@ -17,17 +17,17 @@
|
|||
<field name="analytic_account" invisible="1"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="product_id" invisible="1"/>
|
||||
<field name="product_qty" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="invoiced" sum="Total Invoiced Lines"/>
|
||||
<field name="nbr" sum="# of Lines"/>
|
||||
<field name="no_of_products" sum="# of Products"/>
|
||||
<field name="delay_valid"/>
|
||||
<field name="delay_confirm"/>
|
||||
<field name="price_average" avg="Average Price"/>
|
||||
<field name="price_total" sum="Total Price"/>
|
||||
<field name="delay_confirm"/>
|
||||
<field name="delay_valid"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -62,15 +62,14 @@
|
|||
<filter icon="terp-go-week" string=" 7 Days " separator="1"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" help="Expenses during last 7 days"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Draft" icon="terp-document-new" domain="[('state','=','draft')]" help = "Draft Expenses"/>
|
||||
<filter string="Waiting" icon="terp-gtk-media-pause" domain="[('state', '=' ,'confirm')]"
|
||||
<filter string="Draft" icon="terp-document-new" domain="[('state','=','draft')]" help = "Draft Expenses"/>
|
||||
<filter string="Waiting" icon="terp-gtk-media-pause" domain="[('state', '=' ,'confirm')]"
|
||||
help = "Confirm Expenses"/>
|
||||
<filter string="Accepted" icon="terp-camera_test" domain="[('state','=','accepted')]"
|
||||
<filter string="Accepted" icon="terp-camera_test" domain="[('state','=','accepted')]"
|
||||
help = "Accepted Expenses"/>
|
||||
<filter string="Cancelled" icon="terp-dialog-close" domain="[('state','=','cancelled')]"
|
||||
help = "Cancelled Expenses"/>
|
||||
<separator orientation="vertical"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="1" string="Group By...">
|
||||
|
@ -80,7 +79,6 @@
|
|||
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Analytic account" icon="terp-folder-green" context="{'group_by':'analytic_account'}"/>
|
||||
<filter string="Force Journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
|
@ -96,10 +94,6 @@
|
|||
<group expand="0" string="Extended filters..." groups="base.group_extended">
|
||||
<field name="product_id"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="journal_id" widget="selection"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="department_id"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="user_id"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
|
|
|
@ -45,11 +45,6 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Leaves">
|
||||
<group>
|
||||
<filter icon="terp-personal" string="Employee" domain="[('category_id', '=', False)]"
|
||||
help="Leaves by empolyee"/>
|
||||
<filter icon="terp-stock_symbol-selection" string="Category" domain="[('employee_id', '=', False)]"
|
||||
help="Leaves by category"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-year" string="This Year"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]" help="Leaves in this year"/>
|
||||
<filter icon="terp-go-month" string="This Month" name="month"
|
||||
|
@ -57,23 +52,28 @@
|
|||
<filter icon="terp-go-week" string=" 7 Days " separator="1"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]" help="Leaves during last 7 days"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Draft" icon="terp-document-new" domain="[('state','=','draft')]"
|
||||
help = "Draft Leaves"/>
|
||||
<filter string="Waiting Validation" icon="terp-gtk-media-pause" domain="[('state', '=' ,'confirm')]"
|
||||
<filter string="Current Leaves" icon="terp-gtk-media-pause" domain="[('state', 'in' ,('draft','confirm'))]"
|
||||
help = "In progress Leaves"/>
|
||||
<filter string="Validated" icon="terp-camera_test" domain="[('state','=','validate')]"
|
||||
help = "Pending Leaves"/>
|
||||
<filter icon="terp-gtk-stop" string="Cancelled" domain="[('state','=','cancel')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="employee_id" widget="selection"/>
|
||||
<field name="user_id" widget="selection">
|
||||
</field>
|
||||
<field name="department_id"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="employee_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="10" col="12">
|
||||
<group expand="1" string="Group By..." colspan="10" col="12">
|
||||
<filter string="Department" name="department" icon="terp-personal+" context="{'group_by':'department_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-personal" string="Employee" name="Employee" context="{'group_by':'employee_id'}"
|
||||
help="Leaves by empolyee"/>
|
||||
<filter string="User" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-stock_symbol-selection" string="Category" context="{'group_by':'category_id'}"
|
||||
help="Leaves by category"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" context="{'group_by':'holiday_status_id'}"/>
|
||||
<filter string="Department" icon="terp-personal+" context="{'group_by':'department_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}"/>
|
||||
|
@ -82,18 +82,13 @@
|
|||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Extended options..." colspan="10" col="12">
|
||||
<filter icon="terp-gtk-stop" string="Refused" name="done"
|
||||
domain="[('state','=','refuse')]"/>
|
||||
<field name="holiday_status_id"/>
|
||||
<field name="category_id"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date_from"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="holiday_status_id" widget="selection"/>
|
||||
<field name="user_id"/>
|
||||
<newline/>
|
||||
<filter icon="terp-gtk-stop" string="Cancelled" domain="[('state','=','cancel')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="department_id" widget="selection"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
@ -104,7 +99,7 @@
|
|||
<field name="res_model">hr.holidays.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="context">{"search_default_user_id": uid, 'search_default_month':1, 'search_default_Employee':1, 'group_by':[]} </field>
|
||||
<field name="context">{"search_default_user_id": uid, 'search_default_month':1, 'search_default_department':1, 'group_by':[], 'group_by_no_leaf':1} </field>
|
||||
<field name="search_view_id" ref="view_hr_holidays_report_search"/>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -194,10 +194,10 @@ class payroll_register(osv.osv):
|
|||
# 'advice_ids':fields.one2many('hr.payroll.advice', 'register_id', 'Bank Advice'),
|
||||
'company_id':fields.many2one('res.company', 'Company', required=False),
|
||||
'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
|
||||
'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, int(config['price_accuracy']))),
|
||||
'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits=(16, int(config['price_accuracy']))),
|
||||
'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits=(16, int(config['price_accuracy']))),
|
||||
'deduction': fields.function(_calculate, method=True, store=True, multi='dc', string='Deduction', digits=(16, int(config['price_accuracy']))),
|
||||
'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, 4)),
|
||||
'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits=(16, 4)),
|
||||
'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits=(16, 4)),
|
||||
'deduction': fields.function(_calculate, method=True, store=True, multi='dc', string='Deduction', digits=(16, 4)),
|
||||
'note': fields.text('Description'),
|
||||
}
|
||||
|
||||
|
@ -366,8 +366,8 @@ class payroll_advice_line(osv.osv):
|
|||
'advice_id':fields.many2one('hr.payroll.advice', 'Bank Advice', required=False),
|
||||
'name':fields.char('Bank Account A/C', size=64, required=True, readonly=False),
|
||||
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
|
||||
'amount': fields.float('Amount', digits=(16, int(config['price_accuracy']))),
|
||||
'bysal': fields.float('By Salary', digits=(16, int(config['price_accuracy']))),
|
||||
'amount': fields.float('Amount', digits=(16, 4)),
|
||||
'bysal': fields.float('By Salary', digits=(16, 4)),
|
||||
'flag':fields.char('D/C', size=8, required=True, readonly=False),
|
||||
}
|
||||
_defaults = {
|
||||
|
@ -434,10 +434,10 @@ class contrib_register(osv.osv):
|
|||
'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account', required=False),
|
||||
'name':fields.char('Name', size=256, required=True, readonly=False),
|
||||
'register_line_ids':fields.one2many('hr.contibution.register.line', 'register_id', 'Register Line', readonly=True),
|
||||
'yearly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, int(config['price_accuracy']))),
|
||||
'yearly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, int(config['price_accuracy']))),
|
||||
'monthly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, int(config['price_accuracy']))),
|
||||
'monthly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, int(config['price_accuracy']))),
|
||||
'yearly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, 4)),
|
||||
'yearly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, 4)),
|
||||
'monthly_total_by_emp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Employee', digits=(16, 4)),
|
||||
'monthly_total_by_comp': fields.function(_total_contrib, method=True, multi='dc', store=True, string='Total By Company', digits=(16, 4)),
|
||||
'note': fields.text('Description'),
|
||||
}
|
||||
_defaults = {
|
||||
|
@ -466,9 +466,9 @@ class contrib_register_line(osv.osv):
|
|||
'code':fields.char('Code', size=64, required=False, readonly=False),
|
||||
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
|
||||
'period_id': fields.many2one('account.period', 'Period'),
|
||||
'emp_deduction': fields.float('Employee Deduction', digits=(16, int(config['price_accuracy']))),
|
||||
'comp_deduction': fields.float('Company Deduction', digits=(16, int(config['price_accuracy']))),
|
||||
'total': fields.function(_total, method=True, store=True, string='Total', digits=(16, int(config['price_accuracy']))),
|
||||
'emp_deduction': fields.float('Employee Deduction', digits=(16, 4)),
|
||||
'comp_deduction': fields.float('Company Deduction', digits=(16, 4)),
|
||||
'total': fields.function(_total, method=True, store=True, string='Total', digits=(16, 4)),
|
||||
}
|
||||
contrib_register_line()
|
||||
|
||||
|
@ -539,7 +539,7 @@ class company_contribution(osv.osv):
|
|||
('fix','Fixed Amount'),
|
||||
('func','Function Calculation'),
|
||||
],'Amount Type', select=True),
|
||||
'contribute_per':fields.float('Contribution', digits=(16, int(config['price_accuracy'])), help='Define Company contribution ratio 1.00=100% contribution, If Employee Contribute 5% then company will and here 0.50 defined then company will contribute 50% on employee 5% contribution'),
|
||||
'contribute_per':fields.float('Contribution', digits=(16, 4), help='Define Company contribution ratio 1.00=100% contribution, If Employee Contribute 5% then company will and here 0.50 defined then company will contribute 50% on employee 5% contribution'),
|
||||
'account_id':fields.property(
|
||||
'account.account',
|
||||
type='many2one',
|
||||
|
@ -596,13 +596,13 @@ class company_contribution_line(osv.osv):
|
|||
'contribution_id':fields.many2one('company.contribution', 'Contribution', required=False),
|
||||
'name':fields.char('Name', size=64, required=False, readonly=False),
|
||||
'umo_id':fields.many2one('product.uom', 'Unite', required=False),
|
||||
'from_val': fields.float('From', digits=(16, int(config['price_accuracy']))),
|
||||
'to_val': fields.float('To', digits=(16, int(config['price_accuracy']))),
|
||||
'from_val': fields.float('From', digits=(16, 4)),
|
||||
'to_val': fields.float('To', digits=(16, 4)),
|
||||
'amount_type':fields.selection([
|
||||
('fix','Fixed Amount'),
|
||||
],'Amount Type', select=True),
|
||||
'sequence':fields.integer('Sequence'),
|
||||
'value': fields.float('Value', digits=(16, int(config['price_accuracy']))),
|
||||
'value': fields.float('Value', digits=(16, 4)),
|
||||
}
|
||||
company_contribution_line()
|
||||
|
||||
|
@ -730,8 +730,8 @@ class hr_payslip(osv.osv):
|
|||
('cancel','Reject'),
|
||||
],'State', select=True, readonly=True),
|
||||
'basic_before_leaves': fields.float('Basic Salary', readonly=True, digits=(16, 2)),
|
||||
'leaves': fields.float('Leaved Deduction', readonly=True, digits=(16, 2)),
|
||||
'basic': fields.float('Basic Salary - Leaves', readonly=True, digits=(16, 2)),
|
||||
'leaves': fields.float('Leave Deductions', readonly=True, digits=(16, 2)),
|
||||
'basic': fields.float('Net Basic', readonly=True, digits=(16, 2)),
|
||||
'grows': fields.function(_calculate, method=True, store=True, multi='dc', string='Gross Salary', type='float', digits=(16, 2)),
|
||||
'net': fields.function(_calculate, method=True, store=True, multi='dc', string='Net Salary', digits=(16, 2)),
|
||||
'allounce': fields.function(_calculate, method=True, store=True, multi='dc', string='Allowance', digits=(16, 2)),
|
||||
|
@ -1213,9 +1213,9 @@ class hr_payslip_line(osv.osv):
|
|||
'amount': fields.float('Amount / Percentage', digits=(16, 4)),
|
||||
'analytic_account_id':fields.many2one('account.analytic.account', 'Analytic Account', required=False),
|
||||
'account_id':fields.many2one('account.account', 'General Account', required=True),
|
||||
'total': fields.float('Sub Total', readonly=True, digits=(16, int(config['price_accuracy']))),
|
||||
'total': fields.float('Sub Total', readonly=True, digits=(16, 4)),
|
||||
#'total': fields.function(_calculate, method=True, type='float', string='Label', store=True),
|
||||
'company_contrib': fields.float('Company Contribution', readonly=True, digits=(16, int(config['price_accuracy']))),
|
||||
'company_contrib': fields.float('Company Contribution', readonly=True, digits=(16, 4)),
|
||||
'expanse_id': fields.many2one('hr.expense.expense', 'Expense'),
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'note':fields.text('Description'),
|
||||
|
@ -1251,13 +1251,13 @@ class hr_payslip_line_line(osv.osv):
|
|||
'slipline_id':fields.many2one('hr.payslip.line', 'Slip Line', required=False),
|
||||
'name':fields.char('Name', size=64, required=False, readonly=False),
|
||||
'umo_id':fields.many2one('product.uom', 'Unite', required=False),
|
||||
'from_val': fields.float('From', digits=(16, int(config['price_accuracy']))),
|
||||
'to_val': fields.float('To', digits=(16, int(config['price_accuracy']))),
|
||||
'from_val': fields.float('From', digits=(16, 4)),
|
||||
'to_val': fields.float('To', digits=(16, 4)),
|
||||
'amount_type':fields.selection([
|
||||
('fix','Fixed Amount'),
|
||||
],'Amount Type', select=True),
|
||||
'sequence':fields.integer('Sequence'),
|
||||
'value': fields.float('Value', digits=(16, int(config['price_accuracy']))),
|
||||
'value': fields.float('Value', digits=(16, 4)),
|
||||
}
|
||||
hr_payslip_line_line()
|
||||
|
||||
|
|
|
@ -505,7 +505,7 @@
|
|||
<button string="Compute Sheet" icon="terp-stock_format-scientific" name="compute_sheet" states="new"/>
|
||||
<button string="Recompute Sheet" icon="terp-stock_format-scientific" name="compute_sheet" type="object" states="draft"/>
|
||||
<button string="Verify Sheet" icon="terp-camera_test" name="verify_sheet" states="draft"/>
|
||||
<button string="Complete HR Checking" icon="terp-camera_test" name="final_verify_sheet" states="hr_check"/>
|
||||
<button string="Validate Sheet" icon="terp-camera_test" name="final_verify_sheet" states="hr_check"/>
|
||||
<button string="Pay Salary" icon="terp-dolar_ok!" name="process_sheet" states="confirm"/>
|
||||
<button string="Cancel" icon="terp-dialog-close" name="cancel_sheet" states="draft,hr_check,confirm"/>
|
||||
<button string="Set to Draft" icon="terp-stock_effects-object-colorize" name="set_to_draft" states="cancel"/>
|
||||
|
|
|
@ -2,5 +2,4 @@
|
|||
"access_hr_analytic_timesheet","hr.analytic.timesheet","model_hr_analytic_timesheet","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_account_analytic_line","account.account.analytic.line","account.model_account_analytic_line","hr.group_hr_user",1,1,1,0
|
||||
"access_account_analytic_journal","account.account.analytic.journal","account.model_account_analytic_journal","hr.group_hr_user",1,0,0,0
|
||||
"access_hr_analytal_timesheet_user","hr.analytical.timesheet.user","model_hr_analytical_timesheet_users","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_timesheet_report","hr.timesheet.report","model_hr_timesheet_report","hr.group_hr_manager",1,0,0,0
|
||||
|
|
|
|
@ -9,4 +9,3 @@
|
|||
"access_report_timesheet_invoice","report_timesheet.invoice","model_report_timesheet_invoice","hr.group_hr_manager",1,0,0,0
|
||||
"access_report_random_timesheet","report_random_timesheet","model_report_random_timesheet","hr.group_hr_manager",1,0,0,0
|
||||
"access_report_random_timesheet_lines","random_timesheet_lines","model_random_timesheet_lines","hr.group_hr_manager",1,0,0,0
|
||||
"access_hr_timesheet_analytic_profit","hr_timesheet_analytic_profit","model_hr_timesheet_analytic_profit","account.group_account_invoice",1,1,1,1
|
||||
|
|
|
|
@ -4,5 +4,4 @@
|
|||
"access_idea_vote","idea.vote","model_idea_vote","base.group_user",1,1,1,1
|
||||
"access_idea_vote_stat","idea.vote.stat","model_idea_vote_stat","base.group_user",1,0,0,0
|
||||
"access_idea_category_system","idea.category system","model_idea_category","base.group_system",1,1,1,1
|
||||
"access_idea_select","idea.select","model_idea_select","base.group_user",1,1,1,1
|
||||
"access_idea_comment","idea.comment","model_idea_comment","base.group_system",1,1,1,1
|
||||
|
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-06 03:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: mrp
|
||||
|
|
|
@ -27,6 +27,7 @@ import ir
|
|||
import netsvc
|
||||
import time
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Work Centers
|
||||
#----------------------------------------------------------
|
||||
|
|
|
@ -885,7 +885,22 @@
|
|||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<record id="view_procurement_form_inherit_property" model="ir.ui.view">
|
||||
<field name="name">procurement.order.form.inherit</field>
|
||||
<field name="model">procurement.order</field>
|
||||
<field name="inherit_id" ref="procurement.procurement_form_view"/>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page/field[@name='close_move']" position="after">
|
||||
<group colspan="4" groups="base.group_extended">
|
||||
<separator colspan="4" string="Properties" />
|
||||
<field colspan="4" name="property_ids" nolabel="1"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<act_window
|
||||
id="action_product_bom_structure"
|
||||
name="Product BoM Structure"
|
||||
|
|
|
@ -31,6 +31,7 @@ class procurement_order(osv.osv):
|
|||
_inherit = 'procurement.order'
|
||||
_columns = {
|
||||
'bom_id': fields.many2one('mrp.bom', 'BoM', ondelete='cascade', select=True),
|
||||
'property_ids': fields.many2many('mrp.property', 'procurement_property_rel', 'procurement_id','property_id', 'Properties'),
|
||||
}
|
||||
|
||||
def check_produce_product(self, cr, uid, procurement, context=[]):
|
||||
|
|
|
@ -28,3 +28,7 @@
|
|||
"access_report_workcenter_load","report.workcenter.load","model_report_workcenter_load","mrp.group_mrp_manager",1,0,0,0
|
||||
"access_report_mrp_inout","report.mrp.inout","model_report_mrp_inout","mrp.group_mrp_manager",1,0,0,0
|
||||
"access_product_product_manager","product.product manager","model_product_product","mrp.group_mrp_manager",1,1,1,1
|
||||
"access_mrp_property_group","mrp.property.group","model_mrp_property_group","stock.group_stock_manager",1,1,1,1
|
||||
"access_mrp_property","mrp.property","model_mrp_property","stock.group_stock_manager",1,1,1,1
|
||||
"access_mrp_property_group","mrp.property.group","model_mrp_property_group","base.group_user",1,0,0,0
|
||||
"access_mrp_property","mrp.property","model_mrp_property","base.group_user",1,0,0,0
|
||||
|
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-03 03:48+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: multi_company
|
||||
|
|
|
@ -25,6 +25,12 @@ from tools.translate import _
|
|||
import netsvc
|
||||
import time
|
||||
|
||||
# Procurement
|
||||
# ------------------------------------------------------------------
|
||||
#
|
||||
# Produce, Buy or Find products and place a move
|
||||
# then wizard for picking lists & move
|
||||
#
|
||||
|
||||
class mrp_property_group(osv.osv):
|
||||
"""
|
||||
|
@ -54,14 +60,6 @@ class mrp_property(osv.osv):
|
|||
'composition': lambda *a: 'min',
|
||||
}
|
||||
mrp_property()
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Procurement
|
||||
# ------------------------------------------------------------------
|
||||
#
|
||||
# Produce, Buy or Find products and place a move
|
||||
# then wizard for picking lists & move
|
||||
#
|
||||
class procurement_order(osv.osv):
|
||||
"""
|
||||
Procurement Orders
|
||||
|
@ -91,9 +89,6 @@ class procurement_order(osv.osv):
|
|||
" a make to order method."),
|
||||
|
||||
'note': fields.text('Note'),
|
||||
|
||||
'property_ids': fields.many2many('mrp.property', 'procurement_property_rel', 'procurement_id','property_id', 'Properties'),
|
||||
|
||||
'message': fields.char('Latest error', size=64, help="Exception occurred while computing procurement orders."),
|
||||
'state': fields.selection([
|
||||
('draft','Draft'),
|
||||
|
@ -477,7 +472,7 @@ class stock_warehouse_orderpoint(osv.osv):
|
|||
help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
|
||||
"a procurement to bring the virtual stock to the Max Quantity."),
|
||||
'product_max_qty': fields.float('Max Quantity', required=True,
|
||||
help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
|
||||
help="When the virtual stock goes belong the Mix Quantity, Open ERP generates "\
|
||||
"a procurement to bring the virtual stock to the Max Quantity."),
|
||||
'qty_multiple': fields.integer('Qty Multiple', required=True,
|
||||
help="The procurement quantity will by rounded up to this multiple."),
|
||||
|
|
|
@ -67,10 +67,6 @@
|
|||
<field name="move_id" groups="base.group_extended"/>
|
||||
<field name="date_close"/>
|
||||
<field name="close_move" groups="base.group_extended"/>
|
||||
<group colspan="4" groups="base.group_extended">
|
||||
<separator colspan="4" string="Properties" />
|
||||
<field colspan="4" name="property_ids" nolabel="1"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Notes">
|
||||
<separator colspan="4" string="Note" />
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_mrp_property_group","mrp.property.group","model_mrp_property_group",stock.group_stock_manager,1,1,1,1
|
||||
"access_mrp_property","mrp.property","model_mrp_property",stock.group_stock_manager,1,1,1,1
|
||||
"access_mrp_property_group","mrp.property.group","model_mrp_property_group",,1,0,0,0
|
||||
"access_mrp_property","mrp.property","model_mrp_property",base.group_user,1,0,0,0
|
||||
"access_procurement","procurement.order","model_procurement_order",base.group_user,1,0,0,0
|
||||
"access_stock_warehouse_orderpoint","stock.warehouse.orderpoint","model_stock_warehouse_orderpoint",stock.group_stock_manager,1,1,1,1
|
||||
"access_procurement","procurement.order","model_procurement_order","base.group_user",1,0,0,0
|
||||
"access_stock_warehouse_orderpoint","stock.warehouse.orderpoint","model_stock_warehouse_orderpoint","stock.group_stock_manager",1,1,1,1
|
||||
|
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-03 03:48+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: product_visible_discount
|
||||
|
|
|
@ -15,7 +15,5 @@
|
|||
"access_sale_order_manager","sale.order.manager","model_sale_order","group_sale_manager",1,1,1,1
|
||||
"access_sale_order_line_manager","sale.order.line.manager","model_sale_order_line","group_sale_manager",1,1,1,1
|
||||
"access_sale_report_manager","sale.report","model_sale_report","group_sale_manager",1,0,0,0
|
||||
"access_sale_open_invoice","sale.open.invoice","model_sale_open_invoice","group_sale_user",1,1,1,0
|
||||
"access_sale_open_invoice_manager","sale.open.invoice","model_sale_open_invoice","group_sale_manager",1,1,1,1
|
||||
"access_product_product_sale_user","product.product.sale.user","model_product_product","group_sale_user",1,0,0,0
|
||||
"access_sale_account_journal","account.journal sale order.user","account.model_account_journal","group_sale_user",1,0,0,0
|
||||
|
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-03 03:48+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: sale_margin
|
||||
|
|
|
@ -32,8 +32,9 @@ class sale_order_line(osv.osv):
|
|||
res = super(sale_order_line, self).product_id_change(cr, uid, ids, pricelist, product, qty=qty,
|
||||
uom=uom, qty_uos=qty_uos, uos=uos, name=name, partner_id=partner_id,
|
||||
lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag)
|
||||
purchase_price = self.pool.get('product.product').browse(cr, uid, product).standard_price
|
||||
res['value'].update({'purchase_price':purchase_price})
|
||||
if product:
|
||||
purchase_price = self.pool.get('product.product').browse(cr, uid, product).standard_price
|
||||
res['value'].update({'purchase_price':purchase_price})
|
||||
return res
|
||||
|
||||
def _product_margin(self, cr, uid, ids, field_name, arg, context=None):
|
||||
|
|
|
@ -25,5 +25,4 @@ import product
|
|||
import report
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -19,7 +19,6 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
"name" : "Inventory Management",
|
||||
"version" : "1.1",
|
||||
|
@ -61,7 +60,6 @@ Thanks to the double entry management, the inventory controlling is powerful and
|
|||
"wizard/stock_traceability_view.xml",
|
||||
"stock_workflow.xml",
|
||||
"stock_incoterms.xml",
|
||||
"stock_wizard.xml",
|
||||
"stock_view.xml",
|
||||
"stock_report.xml",
|
||||
"stock_sequence.xml",
|
||||
|
|
|
@ -45,5 +45,6 @@
|
|||
|
||||
<menuitem icon="terp-graph" id="menu_dashboard_stock" name="Dashboard" sequence="0" parent="stock.next_id_61"/>
|
||||
<menuitem action="open_board_warehouse" icon="terp-graph" id="menu_board_warehouse" parent="menu_dashboard_stock" sequence="1"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
|
@ -15,7 +15,7 @@
|
|||
# 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/>.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
@ -23,29 +23,27 @@ from osv import fields, osv
|
|||
import ir
|
||||
|
||||
class res_partner(osv.osv):
|
||||
_name = 'res.partner'
|
||||
_inherit = 'res.partner'
|
||||
_columns = {
|
||||
'property_stock_customer': fields.property(
|
||||
'stock.location',
|
||||
type='many2one',
|
||||
relation='stock.location',
|
||||
string="Customer Location",
|
||||
type='many2one',
|
||||
relation='stock.location',
|
||||
string="Customer Location",
|
||||
method=True,
|
||||
view_load=True,
|
||||
help="This stock location will be used, instead of the default one, as the destination location for goods you send to this partner"),
|
||||
|
||||
'property_stock_supplier': fields.property(
|
||||
'stock.location',
|
||||
type='many2one',
|
||||
relation='stock.location',
|
||||
string="Supplier Location",
|
||||
type='many2one',
|
||||
relation='stock.location',
|
||||
string="Supplier Location",
|
||||
method=True,
|
||||
view_load=True,
|
||||
help="This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"),
|
||||
}
|
||||
|
||||
res_partner()
|
||||
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -22,4 +22,4 @@
|
|||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
|
@ -22,45 +22,46 @@
|
|||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit = "product.product"
|
||||
|
||||
def get_product_accounts(self, cr, uid, product_id, context=None):
|
||||
""" To get the stock input account, stock output account and stock journal related to product.
|
||||
@param product_id: product id
|
||||
@param product_id: product id
|
||||
@return: dictionary which contains information regarding stock input account, stock output account and stock journal
|
||||
"""
|
||||
product_obj = self.pool.get('product.product').browse(cr, uid, product_id, context)
|
||||
|
||||
stock_input_acc = product_obj.property_stock_account_input and product_obj.property_stock_account_input.id or False
|
||||
if context is None:
|
||||
context = {}
|
||||
product_obj = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
||||
|
||||
stock_input_acc = product_obj.property_stock_account_input and product_obj.property_stock_account_input.id or False
|
||||
if not stock_input_acc:
|
||||
stock_input_acc = product_obj.categ_id.property_stock_account_input_categ and product_obj.categ_id.property_stock_account_input_categ.id or False
|
||||
|
||||
|
||||
stock_output_acc = product_obj.property_stock_account_output and product_obj.property_stock_account_output.id or False
|
||||
if not stock_output_acc:
|
||||
stock_output_acc = product_obj.categ_id.property_stock_account_output_categ and product_obj.categ_id.property_stock_account_output_categ.id or False
|
||||
|
||||
journal_id = product_obj.categ_id.property_stock_journal and product_obj.categ_id.property_stock_journal.id or False
|
||||
account_variation = product_obj.categ_id.property_stock_variation and product_obj.categ_id.property_stock_variation.id or False
|
||||
|
||||
|
||||
return {
|
||||
'stock_account_input': stock_input_acc,
|
||||
'stock_account_output': stock_output_acc,
|
||||
'stock_journal': journal_id,
|
||||
'stock_account_input': stock_input_acc,
|
||||
'stock_account_output': stock_output_acc,
|
||||
'stock_journal': journal_id,
|
||||
'property_stock_variation': account_variation
|
||||
}
|
||||
}
|
||||
|
||||
def do_change_standard_price(self, cr, uid, ids, datas, context={}):
|
||||
""" Changes the Standard Price of Product and creates an account move accordingly.
|
||||
@param datas : dict. contain default datas like new_price, stock_output_account, stock_input_account, stock_journal
|
||||
@param context: A standard dictionary
|
||||
@return:
|
||||
|
||||
"""
|
||||
@param context: A standard dictionary
|
||||
@return:
|
||||
|
||||
"""
|
||||
location_obj = self.pool.get('stock.location')
|
||||
move_obj = self.pool.get('account.move')
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
|
||||
new_price = datas.get('new_price', 0.0)
|
||||
stock_output_acc = datas.get('stock_output_account', False)
|
||||
|
@ -71,7 +72,7 @@ class product_product(osv.osv):
|
|||
account_variation = product_obj.categ_id.property_stock_variation
|
||||
account_variation_id = account_variation and account_variation.id or False
|
||||
if not account_variation_id: raise osv.except_osv(_('Error!'), _('Variation Account is not specified for Product Category: %s' % (product_obj.categ_id.name)))
|
||||
move_ids = []
|
||||
move_ids = []
|
||||
loc_ids = location_obj.search(cr, uid,[('usage','=','internal')])
|
||||
for rec_id in ids:
|
||||
for location in location_obj.browse(cr, uid, loc_ids):
|
||||
|
@ -79,14 +80,14 @@ class product_product(osv.osv):
|
|||
c.update({
|
||||
'location': location.id,
|
||||
'compute_child': False
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
product = self.browse(cr, uid, rec_id, context=c)
|
||||
qty = product.qty_available
|
||||
diff = product.standard_price - new_price
|
||||
diff = product.standard_price - new_price
|
||||
if not diff: raise osv.except_osv(_('Error!'), _("Could not find any difference between standard price and new price!"))
|
||||
if qty:
|
||||
company_id = location.company_id and location.company_id.id or False
|
||||
company_id = location.company_id and location.company_id.id or False
|
||||
if not company_id: raise osv.except_osv(_('Error!'), _('Company is not specified in Location'))
|
||||
#
|
||||
# Accounting Entries
|
||||
|
@ -100,10 +101,10 @@ class product_product(osv.osv):
|
|||
(product.categ_id.name,
|
||||
product.categ_id.id,))
|
||||
move_id = move_obj.create(cr, uid, {
|
||||
'journal_id': journal_id,
|
||||
'journal_id': journal_id,
|
||||
'company_id': company_id
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
move_ids.append(move_id)
|
||||
|
||||
|
||||
|
@ -120,7 +121,7 @@ class product_product(osv.osv):
|
|||
'for this product: "%s" (id: %d)') % \
|
||||
(product.name,
|
||||
product.id,))
|
||||
amount_diff = qty * diff
|
||||
amount_diff = qty * diff
|
||||
move_line_obj.create(cr, uid, {
|
||||
'name': product.name,
|
||||
'account_id': stock_input_acc,
|
||||
|
@ -133,7 +134,7 @@ class product_product(osv.osv):
|
|||
'credit': amount_diff,
|
||||
'move_id': move_id
|
||||
})
|
||||
elif diff < 0:
|
||||
elif diff < 0:
|
||||
if not stock_output_acc:
|
||||
stock_output_acc = product.product_tmpl_id.\
|
||||
property_stock_account_output.id
|
||||
|
@ -158,17 +159,19 @@ class product_product(osv.osv):
|
|||
'account_id': account_variation_id,
|
||||
'debit': amount_diff,
|
||||
'move_id': move_id
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
self.write(cr, uid, rec_id, {'standard_price': new_price})
|
||||
|
||||
return move_ids
|
||||
|
||||
def view_header_get(self, cr, user, view_id, view_type, context):
|
||||
def view_header_get(self, cr, user, view_id, view_type, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(product_product, self).view_header_get(cr, user, view_id, view_type, context)
|
||||
if res: return res
|
||||
if (context.get('location', False)):
|
||||
return _('Products: ')+self.pool.get('stock.location').browse(cr, user, context['location'], context).name
|
||||
if (context.get('active_id', False)) and (context.get('active_model') == 'stock.location'):
|
||||
return _('Products: ')+self.pool.get('stock.location').browse(cr, user, context['active_id'], context).name
|
||||
return res
|
||||
|
||||
def get_product_available(self, cr, uid, ids, context=None):
|
||||
|
@ -280,12 +283,14 @@ class product_product(osv.osv):
|
|||
res[prod_id] -= amount
|
||||
return res
|
||||
|
||||
def _product_available(self, cr, uid, ids, field_names=None, arg=False, context={}):
|
||||
def _product_available(self, cr, uid, ids, field_names=None, arg=False, context=None):
|
||||
""" Finds the incoming and outgoing quantity of product.
|
||||
@return: Dictionary of values
|
||||
"""
|
||||
if not field_names:
|
||||
field_names = []
|
||||
if context is None:
|
||||
context = {}
|
||||
res = {}
|
||||
for id in ids:
|
||||
res[id] = {}.fromkeys(field_names, 0.0)
|
||||
|
@ -323,7 +328,7 @@ class product_product(osv.osv):
|
|||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||
res = super(product_product,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
|
||||
if context == None:
|
||||
if context is None:
|
||||
context = {}
|
||||
if ('location' in context) and context['location']:
|
||||
location_info = self.pool.get('stock.location').browse(cr, uid, context['location'])
|
||||
|
@ -348,7 +353,7 @@ class product_product(osv.osv):
|
|||
if location_info.usage == 'inventory':
|
||||
if fields.get('virtual_available'):
|
||||
res['fields']['virtual_available']['string'] = _('Future P&L')
|
||||
if fields.get('qty_available'):
|
||||
if fields.get('qty_available'):
|
||||
res['fields']['qty_available']['string'] = _('P&L Qty')
|
||||
|
||||
if location_info.usage == 'procurement':
|
||||
|
@ -362,10 +367,9 @@ class product_product(osv.osv):
|
|||
res['fields']['virtual_available']['string'] = _('Future Productions')
|
||||
if fields.get('qty_available'):
|
||||
res['fields']['qty_available']['string'] = _('Produced Qty')
|
||||
|
||||
return res
|
||||
product_product()
|
||||
|
||||
product_product()
|
||||
|
||||
class product_template(osv.osv):
|
||||
_name = 'product.template'
|
||||
|
@ -407,10 +411,11 @@ class product_template(osv.osv):
|
|||
string='Stock Output Account', method=True, view_load=True,
|
||||
help='This account will be used, instead of the default one, to value output stock'),
|
||||
}
|
||||
|
||||
product_template()
|
||||
|
||||
|
||||
class product_category(osv.osv):
|
||||
|
||||
_inherit = 'product.category'
|
||||
_columns = {
|
||||
'property_stock_journal': fields.property('account.journal',
|
||||
|
@ -425,14 +430,14 @@ class product_category(osv.osv):
|
|||
type='many2one', relation='account.account',
|
||||
string='Stock Output Account', method=True, view_load=True,
|
||||
help='This account will be used to value the output stock'),
|
||||
'property_stock_variation': fields.property('account.account',
|
||||
'property_stock_variation': fields.property('account.account',
|
||||
type='many2one',
|
||||
relation='account.account',
|
||||
string="Stock Variation Account",
|
||||
method=True, view_load=True,
|
||||
method=True, view_load=True,
|
||||
help="This account will be used in product when valuation type is real-time valuation ",),
|
||||
}
|
||||
|
||||
product_category()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -32,6 +32,6 @@
|
|||
<field eval="False" name="value"/>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
|
@ -208,7 +208,7 @@
|
|||
<para style="terp_default_Centre_8">[[ formatLang(picking.min_date,date_time = True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ picking.weight or '']] </para>
|
||||
<para style="terp_default_Centre_8">[[ 'weight' in picking._columns.keys() and picking.weight or '']] </para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
|
|
@ -72,6 +72,7 @@ class report_stock_picking(osv.osv):
|
|||
sp.address_id as partner_id,
|
||||
to_date(to_char(sp.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
|
||||
count(sm.id) as nbr,
|
||||
count(sp.id) as nbp,
|
||||
sum(sm.product_qty*u.factor) as product_qty,
|
||||
sum(sm.product_uos_qty) as product_uos_qty,
|
||||
sm.product_id as product_id,
|
||||
|
|
|
@ -20,6 +20,6 @@
|
|||
"access_stock_report_tracklots","stock.report.tracklots","model_stock_report_tracklots","stock.group_stock_user",1,1,1,1
|
||||
"access_report_products_to_received_planned","report.products.to.received.planned","model_report_products_to_received_planned","stock.group_stock_user",1,1,1,1
|
||||
"access_report_delivery_products_planned","report.delivery.products.planned","model_report_delivery_products_planned","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_inventory_line_split","stock.inventory.line.split","model_stock_inventory_line_split","stock.group_stock_user",1,1,1,1
|
||||
"access_report_stock_move","report.stock.move","model_report_stock_move","stock.group_stock_user",1,1,1,1
|
||||
"access_report_stock_inventory","report.stock.inventory","model_report_stock_inventory","stock.group_stock_user",1,1,1,1
|
||||
"access_report_stock_picking","report.stock.picking","model_report_stock_picking","stock.group_stock_user",1,1,1,1
|
||||
|
|
|
|
@ -37,12 +37,12 @@ class stock_incoterms(osv.osv):
|
|||
_name = "stock.incoterms"
|
||||
_description = "Incoterms"
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=64, required=True,help="Incoterms are series of sales terms.They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices."),
|
||||
'code': fields.char('Code', size=3, required=True,help="Code for Incoterms"),
|
||||
'name': fields.char('Name', size=64, required=True, help="Incoterms are series of sales terms.They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices."),
|
||||
'code': fields.char('Code', size=3, required=True, help="Code for Incoterms"),
|
||||
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the incoterms without removing it."),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: True,
|
||||
'active': True,
|
||||
}
|
||||
|
||||
stock_incoterms()
|
||||
|
@ -52,11 +52,12 @@ class stock_journal(osv.osv):
|
|||
_description = "Stock Journal"
|
||||
_columns = {
|
||||
'name': fields.char('Stock Journal', size=32, required=True),
|
||||
'user_id': fields.many2one('res.users','Responsible'),
|
||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||
}
|
||||
_defaults = {
|
||||
'user_id': lambda s,c,u,ctx: u
|
||||
'user_id': lambda s, c, u, ctx: u
|
||||
}
|
||||
|
||||
stock_journal()
|
||||
|
||||
#----------------------------------------------------------
|
||||
|
@ -70,22 +71,24 @@ class stock_location(osv.osv):
|
|||
_parent_order = 'id'
|
||||
_order = 'parent_left'
|
||||
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
res = []
|
||||
if context is None:
|
||||
context = {}
|
||||
if not len(ids):
|
||||
return []
|
||||
reads = self.read(cr, uid, ids, ['name','location_id'], context)
|
||||
res = []
|
||||
reads = self.read(cr, uid, ids, ['name','location_id'], context=context)
|
||||
for record in reads:
|
||||
name = record['name']
|
||||
if context.get('full',False):
|
||||
if record['location_id']:
|
||||
name = record['location_id'][1]+' / '+name
|
||||
name = record['location_id'][1] + ' / ' + name
|
||||
res.append((record['id'], name))
|
||||
else:
|
||||
res.append((record['id'], name))
|
||||
return res
|
||||
|
||||
def _complete_name(self, cr, uid, ids, name, args, context):
|
||||
def _complete_name(self, cr, uid, ids, name, args, context=None):
|
||||
""" Forms complete name of location from parent location to child location.
|
||||
@return: Dictionary of values
|
||||
"""
|
||||
|
@ -100,7 +103,7 @@ class stock_location(osv.osv):
|
|||
res[m.id] = _get_one_full_name(m)
|
||||
return res
|
||||
|
||||
def _product_qty_available(self, cr, uid, ids, field_names, arg, context={}):
|
||||
def _product_qty_available(self, cr, uid, ids, field_names, arg, context=None):
|
||||
""" Finds real and virtual quantity for product available at particular location.
|
||||
@return: Dictionary of values
|
||||
"""
|
||||
|
@ -119,7 +122,7 @@ class stock_location(osv.osv):
|
|||
res[loc]['stock_virtual'] = prod.virtual_available
|
||||
return res
|
||||
|
||||
def product_detail(self, cr, uid, id, field, context={}):
|
||||
def product_detail(self, cr, uid, id, field, context=None):
|
||||
""" Finds detail of product like price type, currency and then calculates its price.
|
||||
@param field: Field name
|
||||
@return: Calculated price
|
||||
|
@ -128,6 +131,8 @@ class stock_location(osv.osv):
|
|||
res[id] = {}
|
||||
final_value = 0.0
|
||||
field_to_read = 'virtual_available'
|
||||
if context is None:
|
||||
context = {}
|
||||
if field == 'stock_real_value':
|
||||
field_to_read = 'qty_available'
|
||||
cr.execute('select distinct product_id from stock_move where (location_id=%s) or (location_dest_id=%s)', (id, id))
|
||||
|
@ -136,20 +141,18 @@ class stock_location(osv.osv):
|
|||
# Choose the right filed standard_price to read
|
||||
# Take the user company
|
||||
price_type_id = self.pool.get('res.users').browse(cr,uid,uid).company_id.property_valuation_price_type.id
|
||||
pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id)
|
||||
pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id, context=context)
|
||||
for r in result:
|
||||
c = (context or {}).copy()
|
||||
c['location'] = id
|
||||
product = self.pool.get('product.product').read(cr, uid, r['product_id'], [field_to_read], context=c)
|
||||
# Compute the amount_unit in right currency
|
||||
|
||||
context['currency_id'] = self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id
|
||||
amount_unit = self.pool.get('product.product').browse(cr,uid,r['product_id']).price_get(pricetype.field, context)[r['product_id']]
|
||||
|
||||
final_value += (product[field_to_read] * amount_unit)
|
||||
return final_value
|
||||
|
||||
def _product_value(self, cr, uid, ids, field_names, arg, context={}):
|
||||
def _product_value(self, cr, uid, ids, field_names, arg, context=None):
|
||||
""" Calculates real and virtual stock value of a product.
|
||||
@param field_names: Name of field
|
||||
@return: Dictionary of values
|
||||
|
@ -209,20 +212,20 @@ class stock_location(osv.osv):
|
|||
'scrap_location': fields.boolean('Scrap Location', help='Check this box if the current location is a place for destroyed items'),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
'usage': lambda *a: 'internal',
|
||||
'allocation_method': lambda *a: 'fifo',
|
||||
'chained_location_type': lambda *a: 'none',
|
||||
'chained_auto_packing': lambda *a: 'manual',
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.location', context=c),
|
||||
'posx': lambda *a: 0,
|
||||
'posy': lambda *a: 0,
|
||||
'posz': lambda *a: 0,
|
||||
'icon': lambda *a: False,
|
||||
'scrap_location': lambda *a: False,
|
||||
'active': True,
|
||||
'usage': 'internal',
|
||||
'allocation_method': 'fifo',
|
||||
'chained_location_type': 'none',
|
||||
'chained_auto_packing': 'manual',
|
||||
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.location', context=c),
|
||||
'posx': 0,
|
||||
'posy': 0,
|
||||
'posz': 0,
|
||||
'icon': False,
|
||||
'scrap_location': False,
|
||||
}
|
||||
|
||||
def chained_location_get(self, cr, uid, location, partner=None, product=None, context={}):
|
||||
def chained_location_get(self, cr, uid, location, partner=None, product=None, context=None):
|
||||
""" Finds chained location
|
||||
@param location: Location id
|
||||
@param partner: Partner id
|
||||
|
@ -239,7 +242,7 @@ class stock_location(osv.osv):
|
|||
return result, location.chained_auto_packing, location.chained_delay, location.chained_journal_id and location.chained_journal_id.id or False, location.chained_company_id and location.chained_company_id.id or False, location.chained_picking_type
|
||||
return result
|
||||
|
||||
def picking_type_get(self, cr, uid, from_location, to_location, context={}):
|
||||
def picking_type_get(self, cr, uid, from_location, to_location, context=None):
|
||||
""" Gets type of picking.
|
||||
@param from_location: Source location
|
||||
@param to_location: Destination location
|
||||
|
@ -248,14 +251,12 @@ class stock_location(osv.osv):
|
|||
result = 'internal'
|
||||
if (from_location.usage=='internal') and (to_location and to_location.usage in ('customer', 'supplier')):
|
||||
result = 'delivery'
|
||||
elif (from_location.usage in ('supplier', 'customer')) and (to_location.usage=='internal'):
|
||||
elif (from_location.usage in ('supplier', 'customer')) and (to_location.usage == 'internal'):
|
||||
result = 'in'
|
||||
return result
|
||||
|
||||
def _product_get_all_report(self, cr, uid, ids, product_ids=False,
|
||||
context=None):
|
||||
return self._product_get_report(cr, uid, ids, product_ids, context,
|
||||
recursive=True)
|
||||
def _product_get_all_report(self, cr, uid, ids, product_ids=False, context=None):
|
||||
return self._product_get_report(cr, uid, ids, product_ids, context, recursive=True)
|
||||
|
||||
def _product_get_report(self, cr, uid, ids, product_ids=False,
|
||||
context=None, recursive=False):
|
||||
|
@ -323,7 +324,7 @@ class stock_location(osv.osv):
|
|||
result['total_price'] = total_price
|
||||
return result
|
||||
|
||||
def _product_get_multi_location(self, cr, uid, ids, product_ids=False, context={},
|
||||
def _product_get_multi_location(self, cr, uid, ids, product_ids=False, context=None,
|
||||
states=['done'], what=('in', 'out')):
|
||||
"""
|
||||
@param product_ids: Ids of product
|
||||
|
@ -332,6 +333,8 @@ class stock_location(osv.osv):
|
|||
@return:
|
||||
"""
|
||||
product_obj = self.pool.get('product.product')
|
||||
if context is None:
|
||||
context = {}
|
||||
context.update({
|
||||
'states': states,
|
||||
'what': what,
|
||||
|
@ -339,22 +342,22 @@ class stock_location(osv.osv):
|
|||
})
|
||||
return product_obj.get_product_available(cr, uid, product_ids, context=context)
|
||||
|
||||
def _product_get(self, cr, uid, id, product_ids=False, context={}, states=['done']):
|
||||
def _product_get(self, cr, uid, id, product_ids=False, context=None, states=['done']):
|
||||
"""
|
||||
@param product_ids:
|
||||
@param states:
|
||||
@return:
|
||||
"""
|
||||
ids = id and [id] or []
|
||||
return self._product_get_multi_location(cr, uid, ids, product_ids, context, states)
|
||||
return self._product_get_multi_location(cr, uid, ids, product_ids, context=context, states=states)
|
||||
|
||||
def _product_all_get(self, cr, uid, id, product_ids=False, context={}, states=['done']):
|
||||
def _product_all_get(self, cr, uid, id, product_ids=False, context=None, states=['done']):
|
||||
# build the list of ids of children of the location given by id
|
||||
ids = id and [id] or []
|
||||
location_ids = self.search(cr, uid, [('location_id', 'child_of', ids)])
|
||||
return self._product_get_multi_location(cr, uid, location_ids, product_ids, context, states)
|
||||
|
||||
def _product_virtual_get(self, cr, uid, id, product_ids=False, context={}, states=['done']):
|
||||
def _product_virtual_get(self, cr, uid, id, product_ids=False, context=None, states=['done']):
|
||||
return self._product_all_get(cr, uid, id, product_ids, context, ['confirmed', 'waiting', 'assigned', 'done'])
|
||||
|
||||
#
|
||||
|
@ -364,7 +367,7 @@ class stock_location(osv.osv):
|
|||
# Returns:
|
||||
# [ (tracking_id, product_qty, location_id) ]
|
||||
#
|
||||
def _product_reserve(self, cr, uid, ids, product_id, product_qty, context={}):
|
||||
def _product_reserve(self, cr, uid, ids, product_id, product_qty, context=None):
|
||||
"""
|
||||
@param product_id: Id of product
|
||||
@param product_qty: Quantity of product
|
||||
|
@ -372,6 +375,8 @@ class stock_location(osv.osv):
|
|||
"""
|
||||
result = []
|
||||
amount = 0.0
|
||||
if context is None:
|
||||
context = {}
|
||||
for id in self.search(cr, uid, [('location_id', 'child_of', ids)]):
|
||||
cr.execute("select product_uom,sum(product_qty) as product_qty from stock_move where location_dest_id=%s and location_id<>%s and product_id=%s and state='done' group by product_uom", (id, id, product_id))
|
||||
results = cr.dictfetchall()
|
||||
|
@ -416,7 +421,7 @@ class stock_tracking(osv.osv):
|
|||
return (10 - (sum % 10)) % 10
|
||||
checksum = staticmethod(checksum)
|
||||
|
||||
def make_sscc(self, cr, uid, context={}):
|
||||
def make_sscc(self, cr, uid, context=None):
|
||||
sequence = self.pool.get('ir.sequence').get(cr, uid, 'stock.lot.tracking')
|
||||
return sequence + str(self.checksum(sequence))
|
||||
|
||||
|
@ -428,9 +433,9 @@ class stock_tracking(osv.osv):
|
|||
'date': fields.datetime('Created Date', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
'active': 1,
|
||||
'name': make_sscc,
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
}
|
||||
|
||||
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
|
||||
|
@ -442,7 +447,7 @@ class stock_tracking(osv.osv):
|
|||
ids += self.search(cr, user, [('name', operator, name)]+ args, limit=limit, context=context)
|
||||
return self.name_get(cr, user, ids, context)
|
||||
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
if not len(ids):
|
||||
return []
|
||||
res = [(r['id'], r['name']+' ['+(r['serial'] or '')+']') for r in self.read(cr, uid, ids, ['name', 'serial'], context)]
|
||||
|
@ -453,7 +458,6 @@ class stock_tracking(osv.osv):
|
|||
|
||||
stock_tracking()
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Stock Picking
|
||||
#----------------------------------------------------------
|
||||
|
@ -461,7 +465,7 @@ class stock_picking(osv.osv):
|
|||
_name = "stock.picking"
|
||||
_description = "Picking List"
|
||||
|
||||
def _set_maximum_date(self, cr, uid, ids, name, value, arg, context):
|
||||
def _set_maximum_date(self, cr, uid, ids, name, value, arg, context=None):
|
||||
""" Calculates planned date if it is greater than 'value'.
|
||||
@param name: Name of field
|
||||
@param value: Value of field
|
||||
|
@ -483,7 +487,7 @@ class stock_picking(osv.osv):
|
|||
cr.execute(sql_str)
|
||||
return True
|
||||
|
||||
def _set_minimum_date(self, cr, uid, ids, name, value, arg, context):
|
||||
def _set_minimum_date(self, cr, uid, ids, name, value, arg, context=None):
|
||||
""" Calculates planned date if it is less than 'value'.
|
||||
@param name: Name of field
|
||||
@param value: Value of field
|
||||
|
@ -494,7 +498,7 @@ class stock_picking(osv.osv):
|
|||
return False
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
for pick in self.browse(cr, uid, ids, context):
|
||||
for pick in self.browse(cr, uid, ids, context=context):
|
||||
sql_str = """update stock_move set
|
||||
date_planned='%s'
|
||||
where
|
||||
|
@ -504,7 +508,7 @@ class stock_picking(osv.osv):
|
|||
cr.execute(sql_str)
|
||||
return True
|
||||
|
||||
def get_min_max_date(self, cr, uid, ids, field_name, arg, context={}):
|
||||
def get_min_max_date(self, cr, uid, ids, field_name, arg, context=None):
|
||||
""" Finds minimum and maximum dates for picking.
|
||||
@return: Dictionary of values
|
||||
"""
|
||||
|
@ -587,16 +591,16 @@ class stock_picking(osv.osv):
|
|||
}
|
||||
_defaults = {
|
||||
'name': lambda self, cr, uid, context: '/',
|
||||
'active': lambda *a: 1,
|
||||
'state': lambda *a: 'draft',
|
||||
'move_type': lambda *a: 'direct',
|
||||
'type': lambda *a: 'in',
|
||||
'invoice_state': lambda *a: 'none',
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.picking', context=c)
|
||||
'active': 1,
|
||||
'state': 'draft',
|
||||
'move_type': 'direct',
|
||||
'type': 'in',
|
||||
'invoice_state': 'none',
|
||||
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.picking', context=c)
|
||||
}
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context={}):
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default = default.copy()
|
||||
|
@ -604,16 +608,15 @@ class stock_picking(osv.osv):
|
|||
if ('name' not in default) or (picking_obj.name=='/'):
|
||||
seq_obj_name = 'stock.picking.' + picking_obj.type
|
||||
default['name'] = self.pool.get('ir.sequence').get(cr, uid, seq_obj_name)
|
||||
|
||||
return super(stock_picking, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def onchange_partner_in(self, cr, uid, context, partner_id=None):
|
||||
def onchange_partner_in(self, cr, uid, context=None, partner_id=None):
|
||||
return {}
|
||||
|
||||
def action_explode(self, cr, uid, moves, context={}):
|
||||
def action_explode(self, cr, uid, moves, context=None):
|
||||
return moves
|
||||
|
||||
def action_confirm(self, cr, uid, ids, context={}):
|
||||
def action_confirm(self, cr, uid, ids, context=None):
|
||||
""" Confirms picking.
|
||||
@return: True
|
||||
"""
|
||||
|
@ -625,7 +628,7 @@ class stock_picking(osv.osv):
|
|||
todo.append(r.id)
|
||||
todo = self.action_explode(cr, uid, todo, context)
|
||||
if len(todo):
|
||||
self.pool.get('stock.move').action_confirm(cr, uid, todo, context)
|
||||
self.pool.get('stock.move').action_confirm(cr, uid, todo, context=context)
|
||||
return True
|
||||
|
||||
def test_auto_picking(self, cr, uid, ids):
|
||||
|
@ -747,7 +750,7 @@ class stock_picking(osv.osv):
|
|||
ok = ok and (move.state in ('cancel', 'done', 'assigned'))
|
||||
return ok
|
||||
|
||||
def action_cancel(self, cr, uid, ids, context={}):
|
||||
def action_cancel(self, cr, uid, ids, context=None):
|
||||
""" Changes picking state to cancel.
|
||||
@return: True
|
||||
"""
|
||||
|
@ -769,7 +772,7 @@ class stock_picking(osv.osv):
|
|||
self.write(cr, uid, ids, {'state': 'done', 'date_done': time.strftime('%Y-%m-%d %H:%M:%S')})
|
||||
return True
|
||||
|
||||
def action_move(self, cr, uid, ids, context={}):
|
||||
def action_move(self, cr, uid, ids, context=None):
|
||||
""" Changes move state to assigned.
|
||||
@return: True
|
||||
"""
|
||||
|
@ -778,7 +781,6 @@ class stock_picking(osv.osv):
|
|||
for move in pick.move_lines:
|
||||
if move.state == 'assigned':
|
||||
todo.append(move.id)
|
||||
|
||||
if len(todo):
|
||||
self.pool.get('stock.move').action_done(cr, uid, todo,
|
||||
context=context)
|
||||
|
@ -1005,7 +1007,10 @@ class stock_picking(osv.osv):
|
|||
}, context=context)
|
||||
return res
|
||||
|
||||
def test_done(self, cr, uid, ids, context={}):
|
||||
def test_done(self, cr, uid, ids, context=None):
|
||||
""" Test whether the move lines are done or not.
|
||||
@return: True or False
|
||||
"""
|
||||
ok = False
|
||||
for pick in self.browse(cr, uid, ids, context=context):
|
||||
if not pick.move_lines:
|
||||
|
@ -1017,7 +1022,7 @@ class stock_picking(osv.osv):
|
|||
ok = True
|
||||
return ok
|
||||
|
||||
def test_cancel(self, cr, uid, ids, context={}):
|
||||
def test_cancel(self, cr, uid, ids, context=None):
|
||||
""" Test whether the move lines are canceled or not.
|
||||
@return: True or False
|
||||
"""
|
||||
|
@ -1033,7 +1038,6 @@ class stock_picking(osv.osv):
|
|||
move_obj = self.pool.get('stock.move')
|
||||
if not context:
|
||||
context = {}
|
||||
|
||||
for pick in self.browse(cr, uid, ids, context=context):
|
||||
if pick.state in ['done','cancel']:
|
||||
raise osv.except_osv(_('Error'), _('You cannot remove the picking which is in %s state !')%(pick.state,))
|
||||
|
@ -1049,7 +1053,7 @@ class stock_picking(osv.osv):
|
|||
|
||||
return super(stock_picking, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
def do_partial(self, cr, uid, ids, partial_datas, context={}):
|
||||
def do_partial(self, cr, uid, ids, partial_datas, context=None):
|
||||
""" Makes partial picking and moves done.
|
||||
@param partial_datas : Dictionary containing details of partial picking
|
||||
like partner_id, address_id, delivery_date,
|
||||
|
@ -1057,7 +1061,6 @@ class stock_picking(osv.osv):
|
|||
@return: Dictionary of values
|
||||
"""
|
||||
res = {}
|
||||
|
||||
move_obj = self.pool.get('stock.move')
|
||||
product_obj = self.pool.get('product.product')
|
||||
currency_obj = self.pool.get('res.currency')
|
||||
|
@ -1072,7 +1075,6 @@ class stock_picking(osv.osv):
|
|||
for pick in self.browse(cr, uid, ids, context=context):
|
||||
new_picking = None
|
||||
new_moves = []
|
||||
|
||||
complete, too_many, too_few = [], [], []
|
||||
move_product_qty = {}
|
||||
for move in pick.move_lines:
|
||||
|
@ -1185,13 +1187,14 @@ class stock_picking(osv.osv):
|
|||
|
||||
delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context)
|
||||
res[pick.id] = {'delivered_picking': delivered_pack.id or False}
|
||||
|
||||
return res
|
||||
|
||||
stock_picking()
|
||||
|
||||
|
||||
class stock_production_lot(osv.osv):
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
if not ids:
|
||||
return []
|
||||
reads = self.read(cr, uid, ids, ['name', 'prefix', 'ref'], context)
|
||||
|
@ -1209,7 +1212,7 @@ class stock_production_lot(osv.osv):
|
|||
_name = 'stock.production.lot'
|
||||
_description = 'Production lot'
|
||||
|
||||
def _get_stock(self, cr, uid, ids, field_name, arg, context={}):
|
||||
def _get_stock(self, cr, uid, ids, field_name, arg, context=None):
|
||||
""" Gets stock of products for locations
|
||||
@return: Dictionary of values
|
||||
"""
|
||||
|
@ -1231,9 +1234,10 @@ class stock_production_lot(osv.osv):
|
|||
where
|
||||
location_id IN %s and prodlot_id IN %s group by prodlot_id''',(tuple(locations),tuple(ids),))
|
||||
res.update(dict(cr.fetchall()))
|
||||
|
||||
return res
|
||||
|
||||
def _stock_search(self, cr, uid, obj, name, args, context):
|
||||
def _stock_search(self, cr, uid, obj, name, args, context=None):
|
||||
""" Searches Ids of products
|
||||
@return: Ids of locations
|
||||
"""
|
||||
|
@ -1261,7 +1265,7 @@ class stock_production_lot(osv.osv):
|
|||
'company_id': fields.many2one('res.company','Company',select=1),
|
||||
}
|
||||
_defaults = {
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'name': lambda x, y, z, c: x.pool.get('ir.sequence').get(y, z, 'stock.lot.serial'),
|
||||
'product_id': lambda x, y, z, c: c.get('product_id', False),
|
||||
}
|
||||
|
@ -1287,7 +1291,7 @@ class stock_production_lot_revision(osv.osv):
|
|||
|
||||
_defaults = {
|
||||
'author_id': lambda x, y, z, c: z,
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d'),
|
||||
'date': time.strftime('%Y-%m-%d'),
|
||||
}
|
||||
|
||||
stock_production_lot_revision()
|
||||
|
@ -1302,7 +1306,7 @@ stock_production_lot_revision()
|
|||
#
|
||||
class stock_move(osv.osv):
|
||||
|
||||
def _getSSCC(self, cr, uid, context={}):
|
||||
def _getSSCC(self, cr, uid, context=None):
|
||||
cr.execute('select id from stock_tracking where create_uid=%s order by id desc limit 1', (uid,))
|
||||
res = cr.fetchone()
|
||||
return (res and res[0]) or False
|
||||
|
@ -1311,7 +1315,7 @@ class stock_move(osv.osv):
|
|||
_order = 'date_expected desc, id'
|
||||
_log_create = False
|
||||
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
res = []
|
||||
for line in self.browse(cr, uid, ids, context):
|
||||
res.append((line.id, (line.product_id.code or '/')+': '+line.location_id.name+' > '+line.location_dest_id.name))
|
||||
|
@ -1391,7 +1395,7 @@ class stock_move(osv.osv):
|
|||
'You try to assign a lot which is not from the same product',
|
||||
['prodlot_id'])]
|
||||
|
||||
def _default_location_destination(self, cr, uid, context={}):
|
||||
def _default_location_destination(self, cr, uid, context=None):
|
||||
""" Gets default address of partner for destination location
|
||||
@return: Address id or False
|
||||
"""
|
||||
|
@ -1407,7 +1411,7 @@ class stock_move(osv.osv):
|
|||
return property_out and property_out.id or False
|
||||
return False
|
||||
|
||||
def _default_location_source(self, cr, uid, context={}):
|
||||
def _default_location_source(self, cr, uid, context=None):
|
||||
""" Gets default address of partner for source location
|
||||
@return: Address id or False
|
||||
"""
|
||||
|
@ -1423,24 +1427,24 @@ class stock_move(osv.osv):
|
|||
_defaults = {
|
||||
'location_id': _default_location_source,
|
||||
'location_dest_id': _default_location_destination,
|
||||
'state': lambda *a: 'draft',
|
||||
'priority': lambda *a: '1',
|
||||
'product_qty': lambda *a: 1.0,
|
||||
'scraped' : lambda *a: False,
|
||||
'date_planned': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'state': 'draft',
|
||||
'priority': '1',
|
||||
'product_qty': 1.0,
|
||||
'scraped' : False,
|
||||
'date_planned': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.move', context=c),
|
||||
'date_expected': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
}
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context={}):
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default = default.copy()
|
||||
return super(stock_move, self).copy(cr, uid, id, default, context)
|
||||
return super(stock_move, self).copy(cr, uid, id, default, context=context)
|
||||
|
||||
def _auto_init(self, cursor, context):
|
||||
res = super(stock_move, self)._auto_init(cursor, context)
|
||||
def _auto_init(self, cursor, context=None):
|
||||
res = super(stock_move, self)._auto_init(cursor, context=context)
|
||||
cursor.execute('SELECT indexname \
|
||||
FROM pg_indexes \
|
||||
WHERE indexname = \'stock_move_location_id_location_dest_id_product_id_state\'')
|
||||
|
@ -1533,7 +1537,7 @@ class stock_move(osv.osv):
|
|||
result['location_dest_id'] = loc_dest_id
|
||||
return {'value': result}
|
||||
|
||||
def _chain_compute(self, cr, uid, moves, context={}):
|
||||
def _chain_compute(self, cr, uid, moves, context=None):
|
||||
""" Finds whether the location has chained location type or not.
|
||||
@param moves: Stock moves
|
||||
@return: Dictionary containing destination location with chained location type.
|
||||
|
@ -1559,7 +1563,7 @@ class stock_move(osv.osv):
|
|||
result[m.picking_id].append( (m, dest) )
|
||||
return result
|
||||
|
||||
def action_confirm(self, cr, uid, ids, context={}):
|
||||
def action_confirm(self, cr, uid, ids, context=None):
|
||||
""" Confirms stock move.
|
||||
@return: List of ids.
|
||||
"""
|
||||
|
@ -1568,10 +1572,12 @@ class stock_move(osv.osv):
|
|||
self.write(cr, uid, ids, {'state': 'confirmed'})
|
||||
i = 0
|
||||
|
||||
def create_chained_picking(self, cr, uid, moves, context):
|
||||
def create_chained_picking(self, cr, uid, moves, context=None):
|
||||
new_moves = []
|
||||
res_obj = self.pool.get('res.company')
|
||||
for picking, todo in self._chain_compute(cr, uid, moves, context).items():
|
||||
if context is None:
|
||||
context = {}
|
||||
for picking, todo in self._chain_compute(cr, uid, moves, context=context).items():
|
||||
ptype = todo[0][1][5] and todo[0][1][5] or self.pool.get('stock.location').picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0])
|
||||
pick_name = ''
|
||||
if ptype == 'delivery':
|
||||
|
@ -1641,13 +1647,15 @@ class stock_move(osv.osv):
|
|||
#
|
||||
# Duplicate stock.move
|
||||
#
|
||||
def check_assign(self, cr, uid, ids, context={}):
|
||||
def check_assign(self, cr, uid, ids, context=None):
|
||||
""" Checks the product type and accordingly writes the state.
|
||||
@return: No. of moves done
|
||||
"""
|
||||
done = []
|
||||
count = 0
|
||||
pickings = {}
|
||||
if context is None:
|
||||
context = {}
|
||||
for move in self.browse(cr, uid, ids, context=context):
|
||||
if move.product_id.type == 'consu':
|
||||
if move.state in ('confirmed', 'waiting'):
|
||||
|
@ -1697,12 +1705,14 @@ class stock_move(osv.osv):
|
|||
#
|
||||
# Cancel move => cancel others move and pickings
|
||||
#
|
||||
def action_cancel(self, cr, uid, ids, context={}):
|
||||
def action_cancel(self, cr, uid, ids, context=None):
|
||||
""" Cancels the moves and if all moves are cancelled it cancels the picking.
|
||||
@return: True
|
||||
"""
|
||||
if not len(ids):
|
||||
return True
|
||||
if context is None:
|
||||
context = {}
|
||||
pickings = {}
|
||||
for move in self.browse(cr, uid, ids):
|
||||
if move.state in ('confirmed', 'waiting', 'assigned', 'draft'):
|
||||
|
@ -1735,6 +1745,9 @@ class stock_move(osv.osv):
|
|||
acc_variation = accounts['property_stock_variation']
|
||||
journal_id = accounts['stock_journal']
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
if not acc_src:
|
||||
raise osv.except_osv(_('Error!'), _('There is no stock input account defined ' \
|
||||
'for this product: "%s" (id: %d)') % \
|
||||
|
@ -1766,8 +1779,7 @@ class stock_move(osv.osv):
|
|||
# amount = q * move.product_id.standard_price
|
||||
return journal_id, acc_src, acc_dest, acc_variation, amount
|
||||
|
||||
|
||||
def action_done(self, cr, uid, ids, context={}):
|
||||
def action_done(self, cr, uid, ids, context=None):
|
||||
""" Makes the move done and if all moves are done, it will finish the picking.
|
||||
@return:
|
||||
"""
|
||||
|
@ -1775,8 +1787,10 @@ class stock_move(osv.osv):
|
|||
picking_ids = []
|
||||
product_uom_obj = self.pool.get('product.uom')
|
||||
price_type_obj = self.pool.get('product.price.type')
|
||||
product_obj=self.pool.get('product.product')
|
||||
product_obj = self.pool.get('product.product')
|
||||
move_obj = self.pool.get('account.move')
|
||||
if context is None:
|
||||
context = {}
|
||||
for move in self.browse(cr, uid, ids):
|
||||
if move.picking_id:
|
||||
picking_ids.append(move.picking_id.id)
|
||||
|
@ -1852,11 +1866,11 @@ class stock_move(osv.osv):
|
|||
for (id,name) in picking_obj.name_get(cr, uid, picking_ids):
|
||||
message = _('Document') + " '" + name + "' "+ _("is processed")
|
||||
self.log(cr, uid, id, message)
|
||||
|
||||
return True
|
||||
|
||||
def create_account_move(self, cr, uid, move,account_id,account_variation,amount, context=None):
|
||||
|
||||
def create_account_move(self, cr, uid, move,account_id, account_variation, amount, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
partner_id = move.picking_id.address_id and (move.picking_id.address_id.partner_id and move.picking_id.address_id.partner_id.id or False) or False
|
||||
lines=[(0, 0, {
|
||||
'name': move.name,
|
||||
|
@ -1939,6 +1953,8 @@ class stock_move(osv.osv):
|
|||
@return: Splited move lines
|
||||
"""
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
if quantity <= 0:
|
||||
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
||||
|
||||
|
@ -1999,7 +2015,6 @@ class stock_move(osv.osv):
|
|||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
if quantity <= 0:
|
||||
raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
|
||||
|
||||
|
@ -2030,7 +2045,6 @@ class stock_move(osv.osv):
|
|||
else:
|
||||
current_move = self.copy(cr, uid, move.id, default_val)
|
||||
res += [current_move]
|
||||
|
||||
update_val = {}
|
||||
update_val['product_qty'] = quantity_rest
|
||||
update_val['product_uos_qty'] = uos_qty_rest
|
||||
|
@ -2039,7 +2053,6 @@ class stock_move(osv.osv):
|
|||
else:
|
||||
quantity_rest = quantity
|
||||
uos_qty_rest = uos_qty
|
||||
|
||||
if move.product_id.track_production and location_id:
|
||||
res += self.split_lines(cr, uid, [move.id], quantity_rest, split_by_qty=1, context=context)
|
||||
else:
|
||||
|
@ -2051,11 +2064,11 @@ class stock_move(osv.osv):
|
|||
}
|
||||
|
||||
self.write(cr, uid, [move.id], update_val)
|
||||
|
||||
self.action_done(cr, uid, res)
|
||||
|
||||
return res
|
||||
|
||||
def do_partial(self, cr, uid, ids, partial_datas, context={}):
|
||||
def do_partial(self, cr, uid, ids, partial_datas, context=None):
|
||||
""" Makes partial pickings and moves done.
|
||||
@param partial_datas: Dictionary containing details of partial picking
|
||||
like partner_id, address_id, delivery_date, delivery
|
||||
|
@ -2073,9 +2086,11 @@ class stock_move(osv.osv):
|
|||
partner_id = partial_datas.get('partner_id', False)
|
||||
address_id = partial_datas.get('address_id', False)
|
||||
delivery_date = partial_datas.get('delivery_date', False)
|
||||
|
||||
new_moves = []
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
complete, too_many, too_few = [], [], []
|
||||
move_product_qty = {}
|
||||
for move in self.browse(cr, uid, ids, context=context):
|
||||
|
@ -2153,7 +2168,7 @@ class stock_move(osv.osv):
|
|||
complete.append(move)
|
||||
|
||||
for move in complete:
|
||||
self.action_done(cr, uid, [move.id], context)
|
||||
self.action_done(cr, uid, [move.id], context=context)
|
||||
if move.picking_id.id :
|
||||
# TOCHECK : Done picking if all moves are done
|
||||
cr.execute("""
|
||||
|
@ -2174,7 +2189,6 @@ class stock_move(osv.osv):
|
|||
|
||||
stock_move()
|
||||
|
||||
|
||||
class stock_inventory(osv.osv):
|
||||
_name = "stock.inventory"
|
||||
_description = "Inventory"
|
||||
|
@ -2188,12 +2202,11 @@ class stock_inventory(osv.osv):
|
|||
'company_id': fields.many2one('res.company','Company',required=True,select=1),
|
||||
}
|
||||
_defaults = {
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'state': lambda *a: 'draft',
|
||||
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'state': 'draft',
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c)
|
||||
}
|
||||
|
||||
|
||||
def _inventory_line_hook(self, cr, uid, inventory_line, move_vals):
|
||||
""" Creates a stock move from an inventory line
|
||||
@param inventory_line:
|
||||
|
@ -2206,6 +2219,8 @@ class stock_inventory(osv.osv):
|
|||
""" Finishes the inventory and writes its finished date
|
||||
@return: True
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
for inv in self.browse(cr, uid, ids):
|
||||
move_ids = []
|
||||
move_line = []
|
||||
|
@ -2248,7 +2263,7 @@ class stock_inventory(osv.osv):
|
|||
self.write(cr, uid, [inv.id], {'state': 'done', 'date_done': time.strftime('%Y-%m-%d %H:%M:%S'), 'move_ids': [(6, 0, move_ids)]})
|
||||
return True
|
||||
|
||||
def action_cancel(self, cr, uid, ids, context={}):
|
||||
def action_cancel(self, cr, uid, ids, context=None):
|
||||
""" Cancels the stock move and change inventory state to draft.
|
||||
@return: True
|
||||
"""
|
||||
|
@ -2257,7 +2272,7 @@ class stock_inventory(osv.osv):
|
|||
self.write(cr, uid, [inv.id], {'state': 'draft'})
|
||||
return True
|
||||
|
||||
def action_cancel_inventary(self, cr, uid, ids, context={}):
|
||||
def action_cancel_inventary(self, cr, uid, ids, context=None):
|
||||
""" Cancels both stock move and inventory
|
||||
@return: True
|
||||
"""
|
||||
|
@ -2268,7 +2283,6 @@ class stock_inventory(osv.osv):
|
|||
|
||||
stock_inventory()
|
||||
|
||||
|
||||
class stock_inventory_line(osv.osv):
|
||||
_name = "stock.inventory.line"
|
||||
_description = "Inventory Line"
|
||||
|
@ -2301,7 +2315,6 @@ class stock_inventory_line(osv.osv):
|
|||
|
||||
stock_inventory_line()
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Stock Warehouse
|
||||
#----------------------------------------------------------
|
||||
|
@ -2318,8 +2331,9 @@ class stock_warehouse(osv.osv):
|
|||
'lot_output_id': fields.many2one('stock.location', 'Location Output', required=True, domain=[('usage','<>','view')]),
|
||||
}
|
||||
_defaults = {
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c),
|
||||
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c),
|
||||
}
|
||||
|
||||
stock_warehouse()
|
||||
|
||||
|
||||
|
@ -2328,15 +2342,19 @@ stock_warehouse()
|
|||
class stock_picking_move_wizard(osv.osv_memory):
|
||||
_name = 'stock.picking.move.wizard'
|
||||
|
||||
def _get_picking(self, cr, uid, ctx):
|
||||
def _get_picking(self, cr, uid, ctx=None):
|
||||
if ctx is None:
|
||||
ctx = {}
|
||||
if ctx.get('action_id', False):
|
||||
return ctx['action_id']
|
||||
return False
|
||||
|
||||
def _get_picking_address(self, cr, uid, ctx):
|
||||
def _get_picking_address(self, cr, uid, context=None):
|
||||
picking_obj = self.pool.get('stock.picking')
|
||||
if ctx.get('action_id', False):
|
||||
picking = picking_obj.browse(cr, uid, [ctx['action_id']])[0]
|
||||
if context is None:
|
||||
context = {}
|
||||
if context.get('action_id', False):
|
||||
picking = picking_obj.browse(cr, uid, [context['action_id']])[0]
|
||||
return picking.address_id and picking.address_id.id or False
|
||||
return False
|
||||
|
||||
|
@ -2382,7 +2400,6 @@ class report_products_to_received_planned(osv.osv):
|
|||
'planned_qty': fields.integer('Planned Qty'),
|
||||
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'report_products_to_received_planned')
|
||||
cr.execute("""
|
||||
|
@ -2404,6 +2421,7 @@ class report_products_to_received_planned(osv.osv):
|
|||
group by stock.date_planned
|
||||
)
|
||||
""")
|
||||
|
||||
report_products_to_received_planned()
|
||||
|
||||
class report_delivery_products_planned(osv.osv):
|
||||
|
@ -2440,5 +2458,7 @@ class report_delivery_products_planned(osv.osv):
|
|||
|
||||
)
|
||||
""")
|
||||
|
||||
report_delivery_products_planned()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<menuitem icon="terp-stock" id="menu_stock_root" name="Warehouse" sequence="5"/>
|
||||
<menuitem id="menu_stock_warehouse_mgmt" name="Warehouse Management" parent="menu_stock_root" sequence="1"/>
|
||||
<menuitem id="menu_stock_products_moves" name="Products Moves" parent="menu_stock_root" sequence="2"/>
|
||||
|
@ -77,8 +78,8 @@
|
|||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
</record>
|
||||
|
||||
<record id="view_inventory_form" model="ir.ui.view">
|
||||
<field name="name">stock.inventory.form</field>
|
||||
<field name="model">stock.inventory</field>
|
||||
|
@ -129,6 +130,7 @@
|
|||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_inventory_form" model="ir.actions.act_window">
|
||||
<field name="name">Periodical Inventory</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
|
@ -636,18 +638,18 @@
|
|||
<button
|
||||
name="%(stock.track_line)d"
|
||||
string="Split in production lots"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
type="action" icon="terp-stock_effects-object-colorize"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<button name="setlast_tracking" string="Put in current pack" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
|
@ -686,14 +688,14 @@
|
|||
|
||||
<newline/>
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
states="draft,waiting,confirmed,assigned"
|
||||
type="action" icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended" />
|
||||
<button name="%(move_scrap)d" string="Scrap" type="action" icon="gtk-justify-fill"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
states="draft,assigned,confirmed,done"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize" />
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
|
@ -806,9 +808,9 @@
|
|||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<button name="setlast_tracking" string="Put in current pack" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
|
@ -855,13 +857,13 @@
|
|||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
groups="base.group_extended"
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
groups="base.group_extended"
|
||||
states="draft,waiting,confirmed,assigned"
|
||||
type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
|
@ -1015,13 +1017,13 @@
|
|||
groups="base.group_extended"/>
|
||||
<field name="tracking_id" groups="base.group_extended"/>
|
||||
<button name="setlast_tracking" string="Put in current pack" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
<field name="date_planned"/>
|
||||
|
@ -1055,12 +1057,12 @@
|
|||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
/>
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<label/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
|
@ -1214,11 +1216,11 @@
|
|||
states="draft,waiting,confirmed,assigned" />
|
||||
<field name="tracking_id" groups="base.group_extended"/>
|
||||
<button name="setlast_tracking" string="Put in current pack" type="object"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="state"/>
|
||||
|
@ -1252,7 +1254,7 @@
|
|||
<button groups="base.group_extended" name="267" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<label/>
|
||||
<button name="275" string="Split Stock Moves" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}" states="draft,assigned,confirmed,done"/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
|
@ -1399,16 +1401,16 @@
|
|||
states="draft,waiting,confirmed,assigned" />
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<button name="%(track_line)d" string="Split in Production Lots" type="action"
|
||||
icon="gtk-justify-fill"
|
||||
icon="gtk-justify-fill"
|
||||
states="draft,waiting,confirmed,assigned"
|
||||
groups="base.group_extended"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<button name="setlast_tracking" string="Put in current pack" type="object"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
|
@ -1470,12 +1472,12 @@
|
|||
<group colspan="4" col="4">
|
||||
<label/>
|
||||
<button name="%(track_line)d"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
states="draft,waiting,confirmed,assigned"
|
||||
string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize" colspan="2" />
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
</group>
|
||||
|
@ -1568,12 +1570,12 @@
|
|||
groups="base.group_extended"/>
|
||||
<field name="tracking_id" groups="base.group_extended"/>
|
||||
<button name="setlast_tracking" string="Put in current pack" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="date_planned"/>
|
||||
|
@ -1618,19 +1620,16 @@
|
|||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<newline/>
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
states="draft,waiting,confirmed,assigned"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Put in a new pack" type="action"
|
||||
groups="base.group_extended"
|
||||
groups="base.group_extended"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots"
|
||||
groups="base.group_extended"
|
||||
type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
<group col="5" colspan="2">
|
||||
|
@ -1970,4 +1969,4 @@
|
|||
parent="menu_warehouse_config" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
|
@ -1,16 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!--
|
||||
<wizard string="UPS xml file" model="stock.move.lot" name="stock.ups_xml" />
|
||||
-->
|
||||
|
||||
<wizard
|
||||
id="split_inventory_lots"
|
||||
model="stock.inventory.line"
|
||||
multi="True"
|
||||
name="stock.inventory.line.split"
|
||||
string="Split inventory lines"/>
|
||||
</data>
|
||||
</openerp>
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="wkf_picking" model="workflow">
|
||||
<field name="name">stock.picking.basic</field>
|
||||
<field name="osv">stock.picking</field>
|
||||
|
@ -43,7 +44,7 @@
|
|||
<field name="kind">function</field>
|
||||
<field name="action">action_cancel()</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="act_cancel" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_picking"/>
|
||||
<field name="name">cancel</field>
|
||||
|
@ -51,7 +52,7 @@
|
|||
<field name="kind">function</field>
|
||||
<field name="action">action_cancel()</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="trans_draft_confirmed" model="workflow.transition">
|
||||
<field name="act_from" ref="act_draft"/>
|
||||
<field name="act_to" ref="act_confirmed"/>
|
||||
|
@ -134,5 +135,6 @@
|
|||
<field name="act_to" ref="act_cancel"/>
|
||||
<field name="condition">test_cancel()</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -44,8 +44,8 @@ class stock_inventory_line_split(osv.osv_memory):
|
|||
@return: A dictionary which of fields with values.
|
||||
"""
|
||||
record_id = context and context.get('active_id',False)
|
||||
res = super(stock_inventory_line_split, self).default_get(cr, uid, fields, context=context)
|
||||
line= self.pool.get('stock.inventory.line').browse(cr, uid, record_id)
|
||||
res = {}
|
||||
line = self.pool.get('stock.inventory.line').browse(cr, uid, record_id)
|
||||
if 'product_id' in fields:
|
||||
res.update({'product_id':line.product_id.id})
|
||||
return res
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue