[MERGE]: Merge with lp:openobject-trunk-dev-addons2
bzr revid: ksa@tinyerp.co.in-20101006042808-udwz1cgl8wt2kbri
This commit is contained in:
@@ -120,7 +120,6 @@ module named account_voucher.
|
||||
'project/analytic_account_demo.xml',
|
||||
'demo/account_minimal.xml',
|
||||
'account_unit_test.xml',
|
||||
'board_account_demo.xml',
|
||||
],
|
||||
'test': [
|
||||
'test/account_customer_invoice.yml',
|
||||
|
||||
@@ -75,6 +75,9 @@ class account_analytic_line(osv.osv):
|
||||
unit=False, journal_id=False, context=None):
|
||||
if context==None:
|
||||
context={}
|
||||
if not journal_id:
|
||||
j_ids = self.pool.get('account.analytic.journal').search(cr, uid, [('type','=','purchase')])
|
||||
j_id = j_ids and j_ids[0] or False
|
||||
if not journal_id or not prod_id:
|
||||
return {}
|
||||
product_obj = self.pool.get('product.product')
|
||||
@@ -86,7 +89,7 @@ class account_analytic_line(osv.osv):
|
||||
result = 0.0
|
||||
is_purchase = False
|
||||
|
||||
if j_id.type == 'purchase':
|
||||
if j_id.type <> 'sale':
|
||||
a = prod.product_tmpl_id.property_account_expense.id
|
||||
if not a:
|
||||
a = prod.categ_id.property_account_expense_categ.id
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<!--
|
||||
Administrator shortcut
|
||||
Demo user startup menu
|
||||
-->
|
||||
<record id="base.user_root" model="res.users">
|
||||
<field name="action_id" ref="open_board_account"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -7,13 +7,13 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-10-03 09:42+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 06:51+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.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-10-04 04:57+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
-->
|
||||
|
||||
<record id="process_transition_confirmstatementfromdraft0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Confirm statement"""" name="name"/>
|
||||
<field eval=""""The accountant confirms the statement."""" name="note"/>
|
||||
@@ -131,7 +130,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_analyticinvoice0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""From analytic accounts"""" name="name"/>
|
||||
<field eval=""""Analytic costs (timesheets, some purchased products, ...) come from analytic accounts. These generate draft invoices."""" name="note"/>
|
||||
@@ -140,7 +138,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_customerinvoice0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""Draft invoices are checked, validated and printed."""" name="note"/>
|
||||
@@ -150,7 +147,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_validentries0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""Accountant validates the accounting entries coming from the invoice."""" name="note"/>
|
||||
@@ -159,7 +155,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_entriesreconcile0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Accounting entries"""" name="name"/>
|
||||
<field eval=""""Accounting entries are the first input of the reconciliation."""" name="note"/>
|
||||
@@ -168,7 +163,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_statemententries0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""Manual or automatic creation of payment entries according to the statements"""" name="note"/>
|
||||
@@ -177,7 +171,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_paymentreconcile0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Payment entries"""" name="name"/>
|
||||
<field eval=""""Payment entries are the second input of the reconciliation."""" name="note"/>
|
||||
@@ -186,7 +179,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_reconcilepaid0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Payment"""" name="name"/>
|
||||
<field eval=""""As soon as the reconciliation is done, the invoice can be paid."""" name="note"/>
|
||||
|
||||
@@ -65,7 +65,6 @@
|
||||
-->
|
||||
|
||||
<record id="process_transition_filestatement0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Automatic import of the bank statement"""" name="name"/>
|
||||
<field eval=""""Import of the statement in the system from an electronic file"""" name="note"/>
|
||||
@@ -74,7 +73,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_invoicemanually0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Manual entry"""" name="name"/>
|
||||
<field eval=""""A statement with manual entries becomes a draft statement."""" name="note"/>
|
||||
@@ -84,7 +82,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_invoiceimport0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Import from invoice or payment"""" name="name"/>
|
||||
<field eval=""""Import of the statement in the system from a supplier or customer invoice"""" name="note"/>
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!--
|
||||
Process
|
||||
|
||||
<!--
|
||||
Process
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_process_supplierinvoiceprocess0" model="process.process">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
<field eval=""""Supplier Invoice"""" name="name"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
|
||||
<!--
|
||||
Process Node
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_node_analyticcost0" model="process.node">
|
||||
<field name="menu_id" ref="account.account_analytic_def_account"/>
|
||||
<field name="model_id" ref="analytic.model_account_analytic_account"/>
|
||||
@@ -26,7 +26,7 @@
|
||||
<field eval=""""object.state in ('draft', 'open', 'pending', 'close')"""" name="model_states"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierdraftinvoices0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree2"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -37,7 +37,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierinvoiceinvoice0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_finance_payables"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -48,7 +48,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierbankstatement0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
|
||||
<field name="model_id" ref="account.model_account_bank_statement"/>
|
||||
@@ -60,7 +60,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplieraccountingentries0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_move_journal_line_form"/>
|
||||
<field name="model_id" ref="account.model_account_move"/>
|
||||
@@ -70,7 +70,7 @@
|
||||
<field name="process_id" ref="process_process_supplierinvoiceprocess0"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierpaymentorder0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_eaction_account_moves_all"/>
|
||||
<field name="model_id" ref="account.model_account_move_line"/>
|
||||
@@ -81,7 +81,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierreconciliation0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_eaction_account_moves_all"/>
|
||||
<field name="model_id" ref="account.model_account_move_reconcile"/>
|
||||
@@ -92,7 +92,7 @@
|
||||
<field eval=""""object.state=='valid'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierpaidinvoice0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -103,22 +103,20 @@
|
||||
<field eval=""""object.state=='paid'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
|
||||
<!--
|
||||
Process Transition
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_transition_supplieranalyticcost0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""From analytic accounts"""" name="name"/>
|
||||
<field eval=""""Analytic costs (timesheets, some purchased products, ...) come from analytic accounts. These generate draft supplier invoices."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplierdraftinvoices0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_analyticcost0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_suppliercustomerinvoice0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""Draft invoices are validated. """" name="note"/>
|
||||
@@ -126,51 +124,46 @@
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplierdraftinvoices0"/>
|
||||
<field eval="[(6,0,[ref('account.pro2_to_open')])]" name="transition_ids"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_suppliervalidentries0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""Accountant validates the accounting entries coming from the invoice. """" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplieraccountingentries0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplierinvoiceinvoice0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_supplierentriesreconcile0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Accounting entries"""" name="name"/>
|
||||
<field eval=""""Accounting entries are an input of the reconciliation."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplierreconciliation0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplieraccountingentries0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_paymentorderbank0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Payment entries"""" name="name"/>
|
||||
<field eval=""""The payment order is sent to the bank."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplierbankstatement0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplierpaymentorder0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_paymentorderreconcilation0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""Bank statements are entered in the system."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplierreconciliation0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplierbankstatement0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_supplierreconcilepaid0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""System payment"""" name="name"/>
|
||||
<field eval=""""As soon as the reconciliation is done, the invoice's state turns to “done” (i.e. paid) in the system."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplierpaidinvoice0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplierreconciliation0"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -28,8 +28,8 @@ from osv import osv
|
||||
class account_analytic_journal(osv.osv):
|
||||
_name = 'account.analytic.journal'
|
||||
_columns = {
|
||||
'name' : fields.char('Journal name', size=64, required=True),
|
||||
'code' : fields.char('Journal code', size=8),
|
||||
'name' : fields.char('Journal Name', size=64, required=True),
|
||||
'code' : fields.char('Journal Code', size=8),
|
||||
'active' : fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the analytic journal without removing it."),
|
||||
'type': fields.selection([('sale','Sale'), ('purchase','Purchase'), ('cash','Cash'), ('general','General'), ('situation','Situation')], 'Type', size=32, required=True, help="Gives the type of the analytic journal. When it needs for a document (eg: an invoice) to create analytic entries, OpenERP will look for a matching journal of the same type."),
|
||||
'line_ids' : fields.one2many('account.analytic.line', 'journal_id', 'Lines'),
|
||||
|
||||
@@ -172,19 +172,16 @@
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="top" string="Analytic Entries">
|
||||
<field name="date" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
|
||||
<field name="date"/>
|
||||
<field name="ref" invisible="context.get('to_invoice', False)"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total quantity"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
|
||||
<field domain="[('type','=','normal')]" name="account_id" groups="base.group_extended"/>
|
||||
<field invisible="True" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
|
||||
<field name="amount" sum="Total amount"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="currency_id" />
|
||||
<field name="amount_currency" />
|
||||
<field name="company_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" groups="base.group_multi_company"/>
|
||||
<field name="journal_id" invisible="context.get('to_invoice', False)"/>
|
||||
<field name="amount" sum="Total" invisible="context.get('to_invoice', False)"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" invisible="not context.get('to_invoice', False)"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" invisible="not context.get('to_invoice', False)"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" invisible="not context.get('to_invoice', False)"/>
|
||||
<field domain="[('type','=','normal')]" name="account_id"/>
|
||||
<field name="general_account_id" invisible="context.get('to_invoice', False)"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -195,22 +192,24 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Analytic Lines">
|
||||
<group col='6' colspan='4'>
|
||||
<filter string="Sales" domain="[('journal_id.type','=','sale')]" icon="terp-sale" help="Analytic Journal Items related to a sale journal."/>
|
||||
<filter string="Purchases" domain="[('journal_id.type','=','purchase')]" icon="terp-purchase" help="Analytic Journal Items related to a purchase journal."/>
|
||||
<filter name="sales" string="Sales" domain="[('journal_id.type','=','sale')]" icon="terp-sale" help="Analytic Journal Items related to a sale journal."/>
|
||||
<filter name="purchases" string="Purchases" domain="[('journal_id.type','=','purchase')]" icon="terp-purchase" help="Analytic Journal Items related to a purchase journal."/>
|
||||
<filter name="others" string="Others" domain="[('journal_id.type','in',('cash','general','situation')]" icon="terp-folder-orange"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today" string="Overdue Accounts" domain="[('account_id.date','<',time.strftime('%%Y-%%m-%%d'))]" help="Analytic Journal Items related to accounts having a past deadline."/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date" select="1"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="account_id" select="1"/>
|
||||
<field name="user_id" widget="selection"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="account_id"/>
|
||||
<field name="user_id">
|
||||
<filter string="My Entries" domain="[('user_id','=',uid)]" icon="terp-personal"/>
|
||||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group string="Group By..." expand="0">
|
||||
<filter string="Analytic Account" context="{'group_by':'account_id'}" groups="base.group_extended" icon="terp-folder-blue"/>
|
||||
<filter string="Analytic Journal" context="{'group_by':'journal_id'}" icon="terp-folder-orange"/>
|
||||
<filter string="Account" context="{'group_by':'account_id'}" groups="base.group_extended" icon="terp-folder-blue"/>
|
||||
<filter string="Journal" context="{'group_by':'journal_id'}" icon="terp-folder-orange"/>
|
||||
<filter string="User" context="{'group_by':'user_id'}" icon="terp-personal"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="General Account" context="{'group_by':'general_account_id'}" icon="terp-folder-green"/>
|
||||
<filter string="Fin.Account" context="{'group_by':'general_account_id'}" icon="terp-folder-green"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Product" context="{'group_by':'product_id'}" icon="terp-accessories-archiver"/>
|
||||
</group>
|
||||
|
||||
@@ -232,10 +232,10 @@
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.price_unit) ]][[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.discount) ]] </para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.discount, digits=get_digits(dp='Account')) ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.price_subtotal) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(l.price_subtotal, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -294,7 +294,7 @@
|
||||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -338,7 +338,7 @@
|
||||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]] [[ o.currency_id.symbol ]]</para>
|
||||
@@ -373,4 +373,4 @@
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
||||
@@ -21,12 +21,10 @@
|
||||
|
||||
from report import report_sxw
|
||||
import xml.dom.minidom
|
||||
import os, time
|
||||
import time
|
||||
import osv
|
||||
import re
|
||||
import tools
|
||||
import pooler
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ from osv import osv, fields
|
||||
from osv.orm import intersect
|
||||
import tools.sql
|
||||
from tools.translate import _
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = "account.analytic.account"
|
||||
@@ -66,6 +68,8 @@ class account_analytic_account(osv.osv):
|
||||
and invoice_id is not null \
|
||||
GROUP BY account_analytic_line.account_id;", (parent_ids,))
|
||||
for account_id, sum in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = sum
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
@@ -102,6 +106,8 @@ class account_analytic_account(osv.osv):
|
||||
and account_analytic_journal.type in ('purchase','general') \
|
||||
GROUP BY account_analytic_account.id;""", (parent_ids,))
|
||||
for account_id, sum in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = round(sum, dp)
|
||||
|
||||
for account in accounts:
|
||||
@@ -142,6 +148,8 @@ class account_analytic_account(osv.osv):
|
||||
and invoice_id is null \
|
||||
GROUP BY account_analytic_line.account_id" ,(parent_ids,))
|
||||
for account_id, lwd in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = lwd
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
@@ -161,6 +169,8 @@ class account_analytic_account(osv.osv):
|
||||
AND to_invoice IS NOT NULL \
|
||||
GROUP BY account_analytic_line.account_id;",(parent_ids,))
|
||||
for account_id, sua in cr.fetchall():
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = round(sua, dp)
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
@@ -181,10 +191,14 @@ class account_analytic_account(osv.osv):
|
||||
GROUP BY account_analytic_line.account_id",(parent_ids,))
|
||||
ff = cr.fetchall()
|
||||
for account_id, hq in ff:
|
||||
if account_id not in res:
|
||||
res[account_id] = {}
|
||||
res[account_id][f] = round(hq, dp)
|
||||
for account in accounts:
|
||||
for child in account.child_ids:
|
||||
if account.id != child.id:
|
||||
if account.id not in res:
|
||||
res[account.id] = {f: 0.0}
|
||||
res[account.id][f] += res.get(child.id, {}).get(f, 0.0)
|
||||
for id in ids:
|
||||
res[id][f] = round(res[id][f], dp)
|
||||
@@ -223,6 +237,8 @@ class account_analytic_account(osv.osv):
|
||||
res2.setdefault(account.id, 0.0)
|
||||
for child in account.child_ids:
|
||||
if account.id != child.id:
|
||||
if account.id not in res:
|
||||
res[account.id] = {f: 0.0}
|
||||
res[account.id][f] += res.get(child.id, {}).get(f, 0.0)
|
||||
res[account.id][f] += res2.get(child.id, 0.0)
|
||||
|
||||
@@ -337,22 +353,47 @@ class account_analytic_account(osv.osv):
|
||||
return res
|
||||
|
||||
_columns ={
|
||||
'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount', help="Total customer invoiced amount for this account."),
|
||||
'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total Costs', help="Total of costs for this account. It includes real costs (from invoices) and indirect costs, like time spent on timesheets."),
|
||||
'ca_to_invoice': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Amount', help="If invoice from analytic account, the remaining amount you can invoice to the customer based on the total costs."),
|
||||
'ca_theorical': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Theorical Revenue', help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist."),
|
||||
'hours_quantity': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Hours Tot', help="Number of hours you spent on the analytic account (from timesheet). It computes on all journal of type 'general'."),
|
||||
'last_invoice_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Last Invoice Date', help="Date of the last invoice created for this analytic account."),
|
||||
'last_worked_invoiced_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Invoiced Cost', help="If invoice from the costs, this is the date of the latest work or cost that have been invoiced."),
|
||||
'last_worked_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Cost/Work', help="Date of the latest work done on this account."),
|
||||
'hours_qtt_non_invoiced': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Hours', help="Number of hours (from journal of type 'general') that can be invoiced if you invoice based on analytic account."),
|
||||
'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced Hours', help="Number of hours that can be invoiced plus those that already have been invoiced."),
|
||||
'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining Hours', help="Computed using the formula: Maximum Quantity - Hours Tot."),
|
||||
'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining Revenue', help="Computed using the formula: Max Invoice Price - Invoiced Amount."),
|
||||
'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per Hours (real)', help="Computed using the formula: Invoiced Amount / Hours Tot."),
|
||||
'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real Margin', help="Computed using the formula: Invoiced Amount - Total Costs."),
|
||||
'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theorical Margin', help="Computed using the formula: Theorial Revenue - Total Costs"),
|
||||
'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real Margin Rate (%)', help="Computes using the formula: (Real Margin / Total Costs) * 100."),
|
||||
'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount',
|
||||
help="Total customer invoiced amount for this account.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'total_cost': fields.function(_total_cost_calc, method=True, type='float', string='Total Costs',
|
||||
help="Total of costs for this account. It includes real costs (from invoices) and indirect costs, like time spent on timesheets.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'ca_to_invoice': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Amount',
|
||||
help="If invoice from analytic account, the remaining amount you can invoice to the customer based on the total costs.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'ca_theorical': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Theorical Revenue',
|
||||
help="Based on the costs you had on the project, what would have been the revenue if all these costs have been invoiced at the normal sale price provided by the pricelist.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'hours_quantity': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Hours Tot',
|
||||
help="Number of hours you spent on the analytic account (from timesheet). It computes on all journal of type 'general'."),
|
||||
'last_invoice_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Last Invoice Date',
|
||||
help="Date of the last invoice created for this analytic account."),
|
||||
'last_worked_invoiced_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Invoiced Cost',
|
||||
help="If invoice from the costs, this is the date of the latest work or cost that have been invoiced."),
|
||||
'last_worked_date': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='date', string='Date of Last Cost/Work',
|
||||
help="Date of the latest work done on this account."),
|
||||
'hours_qtt_non_invoiced': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='float', string='Uninvoiced Hours',
|
||||
help="Number of hours (from journal of type 'general') that can be invoiced if you invoice based on analytic account."),
|
||||
'hours_qtt_invoiced': fields.function(_hours_qtt_invoiced_calc, method=True, type='float', string='Invoiced Hours',
|
||||
help="Number of hours that can be invoiced plus those that already have been invoiced."),
|
||||
'remaining_hours': fields.function(_remaining_hours_calc, method=True, type='float', string='Remaining Hours',
|
||||
help="Computed using the formula: Maximum Quantity - Hours Tot."),
|
||||
'remaining_ca': fields.function(_remaining_ca_calc, method=True, type='float', string='Remaining Revenue',
|
||||
help="Computed using the formula: Max Invoice Price - Invoiced Amount.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'revenue_per_hour': fields.function(_revenue_per_hour_calc, method=True, type='float', string='Revenue per Hours (real)',
|
||||
help="Computed using the formula: Invoiced Amount / Hours Tot.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'real_margin': fields.function(_real_margin_calc, method=True, type='float', string='Real Margin',
|
||||
help="Computed using the formula: Invoiced Amount - Total Costs.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'theorical_margin': fields.function(_theorical_margin_calc, method=True, type='float', string='Theorical Margin',
|
||||
help="Computed using the formula: Theorial Revenue - Total Costs",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'real_margin_rate': fields.function(_real_margin_rate_calc, method=True, type='float', string='Real Margin Rate (%)',
|
||||
help="Computes using the formula: (Real Margin / Total Costs) * 100.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
'month_ids': fields.function(_analysis_all, method=True, multi='analytic_analysis', type='many2many', relation='account_analytic_analysis.summary.month', string='Month'),
|
||||
'user_ids': fields.function(_analysis_all, method=True, multi='analytic_analysis', type="many2many", relation='account_analytic_analysis.summary.user', string='User'),
|
||||
}
|
||||
|
||||
@@ -65,28 +65,24 @@
|
||||
<field name="act_from" ref="act_confirm" />
|
||||
<field name="act_to" ref="act_validate" />
|
||||
<field name="signal">validate</field>
|
||||
<field name="role_id" ref="crossovered_budget_role"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t3">
|
||||
<field name="act_from" ref="act_confirm" />
|
||||
<field name="act_to" ref="act_cancel" />
|
||||
<field name="signal">cancel</field>
|
||||
<field name="role_id" ref="crossovered_budget_role"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t4">
|
||||
<field name="act_from" ref="act_validate" />
|
||||
<field name="act_to" ref="act_cancel" />
|
||||
<field name="signal">cancel</field>
|
||||
<field name="role_id" ref="crossovered_budget_role"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t5">
|
||||
<field name="act_from" ref="act_validate" />
|
||||
<field name="act_to" ref="act_done" />
|
||||
<field name="signal">done</field>
|
||||
<field name="role_id" ref="crossovered_budget_role"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t6">
|
||||
|
||||
@@ -130,19 +130,22 @@ class account_invoice_line(osv.osv):
|
||||
default['state'] = self.browse(cr, uid, id).state
|
||||
return super(account_invoice_line, self).copy_data(cr, uid, id, default, context)
|
||||
|
||||
def _fnct(self, cr, uid, id, name, args, context=None):
|
||||
def _fnct(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for m in self.browse(cr, uid, id):
|
||||
if m.state != 'article':
|
||||
if m.state == 'line':
|
||||
res[m.id] = '-----------------------------------------'
|
||||
elif m.state == 'break':
|
||||
res[m.id] = 'PAGE BREAK'
|
||||
|
||||
lines = self.browse(cr, uid, ids)
|
||||
account_ids = [line.account_id.id for line in lines]
|
||||
account_names = dict(self.pool.get('account.account').name_get(cr, uid, account_ids, context=context))
|
||||
for line in lines:
|
||||
if line.state != 'article':
|
||||
if line.state == 'line':
|
||||
res[line.id] = '-----------------------------------------'
|
||||
elif line.state == 'break':
|
||||
res[line.id] = 'PAGE BREAK'
|
||||
else:
|
||||
res[m.id] = ' '
|
||||
res[line.id] = ' '
|
||||
else:
|
||||
[(temp)] = self.pool.get('account.account').name_get(cr, uid, [m.account_id.id], context=context)
|
||||
res[m.id] = temp[1]
|
||||
res[line.id] = account_names.get(line.account_id.id, '')
|
||||
return res
|
||||
|
||||
_name = "account.invoice.line"
|
||||
@@ -205,4 +208,4 @@ class account_invoice(osv.osv):
|
||||
|
||||
account_invoice()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -23,6 +23,7 @@ import time
|
||||
|
||||
from report import report_sxw
|
||||
|
||||
|
||||
class account_invoice_1(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(account_invoice_1, self).__init__(cr, uid, name, context=context)
|
||||
@@ -33,112 +34,111 @@ class account_invoice_1(report_sxw.rml_parse):
|
||||
self.context = context
|
||||
self._node = None
|
||||
|
||||
def invoice_lines(self,invoice):
|
||||
result =[]
|
||||
sub_total={}
|
||||
info=[]
|
||||
invoice_list=[]
|
||||
res={}
|
||||
list_in_seq={}
|
||||
def invoice_lines(self, invoice):
|
||||
result = []
|
||||
sub_total = {}
|
||||
info = []
|
||||
invoice_list = []
|
||||
res = {}
|
||||
list_in_seq = {}
|
||||
ids = self.pool.get('account.invoice.line').search(self.cr, self.uid, [('invoice_id', '=', invoice.id)])
|
||||
ids.sort()
|
||||
for id in range(0,len(ids)):
|
||||
for id in range(0, len(ids)):
|
||||
info = self.pool.get('account.invoice.line').browse(self.cr, self.uid, ids[id], self.context.copy())
|
||||
list_in_seq[info]=info.sequence
|
||||
i=1
|
||||
j=0
|
||||
list_in_seq[info] = info.sequence
|
||||
i = 1
|
||||
j = 0
|
||||
final=sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
|
||||
invoice_list=[x[0] for x in final]
|
||||
sum_flag={}
|
||||
sum_flag[j]=-1
|
||||
invoice_list = [x[0] for x in final]
|
||||
sum_flag = {}
|
||||
sum_flag[j] = -1
|
||||
for entry in invoice_list:
|
||||
res={}
|
||||
if entry.state=='article':
|
||||
res = {}
|
||||
if entry.state == 'article':
|
||||
self.cr.execute('select tax_id from account_invoice_line_tax where invoice_line_id=%s', (entry.id,))
|
||||
tax_ids=self.cr.fetchall()
|
||||
if tax_ids==[]:
|
||||
res['tax_types']=''
|
||||
tax_ids = self.cr.fetchall()
|
||||
if tax_ids == []:
|
||||
res['tax_types'] = ''
|
||||
else:
|
||||
tax_names_dict={}
|
||||
for item in range(0,len(tax_ids)) :
|
||||
tax_names_dict = {}
|
||||
for item in range(0, len(tax_ids)):
|
||||
self.cr.execute('select name from account_tax where id=%s', (tax_ids[item][0],))
|
||||
type=self.cr.fetchone()
|
||||
tax_names_dict[item] =type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0,len(tax_names_dict))])
|
||||
res['tax_types']=tax_names
|
||||
res['name']=entry.name
|
||||
res['quantity']="%.2f"%(entry.quantity)
|
||||
res['price_unit']="%.2f"%(entry.price_unit)
|
||||
res['discount']="%.2f"%(entry.discount)
|
||||
res['price_subtotal']="%.2f"%(entry.price_subtotal)
|
||||
sub_total[i]=entry.price_subtotal
|
||||
i=i+1
|
||||
res['note']=entry.note
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['type']=entry.state
|
||||
type = self.cr.fetchone()
|
||||
tax_names_dict[item] = type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0, len(tax_names_dict))])
|
||||
res['tax_types'] = tax_names
|
||||
res['name'] = entry.name
|
||||
res['quantity'] = self.formatLang(entry.quantity, digits=self.get_digits(dp='Account'))
|
||||
res['price_unit'] = self.formatLang(entry.price_unit, digits=self.get_digits(dp='Account'))
|
||||
res['discount'] = self.formatLang(entry.discount, digits=self.get_digits(dp='Account'))
|
||||
res['price_subtotal'] = self.formatLang(entry.price_subtotal, digits=self.get_digits(dp='Account'))
|
||||
sub_total[i] = entry.price_subtotal
|
||||
i = i + 1
|
||||
res['note'] = entry.note
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['type'] = entry.state
|
||||
|
||||
if entry.uos_id.id==False:
|
||||
res['uos']=''
|
||||
if entry.uos_id.id == False:
|
||||
res['uos'] = ''
|
||||
else:
|
||||
uos_name = self.pool.get('product.uom').read(self.cr, self.uid, entry.uos_id.id, ['name'], self.context.copy())
|
||||
res['uos'] = uos_name['name']
|
||||
else:
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['type'] = entry.state
|
||||
res['note'] = entry.note
|
||||
res['uos'] = ''
|
||||
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['type']=entry.state
|
||||
res['note']=entry.note
|
||||
res['uos']=''
|
||||
|
||||
if entry.state=='subtotal':
|
||||
res['name']=entry.name
|
||||
sum=0
|
||||
sum_id=0
|
||||
if sum_flag[j]==-1:
|
||||
temp=1
|
||||
if entry.state == 'subtotal':
|
||||
res['name'] = entry.name
|
||||
sum = 0
|
||||
sum_id = 0
|
||||
if sum_flag[j] == -1:
|
||||
temp = 1
|
||||
else:
|
||||
temp=sum_flag[j]
|
||||
temp = sum_flag[j]
|
||||
|
||||
for sum_id in range(temp,len(sub_total)+1):
|
||||
sum+=sub_total[sum_id]
|
||||
sum_flag[j+1]= sum_id +1
|
||||
for sum_id in range(temp, len(sub_total)+1):
|
||||
sum += sub_total[sum_id]
|
||||
sum_flag[j+1] = sum_id +1
|
||||
|
||||
j=j+1
|
||||
res['price_subtotal']="%.2f"%(sum)
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['uos']=''
|
||||
elif entry.state=='title':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='text':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='line':
|
||||
res['quantity']='_______________'
|
||||
res['price_unit']='______________'
|
||||
res['discount']='____________'
|
||||
res['tax_types']='____________________'
|
||||
res['uos']='_____'
|
||||
res['name']='_______________________________________________'
|
||||
res['price_subtotal']='____________'
|
||||
res['currency']='____'
|
||||
elif entry.state=='break':
|
||||
res['type']=entry.state
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
j = j + 1
|
||||
res['price_subtotal'] = "%.2f" % (sum)
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['uos'] = ''
|
||||
elif entry.state == 'title':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'text':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'line':
|
||||
res['quantity'] = '_______________'
|
||||
res['price_unit'] = '______________'
|
||||
res['discount'] = '____________'
|
||||
res['tax_types'] = '____________________'
|
||||
res['uos'] = '_____'
|
||||
res['name'] = '_______________________________________________'
|
||||
res['price_subtotal'] = '____________'
|
||||
res['currency'] = '____'
|
||||
elif entry.state == 'break':
|
||||
res['type'] = entry.state
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
else:
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
|
||||
result.append(res)
|
||||
return result
|
||||
|
||||
@@ -376,7 +376,7 @@
|
||||
<para style="terp_default_9">Net Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -391,7 +391,7 @@
|
||||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -406,7 +406,7 @@
|
||||
<para style="terp_default_Bold_9">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -445,10 +445,10 @@
|
||||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">
|
||||
@@ -485,4 +485,4 @@
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
||||
@@ -24,6 +24,7 @@ import time
|
||||
from report import report_sxw
|
||||
import pooler
|
||||
|
||||
|
||||
class account_invoice_with_message(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(account_invoice_with_message, self).__init__(cr, uid, name, context=context)
|
||||
@@ -40,115 +41,113 @@ class account_invoice_with_message(report_sxw.rml_parse):
|
||||
msg = account_msg_data.msg
|
||||
return msg
|
||||
|
||||
|
||||
def invoice_lines(self,invoice):
|
||||
result =[]
|
||||
sub_total={}
|
||||
info=[]
|
||||
invoice_list=[]
|
||||
res={}
|
||||
list_in_seq={}
|
||||
def invoice_lines(self, invoice):
|
||||
result = []
|
||||
sub_total = {}
|
||||
info = []
|
||||
invoice_list = []
|
||||
res = {}
|
||||
list_in_seq = {}
|
||||
ids = self.pool.get('account.invoice.line').search(self.cr, self.uid, [('invoice_id', '=', invoice.id)])
|
||||
ids.sort()
|
||||
for id in range(0,len(ids)):
|
||||
info = self.pool.get('account.invoice.line').browse(self.cr, self.uid,ids[id], self.context.copy())
|
||||
list_in_seq[info]=info.sequence
|
||||
i=1
|
||||
j=0
|
||||
final=sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
|
||||
invoice_list=[x[0] for x in final]
|
||||
sum_flag={}
|
||||
sum_flag[j]=-1
|
||||
for id in range(0, len(ids)):
|
||||
info = self.pool.get('account.invoice.line').browse(self.cr, self.uid, ids[id], self.context.copy())
|
||||
list_in_seq[info] = info.sequence
|
||||
i = 1
|
||||
j = 0
|
||||
final = sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
|
||||
invoice_list = [x[0] for x in final]
|
||||
sum_flag = {}
|
||||
sum_flag[j] = -1
|
||||
for entry in invoice_list:
|
||||
res={}
|
||||
res = {}
|
||||
|
||||
if entry.state=='article':
|
||||
if entry.state == 'article':
|
||||
self.cr.execute('select tax_id from account_invoice_line_tax where invoice_line_id=%s', (entry.id,))
|
||||
tax_ids=self.cr.fetchall()
|
||||
tax_ids = self.cr.fetchall()
|
||||
|
||||
if tax_ids==[]:
|
||||
res['tax_types']=''
|
||||
if tax_ids == []:
|
||||
res['tax_types'] = ''
|
||||
else:
|
||||
tax_names_dict={}
|
||||
for item in range(0,len(tax_ids)) :
|
||||
tax_names_dict = {}
|
||||
for item in range(0, len(tax_ids)):
|
||||
self.cr.execute('select name from account_tax where id=%s', (tax_ids[item][0],))
|
||||
type=self.cr.fetchone()
|
||||
tax_names_dict[item] =type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0,len(tax_names_dict))])
|
||||
res['tax_types']=tax_names
|
||||
res['name']=entry.name
|
||||
res['quantity']="%.2f"%(entry.quantity)
|
||||
res['price_unit']="%.2f"%(entry.price_unit)
|
||||
res['discount']="%.2f"%(entry.discount)
|
||||
res['price_subtotal']="%.2f"%(entry.price_subtotal)
|
||||
sub_total[i]=entry.price_subtotal
|
||||
i=i+1
|
||||
res['note']=entry.note
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['type']=entry.state
|
||||
type = self.cr.fetchone()
|
||||
tax_names_dict[item] = type[0]
|
||||
tax_names = ','.join([tax_names_dict[x] for x in range(0, len(tax_names_dict))])
|
||||
res['tax_types'] = tax_names
|
||||
res['name'] = entry.name
|
||||
res['quantity'] = self.formatLang(entry.quantity, digits=self.get_digits(dp='Account'))
|
||||
res['price_unit'] = self.formatLang(entry.price_unit, digits=self.get_digits(dp='Account'))
|
||||
res['discount'] = self.formatLang(entry.discount, digits=self.get_digits(dp='Account'))
|
||||
res['price_subtotal'] = self.formatLang(entry.price_subtotal, digits=self.get_digits(dp='Account'))
|
||||
sub_total[i] = entry.price_subtotal
|
||||
i = i + 1
|
||||
res['note'] = entry.note
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['type'] = entry.state
|
||||
|
||||
if entry.uos_id.id==False:
|
||||
res['uos']=''
|
||||
if entry.uos_id.id == False:
|
||||
res['uos'] = ''
|
||||
else:
|
||||
uos_name = self.pool.get('product.uom').read(self.cr, self.uid, entry.uos_id.id, ['name'], self.context.copy())
|
||||
res['uos']=uos_name['name']
|
||||
res['uos'] = uos_name['name']
|
||||
else:
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['type'] = entry.state
|
||||
res['note'] = entry.note
|
||||
res['uos'] = ''
|
||||
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['type']=entry.state
|
||||
res['note']=entry.note
|
||||
res['uos']=''
|
||||
|
||||
if entry.state=='subtotal':
|
||||
res['name']=entry.name
|
||||
sum=0
|
||||
sum_id=0
|
||||
if sum_flag[j]==-1:
|
||||
temp=1
|
||||
if entry.state == 'subtotal':
|
||||
res['name'] = entry.name
|
||||
sum = 0
|
||||
sum_id = 0
|
||||
if sum_flag[j] == -1:
|
||||
temp = 1
|
||||
else:
|
||||
temp=sum_flag[j]
|
||||
temp = sum_flag[j]
|
||||
|
||||
for sum_id in range(temp,len(sub_total)+1):
|
||||
sum+=sub_total[sum_id]
|
||||
sum_flag[j+1]= sum_id +1
|
||||
for sum_id in range(temp, len(sub_total)+1):
|
||||
sum += sub_total[sum_id]
|
||||
sum_flag[j+1] = sum_id +1
|
||||
|
||||
j=j+1
|
||||
res['price_subtotal']="%.2f"%(sum)
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['quantity']=''
|
||||
res['price_unit']=''
|
||||
res['discount']=''
|
||||
res['tax_types']=''
|
||||
res['uos']=''
|
||||
elif entry.state=='title':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='text':
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
elif entry.state=='line':
|
||||
res['quantity']='_______________'
|
||||
res['price_unit']='______________'
|
||||
res['discount']='____________'
|
||||
res['tax_types']='____________________'
|
||||
res['uos']='_____'
|
||||
res['name']='_______________________________________________'
|
||||
res['price_subtotal']='____________'
|
||||
res['currency']='____'
|
||||
elif entry.state=='break':
|
||||
res['type']=entry.state
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=''
|
||||
j = j + 1
|
||||
res['price_subtotal'] = "%.2f" % (sum)
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
res['quantity'] = ''
|
||||
res['price_unit'] = ''
|
||||
res['discount'] = ''
|
||||
res['tax_types'] = ''
|
||||
res['uos'] = ''
|
||||
elif entry.state == 'title':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'text':
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
elif entry.state == 'line':
|
||||
res['quantity'] = '_______________'
|
||||
res['price_unit'] = '______________'
|
||||
res['discount'] = '____________'
|
||||
res['tax_types'] = '____________________'
|
||||
res['uos'] = '_____'
|
||||
res['name'] = '_______________________________________________'
|
||||
res['price_subtotal'] = '____________'
|
||||
res['currency'] = '____'
|
||||
elif entry.state == 'break':
|
||||
res['type'] = entry.state
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = ''
|
||||
else:
|
||||
res['name']=entry.name
|
||||
res['price_subtotal']=''
|
||||
res['currency']=invoice.currency_id.symbol
|
||||
res['name'] = entry.name
|
||||
res['price_subtotal'] = ''
|
||||
res['currency'] = invoice.currency_id.symbol
|
||||
|
||||
result.append(res)
|
||||
return result
|
||||
|
||||
@@ -380,7 +380,7 @@
|
||||
<para style="terp_default_9">Net Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -395,7 +395,7 @@
|
||||
<para style="terp_default_9">Taxes:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -410,7 +410,7 @@
|
||||
<para style="terp_default_Bold_9">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total) ]] [[ o.currency_id.symbol ]]</para>
|
||||
<para style="terp_default_Right_9_Bold">[[ formatLang(o.amount_total, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -449,10 +449,10 @@
|
||||
<para style="terp_default_8">[[ t.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ formatLang(t.base, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]]</para>
|
||||
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_8">
|
||||
@@ -500,4 +500,4 @@
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
||||
</document>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<field name="acc_number">00987654321</field>
|
||||
<field name="partner_id" ref="base.res_partner_agrolait"></field>
|
||||
<field name="state">bank</field>
|
||||
<field name="bank" ref="base.res_bank_1"/>
|
||||
</record>
|
||||
<record id="payment_mode_1" model="payment.mode">
|
||||
<field name="name">Direct Payment</field>
|
||||
|
||||
@@ -7,13 +7,13 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-08-02 22:08+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 16:08+0000\n"
|
||||
"Last-Translator: Pedro_Maschio <pedro.bicudo@tgtconsult.com.br>\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-09-29 05:07+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_payment
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
partner_id: base.res_partner_9
|
||||
sequence: 0.0
|
||||
state: bank
|
||||
bank: base.res_bank_1
|
||||
|
||||
-
|
||||
I created a new Payment Mode
|
||||
|
||||
@@ -114,7 +114,7 @@ class account_payment_populate_statement(osv.osv_memory):
|
||||
'voucher_id': voucher_id,
|
||||
}, context=context)
|
||||
|
||||
line_obj.write(cr, uid, [line.id], {'bank_statement_line_id': st_line_id})
|
||||
line_obj.write(cr, uid, [line.id], {'bank_statement_line_id': st_line_id})
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
account_payment_populate_statement()
|
||||
|
||||
@@ -25,6 +25,7 @@ import operator
|
||||
from osv import fields, osv
|
||||
import decimal_precision as dp
|
||||
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = 'account.analytic.account'
|
||||
_description = 'Analytic Account'
|
||||
@@ -272,7 +273,7 @@ class account_analytic_line(osv.osv):
|
||||
_columns = {
|
||||
'name' : fields.char('Description', size=256, required=True),
|
||||
'date' : fields.date('Date', required=True, select=1),
|
||||
'amount' : fields.float('Amount', required=True, help='Calculated by multiplying the quantity and the price given in the Product\'s cost price. Always expressed in the company main currency.'),
|
||||
'amount' : fields.float('Amount', required=True, help='Calculated by multiplying the quantity and the price given in the Product\'s cost price. Always expressed in the company main currency.', digits_compute=dp.get_precision('Account')),
|
||||
'unit_amount' : fields.float('Quantity', help='Specifies the amount of quantity to count.'),
|
||||
'account_id' : fields.many2one('account.analytic.account', 'Analytic Account', required=True, ondelete='cascade', select=True),
|
||||
'user_id' : fields.many2one('res.users', 'User'),
|
||||
|
||||
@@ -99,7 +99,7 @@ class hr_analytic_timesheet(osv.osv):
|
||||
(r.product_id.name, r.product_id.id,))
|
||||
# Compute based on pricetype
|
||||
amount_unit = self.on_change_unit_amount(cr, uid, ids,
|
||||
r.product_id.id, unit_amount, r.product_id.uom_id.id)['value']['amount']
|
||||
r.product_id.id, unit_amount, False, r.product_id.uom_id.id)['value']['amount']
|
||||
|
||||
amount = unit_amount * amount_unit
|
||||
res ['value']['amount']= - round(amount, 2)
|
||||
@@ -134,7 +134,7 @@ class hr_analytic_timesheet(osv.osv):
|
||||
(r.product_id.name, r.product_id.id,))
|
||||
# Compute based on pricetype
|
||||
amount_unit = self.on_change_unit_amount(cr, uid, ids,
|
||||
r.product_id.id, unit_amount, r.product_id.uom_id.id)['value']['amount']
|
||||
r.product_id.id, unit_amount, False, r.product_id.uom_id.id)['value']['amount']
|
||||
|
||||
amount = unit_amount * amount_unit
|
||||
res ['value']['amount']= - round(amount, 2)
|
||||
|
||||
@@ -1065,7 +1065,7 @@ class calendar_event(osv.osv):
|
||||
'rule_type': rrule_type,
|
||||
'id': id,
|
||||
})
|
||||
cr.execute(qry, val) # Hopefully psycopg2 works with dicts. But, FIXME
|
||||
cr.execute(qry % val)
|
||||
return True
|
||||
|
||||
def _get_rulestring(self, cr, uid, ids, name, arg, context=None):
|
||||
|
||||
@@ -163,7 +163,8 @@
|
||||
<!-- Invitation menu -->
|
||||
|
||||
<menuitem id="menu_attendee_invitations"
|
||||
name="Event Invitations" parent="base.menu_calendar_configuration"
|
||||
parent="base.menu_calendar_configuration"
|
||||
groups="base.group_extended"
|
||||
sequence="10" action="action_view_attendee_form" />
|
||||
|
||||
<!-- ALARM FORM VIEW-->
|
||||
@@ -496,6 +497,7 @@
|
||||
|
||||
<menuitem id="menu_events"
|
||||
name="Events" parent="base.menu_calendar_configuration"
|
||||
groups="base.group_extended"
|
||||
sequence="5" action="action_view_event" />
|
||||
|
||||
</data>
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-19 12:50+0000\n"
|
||||
"PO-Revision-Date: 2010-10-03 20:01+0000\n"
|
||||
"Last-Translator: Wouter Schrijvers <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-04 06:49+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_calendar
|
||||
|
||||
@@ -60,7 +60,6 @@
|
||||
-->
|
||||
|
||||
<record id="process_transition_contacttofunction0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Contact to function"""" name="name"/>
|
||||
<field eval=""""Defines contacts and functions."""" name="note"/>
|
||||
@@ -69,7 +68,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_functiontoaddress0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Function to address"""" name="name"/>
|
||||
<field eval=""""Define functions and address."""" name="note"/>
|
||||
@@ -78,7 +76,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_partnertoaddress0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Partner to address"""" name="name"/>
|
||||
<field eval=""""Define partners and their addresses."""" name="note"/>
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
<data>
|
||||
|
||||
<!--
|
||||
Default bank account description
|
||||
-->
|
||||
Default bank account description
|
||||
-->
|
||||
<record id="bank_iban" model="res.partner.bank.type">
|
||||
<field name="name">IBAN Account</field>
|
||||
<field name="code">iban</field>
|
||||
|
||||
@@ -7,13 +7,13 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-12-07 16:48+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 16:07+0000\n"
|
||||
"Last-Translator: Pedro_Maschio <pedro.bicudo@tgtconsult.com.br>\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-09-29 05:11+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: board
|
||||
@@ -21,8 +21,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
"O nome do objeto precisa iniciar com x_ e não conter nenhum caracter "
|
||||
"especial!"
|
||||
"O nome do objeto deve começar com x_ e não conter caracteres especiais!"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.model,name:board.model_board_board
|
||||
@@ -110,7 +109,7 @@ msgstr "Criar menu para painel"
|
||||
#. module: board
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Invalido XML para Arquitetura da View"
|
||||
msgstr "XML inválido para Arquitetura da View!"
|
||||
|
||||
#. module: board
|
||||
#: wizard_field:board.board.menu.create,init,menu_parent_id:0
|
||||
|
||||
@@ -716,7 +716,7 @@ class basic_calendar_line(osv.osv):
|
||||
"""
|
||||
|
||||
cr.execute("SELECT COUNT(id) FROM basic_calendar_lines \
|
||||
WHERE name='%s' AND calendar_id=%s",
|
||||
WHERE name=%s AND calendar_id=%s",
|
||||
(vals.get('name'), vals.get('calendar_id')))
|
||||
res = cr.fetchone()
|
||||
if res:
|
||||
|
||||
@@ -119,7 +119,6 @@ Create dashboard for CRM that includes:
|
||||
'crm_meeting_demo.xml',
|
||||
'crm_opportunity_demo.xml',
|
||||
'crm_phonecall_demo.xml',
|
||||
'board_crm_demo.xml',
|
||||
],
|
||||
'test': [
|
||||
'test/test_crm_lead.yml',
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<!--
|
||||
Administrator shortcut
|
||||
Demo user startup menu
|
||||
-->
|
||||
<record model="res.users" id="base.user_root">
|
||||
<field name="action_id" ref="open_board_crm"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -33,9 +33,10 @@
|
||||
</record>
|
||||
|
||||
<record model="crm.case.stage" id="stage_lead5">
|
||||
<field name="name">Win</field>
|
||||
<field name="name">Won</field>
|
||||
<field eval="'100'" name="probability"/>
|
||||
<field eval="'5'" name="sequence"/>
|
||||
<field eval="1" name="on_change"/>
|
||||
<field name="object_id" search="[('model','=','crm.lead')]" model="ir.model"/>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -315,11 +315,11 @@
|
||||
</field>
|
||||
<field name="section_id" default="context.get('section_id', False)" widget="selection"
|
||||
context="{'invisible_section': False}">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
help="My Sales Team(s)"/>
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[]"
|
||||
help="Show Sales Team"/>
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
<field name="context">{'object_id':'crm.meeting'}</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="crm_meeting_categ_action" name="Categories of Meeting"
|
||||
<menuitem action="crm_meeting_categ_action"
|
||||
groups="base.group_extended"
|
||||
id="menu_crm_case_meeting-act" parent="base.menu_calendar_configuration" sequence="1"/>
|
||||
|
||||
<!-- CRM Meetings Form View -->
|
||||
@@ -311,7 +312,7 @@
|
||||
<separator orientation="vertical"/>
|
||||
<field name="partner_id" select="1" />
|
||||
<field name="section_id" select="1" widget="selection">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
|
||||
@@ -85,10 +85,11 @@ class crm_opportunity(osv.osv):
|
||||
"""
|
||||
res = super(crm_opportunity, self).case_close(cr, uid, ids, args)
|
||||
stage_id = super(crm_opportunity, self).stage_next(cr, uid, ids, context={'force_domain': [('probability', '=', 0)]})
|
||||
if not stage_id:
|
||||
raise osv.except_osv(_('Warning !'), _('There is no stage for lost opportunities defined for this Sale Team.'))
|
||||
value = self.onchange_stage_id(cr, uid, ids, stage_id, context={})['value']
|
||||
value.update({'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), 'stage_id': stage_id})
|
||||
value = {}
|
||||
if stage_id:
|
||||
value = self.onchange_stage_id(cr, uid, ids, stage_id, context={}).get('value', {})
|
||||
value['stage_id'] = stage_id
|
||||
value.update({'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
|
||||
|
||||
res = self.write(cr, uid, ids, value)
|
||||
for (id, name) in self.name_get(cr, uid, ids):
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
<label string="Stage:" align="1.0"/>
|
||||
<group colspan="1" col="4">
|
||||
<field name="stage_id" nolabel="1"
|
||||
widget="selection"
|
||||
on_change="onchange_stage_id(stage_id)"
|
||||
domain="[('object_id.model', '=', 'crm.lead')]"
|
||||
readonly="1" />
|
||||
domain="[('object_id.model', '=', 'crm.lead')]"/>
|
||||
<button name="stage_previous"
|
||||
states="open,pending" type="object"
|
||||
icon="gtk-go-back" string="" />
|
||||
<button name="stage_next" states="open,pending"
|
||||
type="object" icon="gtk-go-forward" string="" />
|
||||
states="draft,open,pending" type="object"
|
||||
icon="gtk-go-back" string="" />
|
||||
<button name="stage_next" states="draft,open,pending"
|
||||
type="object" icon="gtk-go-forward" string="" />
|
||||
</group>
|
||||
<field name="user_id"/>
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
groups="base.group_extended"
|
||||
icon="gtk-go-up" />
|
||||
<button name="case_cancel" string="Cancel"
|
||||
states="draft,open,pending" type="object"
|
||||
states="draft" type="object"
|
||||
icon="gtk-close" />
|
||||
<button name="case_mark_lost" string="Mark Lost"
|
||||
states="open,pending" type="object"
|
||||
@@ -283,14 +283,6 @@
|
||||
string="Pending" help="Pending Opportunities"
|
||||
domain="[('state','=','pending')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today" string="Today"
|
||||
domain="[('create_date','<', time.strftime('%%Y-%%m-%%d 23:59:59')), ('create_date','>=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
|
||||
help="Todays' Opportunities" />
|
||||
<filter icon="terp-go-week" string="7 Days"
|
||||
help="Opportunities created during last 7 days"
|
||||
domain="[('create_date','<', time.strftime('%%Y-%%m-%%d 23:59:59')),('create_date','>=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d 00:00:00'))]"
|
||||
/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" string="Opportunity"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id">
|
||||
@@ -302,11 +294,11 @@
|
||||
default="context.get('section_id', False)"
|
||||
context="{'invisible_section': False}"
|
||||
widget="selection">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
context="{'invisible_section': False}"
|
||||
help="My Sales Team(s)" />
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[]"
|
||||
help="Show Sales Team"/>
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
<field name="partner_phone"/>
|
||||
<field name="user_id"/>
|
||||
<field name="categ_id" string="Type"/>
|
||||
<field name="create_date" invisible="1"/>
|
||||
<button string="Opportunity"
|
||||
name="%(phonecall2opportunity_act)d"
|
||||
states="draft,open,pending"
|
||||
@@ -271,7 +272,7 @@
|
||||
</field>
|
||||
<field name="section_id"
|
||||
select="1" widget="selection" string="Sales Team">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
|
||||
@@ -202,6 +202,7 @@
|
||||
|
||||
<menuitem action="crm_case_resource_type_act"
|
||||
id="menu_crm_case_resource_type_act" sequence="4"
|
||||
groups="base.group_extended"
|
||||
parent="base.menu_sale_config_sales" />
|
||||
|
||||
<record id="crm_case_section_act_tree" model="ir.actions.act_window">
|
||||
|
||||
+361
-379
File diff suppressed because it is too large
Load Diff
@@ -57,7 +57,6 @@
|
||||
-->
|
||||
|
||||
<record id="process_transition_leadopportunity0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Prospect Opportunity"""" name="name"/>
|
||||
<field eval=""""Creating business opportunities from Leads"""" name="note"/>
|
||||
@@ -66,7 +65,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_leadpartner0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Prospect Partner"""" name="name"/>
|
||||
<field eval=""""Prospect is converting to business partner"""" name="note"/>
|
||||
@@ -75,7 +73,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_opportunitymeeting0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Opportunity Meeting"""" name="name"/>
|
||||
<field eval=""""Normal or phone meeting for opportunity"""" name="note"/>
|
||||
|
||||
@@ -37,41 +37,6 @@ class crm_lead_report(osv.osv):
|
||||
_auto = False
|
||||
_description = "CRM Lead Report"
|
||||
|
||||
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
|
||||
|
||||
""" @param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of case and section Data’s IDs
|
||||
@param context: A standard dictionary for contextual values """
|
||||
|
||||
res = {}
|
||||
avg_ans = 0.0
|
||||
|
||||
for case in self.browse(cr, uid, ids, context):
|
||||
if field_name != 'avg_answers':
|
||||
state = field_name[5:]
|
||||
cr.execute("select count(id) from crm_lead where \
|
||||
section_id =%s and state='%s'"%(case.section_id.id, state))
|
||||
state_cases = cr.fetchone()[0]
|
||||
perc_state = (state_cases / float(case.nbr)) * 100
|
||||
|
||||
res[case.id] = perc_state
|
||||
else:
|
||||
model_name = self._name.split('report.')
|
||||
if len(model_name) < 2:
|
||||
res[case.id] = 0.0
|
||||
else:
|
||||
model_name = model_name[1]
|
||||
|
||||
cr.execute("select count(id) from crm_case_log l, ir_model m \
|
||||
where l.model_id=m.id and m.model = '%s'" , model_name)
|
||||
logs = cr.fetchone()[0]
|
||||
|
||||
avg_ans = logs / case.nbr
|
||||
res[case.id] = avg_ans
|
||||
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Year', size=64, required=False, readonly=True),
|
||||
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
||||
@@ -80,9 +45,6 @@ class crm_lead_report(osv.osv):
|
||||
'channel_id':fields.many2one('res.partner.canal', 'Channel', readonly=True),
|
||||
'type_id':fields.many2one('crm.case.resource.type', 'Campaign', readonly=True),
|
||||
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
|
||||
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
|
||||
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
|
||||
'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
|
||||
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
||||
('03', 'March'), ('04', 'April'),\
|
||||
('05', 'May'), ('06', 'June'), \
|
||||
@@ -145,16 +107,9 @@ class crm_lead_report(osv.osv):
|
||||
c.partner_id,
|
||||
c.country_id,
|
||||
c.planned_revenue,
|
||||
c.planned_revenue*(c.probability/100) as probable_revenue,
|
||||
c.planned_revenue*(c.probability/100) as probable_revenue,
|
||||
1 as nbr,
|
||||
0 as avg_answers,
|
||||
0.0 as perc_done,
|
||||
0.0 as perc_cancel,
|
||||
<<<<<<< TREE
|
||||
(select count(id) from mailgate_message where res_id=c.id and model='crm.lead') as email,
|
||||
=======
|
||||
(SELECT count(id) FROM mailgate_message WHERE model='crm.lead' AND res_id=c.id AND history=True) AS email,
|
||||
>>>>>>> MERGE-SOURCE
|
||||
date_trunc('day',c.create_date) as create_date,
|
||||
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
|
||||
abs(extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24)) as delay_expected,
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
<field name="email" sum="# Mails"/>
|
||||
<field name="delay_open"/>
|
||||
<field name="delay_close"/>
|
||||
<field name="avg_answers"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -99,10 +98,10 @@
|
||||
<field name="section_id"
|
||||
default="context.get('section_id', False)"
|
||||
context="{'invisible_section': False}">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My team" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
<field name="user_id" string="Salesman">
|
||||
<filter icon="terp-personal" string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" />
|
||||
@@ -128,7 +127,7 @@
|
||||
<filter string="Salesman" name="user" icon="terp-personal"
|
||||
domain="[]" context="{'group_by':'user_id'}" />
|
||||
<filter string="Sales Team" icon="terp-personal+"
|
||||
domain="[]"
|
||||
domain="[]"
|
||||
context="{'group_by':'section_id'}" />
|
||||
<filter string="Partner" icon="terp-partner" context="{'group_by':'partner_id'}" />
|
||||
<filter string="Country" icon="terp-go-home" context="{'group_by':'country_id'}" />
|
||||
|
||||
@@ -38,43 +38,6 @@ class crm_phonecall_report(osv.osv):
|
||||
_name = "crm.phonecall.report"
|
||||
_description = "Phone calls by user and section"
|
||||
_auto = False
|
||||
|
||||
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
|
||||
|
||||
""" @param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of case and section Data’s IDs
|
||||
@param context: A standard dictionary for contextual values """
|
||||
|
||||
res = {}
|
||||
state_perc = 0.0
|
||||
avg_ans = 0.0
|
||||
|
||||
for case in self.browse(cr, uid, ids, context):
|
||||
if field_name != 'avg_answers':
|
||||
state = field_name[5:]
|
||||
cr.execute("select count(*) from crm_lead where \
|
||||
section_id =%s and state='%s'"%(case.section_id.id, state))
|
||||
state_cases = cr.fetchone()[0]
|
||||
perc_state = (state_cases / float(case.nbr)) * 100
|
||||
|
||||
res[case.id] = perc_state
|
||||
else:
|
||||
model_name = self._name.split('report.')
|
||||
if len(model_name) < 2:
|
||||
res[case.id] = 0.0
|
||||
else:
|
||||
model_name = model_name[1]
|
||||
|
||||
cr.execute("select count(*) from crm_case_log l, ir_model m \
|
||||
where l.model_id=m.id and m.model = '%s'" , model_name)
|
||||
logs = cr.fetchone()[0]
|
||||
|
||||
avg_ans = logs / case.nbr
|
||||
res[case.id] = avg_ans
|
||||
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Year', size=64, required=False, readonly=True),
|
||||
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
||||
@@ -82,9 +45,6 @@ class crm_phonecall_report(osv.osv):
|
||||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
|
||||
'nbr': fields.integer('# of Cases', readonly=True),
|
||||
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
|
||||
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
|
||||
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
|
||||
'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
|
||||
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
||||
('03', 'March'), ('04', 'April'),\
|
||||
('05', 'May'), ('06', 'June'), \
|
||||
@@ -131,40 +91,11 @@ class crm_phonecall_report(osv.osv):
|
||||
c.company_id,
|
||||
c.priority,
|
||||
1 as nbr,
|
||||
0 as avg_answers,
|
||||
0.0 as perc_done,
|
||||
0.0 as perc_cancel,
|
||||
date_trunc('day',c.create_date) as create_date,
|
||||
<<<<<<< TREE
|
||||
avg(extract('epoch' from (c.date_closed-c.create_date)))/(3600*24) as delay_close,
|
||||
avg(extract('epoch' from (c.date_open-c.create_date)))/(3600*24) as delay_open
|
||||
|
||||
=======
|
||||
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
|
||||
extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open
|
||||
>>>>>>> MERGE-SOURCE
|
||||
from
|
||||
crm_phonecall c
|
||||
<<<<<<< TREE
|
||||
where c.categ_id in (select res_id from ir_model_data where (name = 'categ_phone1' or name ='categ_phone2'))
|
||||
group by
|
||||
to_char(c.create_date, 'YYYY'),
|
||||
to_char(c.create_date, 'MM'),\
|
||||
c.state,
|
||||
c.user_id,
|
||||
c.section_id,
|
||||
c.categ_id,
|
||||
c.partner_id,
|
||||
c.company_id,
|
||||
c.duration,
|
||||
c.priority,
|
||||
to_char(c.date_open, 'YYYY-MM-DD'),
|
||||
to_char(c.date_closed, 'YYYY-mm-dd'),
|
||||
c.stage_id,
|
||||
to_char(c.create_date, 'YYYY-MM-DD'),
|
||||
c.create_date
|
||||
=======
|
||||
>>>>>>> MERGE-SOURCE
|
||||
)""")
|
||||
|
||||
crm_phonecall_report()
|
||||
|
||||
@@ -100,10 +100,10 @@
|
||||
<field name="section_id" string="Sales Team"
|
||||
default="context.get('section_id', False)"
|
||||
context="{'invisible_section': False}">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My team" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
<field name="user_id" string="Salesman" select="1">
|
||||
<filter icon="terp-personal" string="My Case(s)" help="My Case(s)" domain="[('user_id','=',uid)]" />
|
||||
|
||||
@@ -275,9 +275,9 @@
|
||||
</field>
|
||||
<field name="section_id" select="1"
|
||||
widget="selection">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
help="My section" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
|
||||
@@ -105,10 +105,10 @@
|
||||
default="context.get('section_id', False)"
|
||||
context="{'invisible_section': False}">
|
||||
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My team" />
|
||||
help="My Sales Team(s)" />
|
||||
|
||||
</field>
|
||||
<field name="company_id">
|
||||
|
||||
@@ -273,9 +273,9 @@
|
||||
help="Unassigned" />
|
||||
</field>
|
||||
<field name="section_id" select="1" widget="selection" string="Sales Team">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
help="My section" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
|
||||
@@ -99,10 +99,10 @@
|
||||
<field name="section_id" string="Sales Team"
|
||||
default="context.get('section_id', False)"
|
||||
context="{'invisible_section': False}">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My team" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
<field name="company_id">
|
||||
<filter icon="terp-go-home"
|
||||
|
||||
@@ -248,9 +248,9 @@
|
||||
<field name="partner_id" />
|
||||
<field name="user_id" select="1" widget="selection"/>
|
||||
<field name="section_id" select="1" widget="selection" string="Sales Team">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
domain="['|', ('section_id', '=', context.get('section_id')), '|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
|
||||
help="My section" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
|
||||
@@ -96,10 +96,10 @@
|
||||
<field name="section_id" string="Sales Team"
|
||||
default="context.get('section_id', False)"
|
||||
context="{'invisible_section': False}">
|
||||
<filter icon="terp-personal+"
|
||||
<filter icon="terp-personal+" groups="base.group_extended"
|
||||
context="{'invisible_section': False}"
|
||||
domain="[('section_id.user_id','=',uid)]"
|
||||
help="My team" />
|
||||
help="My Sales Team(s)" />
|
||||
</field>
|
||||
<field name="company_id">
|
||||
<filter icon="terp-go-home"
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-20 05:24+0000\n"
|
||||
"PO-Revision-Date: 2010-10-03 20:06+0000\n"
|
||||
"Last-Translator: Wouter Schrijvers <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-04 06:52+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-04 04:57+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: decimal_precision
|
||||
|
||||
@@ -255,10 +255,11 @@ class document_file(osv.osv):
|
||||
storage_id = par.storage_id
|
||||
break
|
||||
par = par.parent_id
|
||||
assert storage_id, "Strange, found file #%s w/o storage!" % f.id
|
||||
r = stor.prepare_unlink(cr, uid, storage_id, f)
|
||||
if r:
|
||||
unres.append(r)
|
||||
#assert storage_id, "Strange, found file #%s w/o storage!" % f.id #TOCHECK: after run yml, it's fail
|
||||
if storage_id:
|
||||
r = stor.prepare_unlink(cr, uid, storage_id, f)
|
||||
if r:
|
||||
unres.append(r)
|
||||
res = super(document_file, self).unlink(cr, uid, ids, context)
|
||||
stor.do_unlink(cr, uid, unres)
|
||||
return res
|
||||
|
||||
@@ -31,7 +31,7 @@ def get_plain_ftp(timeout=10.0):
|
||||
ftp = FTP()
|
||||
host = config.get('ftp_server_host', '127.0.0.1')
|
||||
port = config.get('ftp_server_port', '8021')
|
||||
ftp.connect(host, port, timeout=timeout)
|
||||
ftp.connect(host, port,timeout)
|
||||
return ftp
|
||||
|
||||
def get_ftp_login(cr, uid, ormobj):
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<attribute name="string">Configure FTP Server</attribute>
|
||||
</separator>
|
||||
<xpath expr="//label[@string='description']" position="attributes">
|
||||
<attribute name="string">Choose the address for the Document Management System's FTP server.</attribute>
|
||||
<attribute name="string">Indicate the network address on which your OpenERP server should be reachable for end-users. This depends on your network topology and configuration, and will only affect the links displayed to the users. The format is HOST:PORT and the default host (localhost) is only suitable for access from the server machine itself..</attribute>
|
||||
</xpath>
|
||||
<xpath expr='//separator[@string="vsep"]' position='attributes'>
|
||||
<attribute name='rowspan'>12</attribute>
|
||||
|
||||
@@ -331,38 +331,34 @@ This is useful for CRM leads for example"),
|
||||
default.update({'name':new_name})
|
||||
return super(email_template, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def compute_pl(self,
|
||||
model_object_field,
|
||||
sub_model_object_field,
|
||||
null_value, template_language='mako'):
|
||||
def build_expression(self, field_name, sub_field_name, null_value, template_language='mako'):
|
||||
"""
|
||||
Returns the expression based on data provided
|
||||
@param model_object_field: First level field
|
||||
@param sub_model_object_field: Second level drilled down field (M2O)
|
||||
@param null_value: What has to be returned if the value is empty
|
||||
@param template_language: The language used for templating
|
||||
Returns a template expression based on data provided
|
||||
@param field_name: field name
|
||||
@param sub_field_name: sub field name (M2O)
|
||||
@param null_value: default value if the target value is empty
|
||||
@param template_language: name of template engine
|
||||
@return: computed expression
|
||||
"""
|
||||
#Configure for MAKO
|
||||
copy_val = ''
|
||||
|
||||
expression = ''
|
||||
if template_language == 'mako':
|
||||
if model_object_field:
|
||||
copy_val = "${object." + model_object_field
|
||||
if sub_model_object_field:
|
||||
copy_val += "." + sub_model_object_field
|
||||
if null_value:
|
||||
copy_val += " or '" + null_value + "'"
|
||||
if model_object_field:
|
||||
copy_val += "}"
|
||||
if field_name:
|
||||
expression = "${object." + field_name
|
||||
if sub_field_name:
|
||||
expression += "." + sub_field_name
|
||||
if null_value:
|
||||
expression += " or '''%s'''" % null_value
|
||||
expression += "}"
|
||||
elif template_language == 'django':
|
||||
if model_object_field:
|
||||
copy_val = "{{object." + model_object_field
|
||||
if sub_model_object_field:
|
||||
copy_val += "." + sub_model_object_field
|
||||
if null_value:
|
||||
copy_val = copy_val + '|default:"' + null_value + '"'
|
||||
copy_val = copy_val + "}}"
|
||||
return copy_val
|
||||
if field_name:
|
||||
expression = "{{object." + field_name
|
||||
if sub_field_name:
|
||||
expression += "." + sub_field_name
|
||||
if null_value:
|
||||
expression += "|default: '''%s'''" % null_value
|
||||
expression += "}}"
|
||||
return expression
|
||||
|
||||
def onchange_model_object_field(self, cr, uid, ids, model_object_field, template_language, context=None):
|
||||
if not model_object_field:
|
||||
@@ -374,7 +370,7 @@ This is useful for CRM leads for example"),
|
||||
res_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', field_obj.relation)], context=context)
|
||||
if res_ids:
|
||||
result['sub_object'] = res_ids[0]
|
||||
result['copyvalue'] = self.compute_pl(False,
|
||||
result['copyvalue'] = self.build_expression(False,
|
||||
False,
|
||||
False,
|
||||
template_language)
|
||||
@@ -383,7 +379,7 @@ This is useful for CRM leads for example"),
|
||||
else:
|
||||
#Its a simple field... just compute placeholder
|
||||
result['sub_object'] = False
|
||||
result['copyvalue'] = self.compute_pl(field_obj.name,
|
||||
result['copyvalue'] = self.build_expression(field_obj.name,
|
||||
False,
|
||||
False,
|
||||
template_language
|
||||
@@ -402,7 +398,7 @@ This is useful for CRM leads for example"),
|
||||
sub_field_obj = self.pool.get('ir.model.fields').browse(cr, uid, sub_model_object_field, context)
|
||||
if res_ids:
|
||||
result['sub_object'] = res_ids[0]
|
||||
result['copyvalue'] = self.compute_pl(field_obj.name,
|
||||
result['copyvalue'] = self.build_expression(field_obj.name,
|
||||
sub_field_obj.name,
|
||||
False,
|
||||
template_language
|
||||
@@ -412,7 +408,7 @@ This is useful for CRM leads for example"),
|
||||
else:
|
||||
#Its a simple field... just compute placeholder
|
||||
result['sub_object'] = False
|
||||
result['copyvalue'] = self.compute_pl(field_obj.name,
|
||||
result['copyvalue'] = self.build_expression(field_obj.name,
|
||||
False,
|
||||
False,
|
||||
template_language
|
||||
@@ -431,7 +427,7 @@ This is useful for CRM leads for example"),
|
||||
sub_field_obj = self.pool.get('ir.model.fields').browse(cr, uid, sub_model_object_field, context)
|
||||
if res_ids:
|
||||
result['sub_object'] = res_ids[0]
|
||||
result['copyvalue'] = self.compute_pl(field_obj.name,
|
||||
result['copyvalue'] = self.build_expression(field_obj.name,
|
||||
sub_field_obj.name,
|
||||
null_value,
|
||||
template_language
|
||||
@@ -441,7 +437,7 @@ This is useful for CRM leads for example"),
|
||||
else:
|
||||
#Its a simple field... just compute placeholder
|
||||
result['sub_object'] = False
|
||||
result['copyvalue'] = self.compute_pl(field_obj.name,
|
||||
result['copyvalue'] = self.build_expression(field_obj.name,
|
||||
False,
|
||||
null_value,
|
||||
template_language
|
||||
|
||||
@@ -47,26 +47,22 @@
|
||||
<field name="act_from" ref="act_draft"/>
|
||||
<field name="act_to" ref="act_approved"/>
|
||||
<field name="signal">button_approval</field>
|
||||
<field name="role_id" ref="PE_ADMIN"/>
|
||||
</record>
|
||||
|
||||
<record id="trans_approved_suspended" model="workflow.transition">
|
||||
<field name="act_from" ref="act_approved"/>
|
||||
<field name="act_to" ref="act_suspended"/>
|
||||
<field name="signal">button_suspended</field>
|
||||
<field name="role_id" ref="PE_ADMIN"/>
|
||||
</record>
|
||||
<record id="trans_suspended_reapproved" model="workflow.transition">
|
||||
<field name="act_from" ref="act_suspended"/>
|
||||
<field name="act_to" ref="act_draft"/>
|
||||
<field name="signal">get_reapprove</field>
|
||||
<field name="role_id" ref="PE_ADMIN"/>
|
||||
</record>
|
||||
<record id="trans_suspended_dummy" model="workflow.transition">
|
||||
<field name="act_from" ref="act_suspended"/>
|
||||
<field name="act_to" ref="act_dummy"/>
|
||||
<field name="signal">get_never</field>
|
||||
<field name="role_id" ref="PE_ADMIN"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
'board_association_view.xml',
|
||||
'res_partner_view.xml',
|
||||
],
|
||||
'demo_xml': ['event_demo.xml', 'board_association_demo.xml'],
|
||||
'demo_xml': ['event_demo.xml'],
|
||||
'test': ['test/test_event.yml'],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<record model="res.users" id="base.user_root">
|
||||
<field name="action_id" ref="open_board_associations_manager"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -28,6 +28,7 @@ import time
|
||||
import tools
|
||||
import decimal_precision as dp
|
||||
|
||||
|
||||
class event_type(osv.osv):
|
||||
""" Event Type """
|
||||
_name = 'event.type'
|
||||
@@ -226,7 +227,7 @@ class event_event(osv.osv):
|
||||
'product_id': fields.many2one('product.product', 'Product', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="The invoices of this event registration will be created with this Product. Thus it allows you to set the default label and the accounting info you want by default on these invoices."),
|
||||
'note': fields.text('Notes', help="Description or Summary of Event", readonly=False, states={'done': [('readonly', True)]}),
|
||||
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', readonly=True, states={'draft': [('readonly', False)]}, help="Pricelist version for current event."),
|
||||
'unit_price': fields.related('product_id', 'list_price', type='float', string='Registration Cost', readonly=True, states={'draft':[('readonly',False)]}, help="This will be the default price used as registration cost when invoicing this event. Note that you can specify for each registration a specific amount if you want to"),
|
||||
'unit_price': fields.related('product_id', 'list_price', type='float', string='Registration Cost', readonly=True, states={'draft':[('readonly',False)]}, help="This will be the default price used as registration cost when invoicing this event. Note that you can specify for each registration a specific amount if you want to", digits_compute=dp.get_precision('Sale Price')),
|
||||
'main_speaker_id': fields.many2one('res.partner','Main Speaker', readonly=False, states={'done': [('readonly', True)]}, help="Speaker who are giving speech on event."),
|
||||
'speaker_ids':fields.many2many('res.partner', 'event_speaker_rel', 'speaker_id', 'partner_id', 'Other Speakers', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'address_id': fields.many2one('res.partner.address','Location Address', readonly=False, states={'done': [('readonly', True)]}),
|
||||
@@ -303,12 +304,12 @@ class event_registration(osv.osv):
|
||||
'name': fields.char('Summary', size=124, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'email_cc': fields.text('CC', size=252 , readonly=False, states={'done': [('readonly', True)]}, help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"),
|
||||
'nb_register': fields.integer('Quantity', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="Number of Registrations or Tickets"),
|
||||
'event_id': fields.many2one('event.event', 'Event Related', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'event_id': fields.many2one('event.event', 'Event', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}),
|
||||
"partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced', readonly=True, states={'draft': [('readonly', False)]}),
|
||||
"contact_id": fields.many2one('res.partner.contact', 'Partner Contact', readonly=False, states={'done': [('readonly', True)]}), #TODO: filter only the contacts that have a function into the selected partner_id
|
||||
"unit_price": fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Event Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute= dp.get_precision('Event Price')),
|
||||
"unit_price": fields.float('Unit Price', required=True, digits_compute=dp.get_precision('Sale Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits_compute=dp.get_precision('Sale Price')),
|
||||
"badge_ids": fields.one2many('event.registration.badge', 'registration_id', 'Badges', readonly=False, states={'done': [('readonly', True)]}),
|
||||
"event_product": fields.char("Invoice Name", size=128, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
"tobe_invoiced": fields.boolean("To be Invoiced", readonly=True, states={'draft': [('readonly', False)]}),
|
||||
|
||||
+26
-26
@@ -179,6 +179,7 @@
|
||||
<field name="register_min"/>
|
||||
<field name="register_current"/>
|
||||
<field name="state"/>
|
||||
<field name="user_id"/>
|
||||
<button string="Confirm Event" help="Confirm Event" name="button_confirm" states="draft" type="object" icon="gtk-apply"/>
|
||||
<button string="Cancel Event" help="Cancel Event" name="button_cancel" states="draft,confirm" type="object" icon="gtk-cancel"/>
|
||||
<button string="Event Done" help="Event Done" name="button_done" states="confirm" type="object" icon="gtk-jump-to"/>
|
||||
@@ -226,27 +227,27 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Events">
|
||||
<group col="10" colspan="4">
|
||||
<filter icon="terp-check" string="Current" name="draft" domain="[('state','in',('draft', 'confirm'))]" help="Current Events"/>
|
||||
<filter icon="terp-camera_test" string="Open" domain="[('state','=','confirm')]" help="Open Events"/>
|
||||
<filter icon="terp-check" string="Current" name="draft" domain="[('state','in',('draft', 'confirm'))]" help="Events in draft or confirmed state"/>
|
||||
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','confirm')]" help="Confirmed events"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" string="Event" select="1"/>
|
||||
<field name="state" select="1"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="user_id" widget="selection">
|
||||
<filter icon="terp-personal"
|
||||
string="My Events"
|
||||
help="My Events"
|
||||
domain="[('user_id','=',uid)]"/>
|
||||
<filter icon="terp-personal"
|
||||
string="My Events"
|
||||
help="My Events"
|
||||
domain="[('user_id','=',uid)]"/>
|
||||
</field>
|
||||
<field name="date_begin" select="1"/>
|
||||
<field name="state" select="1"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="12">
|
||||
<filter string="Responsible" icon="terp-personal" context="{'group_by': 'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Event Type" icon="terp-crm" context="{'group_by':'type'}"/>
|
||||
<filter string="state" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Responsible" icon="terp-personal" context="{'group_by': 'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Creation" icon="terp-go-month"
|
||||
<filter string="Beginning Date" icon="terp-go-month"
|
||||
domain="[]" context="{'group_by':'date_begin'}"/>
|
||||
</group>
|
||||
</search>
|
||||
@@ -295,11 +296,11 @@
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Registration">
|
||||
<field name="date" string="Date"/>
|
||||
<field name="event_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="event_id"/>
|
||||
<field name="nb_register"/>
|
||||
<field name="price_subtotal"/>
|
||||
<field name="price_subtotal" sum="Total"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
<button name="button_reg_close" string="Close Registration" states="open" type="object" icon="gtk-close"/>
|
||||
<button name="check_confirm" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
|
||||
@@ -343,9 +344,9 @@
|
||||
<separator string="" colspan="4"/>
|
||||
<group col="8" colspan="4">
|
||||
<field name="state" select="1" colspan="2"/>
|
||||
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
|
||||
<button name="button_reg_close" string="Close Registration" states="open" type="object" icon="gtk-close"/>
|
||||
<button name="check_confirm" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
|
||||
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Extra Info">
|
||||
@@ -468,27 +469,26 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Event Registration">
|
||||
<group col="12" colspan="4">
|
||||
<filter icon="terp-check" string="Current" name="draft" domain="[('state','in',('draft', 'open'))]" help="Current Registrations"/>
|
||||
<filter icon="terp-camera_test" string="Open" domain="[('state','=','open')]" help="Open Registrations"/>
|
||||
<filter icon="terp-check" string="Current" name="draft" domain="[('state','in',('draft', 'open'))]" help="Registrations in unconfirmed or confirmed state"/>
|
||||
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','open')]" help="Confirmed registrations"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="partner_id" />
|
||||
<field name="event_id" widget="selection"/>
|
||||
<field name="state" select="1"/>
|
||||
|
||||
<field name="user_id" widget="selection">
|
||||
<filter icon="terp-personal"
|
||||
string="My Registration"
|
||||
help="My Registration"
|
||||
domain="[('user_id','=',uid)]"/>
|
||||
<filter icon="terp-personal"
|
||||
string="My Registrations"
|
||||
help="My Registrations"
|
||||
domain="[('user_id','=',uid)]"/>
|
||||
</field>
|
||||
<field name="state" select="1"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Event" icon="terp-crm" domain="[]" context="{'group_by':'event_id'}"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
@@ -24,6 +24,7 @@ import netsvc
|
||||
import tools
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class partner_event_registration(osv.osv_memory):
|
||||
@@ -36,7 +37,7 @@ class partner_event_registration(osv.osv_memory):
|
||||
_columns = {
|
||||
'event_id': fields.many2one('event.event', 'Event'),
|
||||
'event_type': fields.many2one('event.type', 'Type', readonly=True),
|
||||
'unit_price': fields.float('Registration Cost'),
|
||||
'unit_price': fields.float('Registration Cost', digits_compute=dp.get_precision('Sale Price')),
|
||||
'start_date': fields.datetime('Start date', required=True, help="Beginning Date of Event", readonly=True),
|
||||
'end_date': fields.datetime('Closing date', required=True, help="Closing Date of Event", readonly=True),
|
||||
'nb_register': fields.integer('Number of Registration'),
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
<field name="hr_recruitment"/>
|
||||
<field name="hr_timesheet_sheet"/>
|
||||
<field name="hr_contract"/>
|
||||
<field name="hr_evaluation"/>
|
||||
<field name="hr_attendance"/>
|
||||
<field name="hr_evaluation" groups="base.group_extended"/>
|
||||
<field name="hr_payroll" groups="base.group_extended"/>
|
||||
<field name="hr_payroll_account" groups="base.group_extended"/>
|
||||
</group>
|
||||
|
||||
@@ -7,13 +7,13 @@ msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-09-09 07:17+0000\n"
|
||||
"Last-Translator: adsiz_1029@hotmail.com <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-04 19:23+0000\n"
|
||||
"Last-Translator: Engin BAHADIR <Unknown>\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-09-29 05:12+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr
|
||||
@@ -253,7 +253,7 @@ msgstr "Personel Kategorisi"
|
||||
#. module: hr
|
||||
#: selection:hr.timesheet,dayofweek:0
|
||||
msgid "Tuesday"
|
||||
msgstr "Sali"
|
||||
msgstr "Salı"
|
||||
|
||||
#. module: hr
|
||||
#: model:ir.model,name:hr.model_hr_department
|
||||
|
||||
@@ -51,8 +51,7 @@ class hr_installer(osv.osv_memory):
|
||||
_defaults = {
|
||||
'hr_holidays': True,
|
||||
'hr_expense': True,
|
||||
}
|
||||
|
||||
}
|
||||
hr_installer()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
-->
|
||||
|
||||
<record id="process_transition_employeeuser0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Link a user to an employee"""" name="name"/>
|
||||
<field eval=""""The field Relate'd user in the Employee form allows to link the OpenERP user (and his rights and role) to the employee."""" name="note"/>
|
||||
@@ -60,7 +59,6 @@
|
||||
</record>
|
||||
|
||||
<record id="process_transition_contactofemployee0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Link the employee to information"""" name="name"/>
|
||||
<field eval=""""In the Employee form, there are different kind of information like Contact information."""" name="note"/>
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-25 12:18+0000\n"
|
||||
"PO-Revision-Date: 2010-09-29 11:34+0000\n"
|
||||
"Last-Translator: ub121 <ubs121@gmail.com>\n"
|
||||
"PO-Revision-Date: 2010-10-05 01:35+0000\n"
|
||||
"Last-Translator: sugi <Unknown>\n"
|
||||
"Language-Team: Mongolian <mn@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-09-30 04:43+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr_evaluation
|
||||
@@ -115,12 +115,12 @@ msgstr "Байдал"
|
||||
#. module: hr_evaluation
|
||||
#: view:hr_evaluation.type:0
|
||||
msgid "Apply to categories"
|
||||
msgstr ""
|
||||
msgstr "Хүсэлт гаргах зэрэглэл"
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: model:ir.module.module,description:hr_evaluation.module_meta_information
|
||||
msgid "Ability to create employees evaluation."
|
||||
msgstr ""
|
||||
msgstr "Ажилтны үнэлгээ үүсгэх боломж"
|
||||
|
||||
#. module: hr_evaluation
|
||||
#: field:hr_evaluation.quote,name:0
|
||||
|
||||
@@ -75,14 +75,12 @@
|
||||
<field name="act_from" ref="act_confirm"/>
|
||||
<field name="act_to" ref="act_accepted"/>
|
||||
<field name="signal">validate</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
|
||||
<record id="t4" model="workflow.transition">
|
||||
<field name="act_from" ref="act_confirm"/>
|
||||
<field name="act_to" ref="act_refused"/>
|
||||
<field name="signal">refuse</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
|
||||
<record id="t5" model="workflow.transition">
|
||||
@@ -95,21 +93,18 @@
|
||||
<field name="act_from" ref="act_accepted"/>
|
||||
<field name="act_to" ref="act_refused"/>
|
||||
<field name="signal">refuse</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
|
||||
<record id="t7" model="workflow.transition">
|
||||
<field name="act_from" ref="act_confirm"/>
|
||||
<field name="act_to" ref="act_draft"/>
|
||||
<field name="signal">draft</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
|
||||
<record id="t8" model="workflow.transition">
|
||||
<field name="act_from" ref="act_accepted"/>
|
||||
<field name="act_to" ref="act_invoice"/>
|
||||
<field name="signal">invoice</field>
|
||||
<field name="role_id" ref="HR_INV"/>
|
||||
</record>
|
||||
|
||||
<record id="t9" model="workflow.transition">
|
||||
@@ -128,7 +123,6 @@
|
||||
<field name="act_from" ref="act_refused"/>
|
||||
<field name="act_to" ref="act_draft"/>
|
||||
<field name="signal">draft</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
||||
@@ -8,13 +8,13 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-09-29 08:47+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-10-05 01:41+0000\n"
|
||||
"Last-Translator: sugi <Unknown>\n"
|
||||
"Language-Team: Mongolian <mn@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-09-30 04:43+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: hr_expense
|
||||
@@ -144,7 +144,7 @@ msgstr "Батлах"
|
||||
#. module: hr_expense
|
||||
#: model:process.node,note:hr_expense.process_node_supplierinvoice0
|
||||
msgid "The accoutant validates the sheet"
|
||||
msgstr ""
|
||||
msgstr "Нягтлан энэ шийтийг батална."
|
||||
|
||||
#. module: hr_expense
|
||||
#: field:hr.expense.line,analytic_account:0
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
|
||||
<!--
|
||||
Process
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_process_expenseprocess0" model="process.process">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="model_id" ref="model_hr_expense_expense"/>
|
||||
<field eval=""""Expense"""" name="name"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Node
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_node_draftexpenses0" model="process.node">
|
||||
<field name="menu_id" ref="menu_expense_all"/>
|
||||
<field name="model_id" ref="model_hr_expense_expense"/>
|
||||
@@ -26,7 +26,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_confirmedexpenses0" model="process.node">
|
||||
<field name="menu_id" ref="menu_expense_all"/>
|
||||
<field name="model_id" ref="model_hr_expense_expense"/>
|
||||
@@ -37,7 +37,7 @@
|
||||
<field eval=""""object.state=='confirm'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_refused0" model="process.node">
|
||||
<field name="menu_id" ref="menu_expense_all"/>
|
||||
<field name="model_id" ref="model_hr_expense_expense"/>
|
||||
@@ -48,7 +48,7 @@
|
||||
<field eval=""""object.state=='canceled'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_approved0" model="process.node">
|
||||
<field name="menu_id" ref="menu_expense_all"/>
|
||||
<field name="model_id" ref="model_hr_expense_expense"/>
|
||||
@@ -59,7 +59,7 @@
|
||||
<field eval=""""object.state=='accepted'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_supplierinvoice0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree2"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -70,7 +70,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_reimbursement0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree2"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -81,7 +81,7 @@
|
||||
<field eval=""""object.state=='paid'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_reinvoicing0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -92,96 +92,90 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Transition
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_transition_confirmexpense0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Confirm expense"""" name="name"/>
|
||||
<field eval=""""Expense is confirmed."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_confirmedexpenses0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_draftexpenses0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_refuseexpense0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Refuse expense"""" name="name"/>
|
||||
<field eval=""""Expense is refused."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_refused0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_confirmedexpenses0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_approveexpense0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Approve expense"""" name="name"/>
|
||||
<field eval=""""Expense is approved."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_approved0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_confirmedexpenses0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_approveinvoice0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Supplier Invoice"""" name="name"/>
|
||||
<field eval=""""Creates supplier invoice."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_supplierinvoice0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_approved0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_reimburseexpense0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Reimburse expense"""" name="name"/>
|
||||
<field eval=""""After creating invoice, reimburse expenses"""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_reimbursement0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_supplierinvoice0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_reimbursereinvoice0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Reinvoice"""" name="name"/>
|
||||
<field eval=""""Create Customer invoice"""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_reinvoicing0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_reimbursement0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Transition Action
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_transition_action_confirm0" model="process.transition.action">
|
||||
<field eval=""""expense_confirm"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Confirm"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_confirmexpense0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_refuse0" model="process.transition.action">
|
||||
<field eval=""""expense_canceled"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Refuse"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_refuseexpense0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_accept0" model="process.transition.action">
|
||||
<field eval=""""expense_accept"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Accept"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_approveexpense0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_supplierinvoice0" model="process.transition.action">
|
||||
<field eval=""""action_invoice_create"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Invoice"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_approveinvoice0"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -77,28 +77,24 @@
|
||||
<field name="act_to" ref="act_validate" />
|
||||
<field name="signal">validate</field>
|
||||
<field name="condition">(holiday_status_id.double_validation == False)</field>
|
||||
<field name="role_id" ref="HR_holidays"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t3">
|
||||
<field name="act_from" ref="act_confirm" />
|
||||
<field name="act_to" ref="act_refuse" />
|
||||
<field name="signal">refuse</field>
|
||||
<field name="role_id" ref="HR_holidays"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t4">
|
||||
<field name="act_from" ref="act_validate" />
|
||||
<field name="act_to" ref="act_cancel" />
|
||||
<field name="signal">cancel</field>
|
||||
<field name="role_id" ref="HR_holidays"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t5">
|
||||
<field name="act_from" ref="act_refuse" />
|
||||
<field name="act_to" ref="act_cancel" />
|
||||
<field name="signal">cancel</field>
|
||||
<field name="role_id" ref="HR_holidays"/>
|
||||
</record>
|
||||
|
||||
<record model="workflow.transition" id="t7">
|
||||
@@ -124,7 +120,6 @@
|
||||
<field name="act_to" ref="act_validate1" />
|
||||
<field name="condition">(holiday_status_id.double_validation == True)</field>
|
||||
<field name="signal">validate</field>
|
||||
<field name="role_id" ref="HR_holidays"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<data>
|
||||
|
||||
<!--
|
||||
Process
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_process_holidaysprocess0" model="process.process">
|
||||
<field eval=""""Holidays"""" name="name"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
<field eval="1" name="active"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Node
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_node_holidaysdefinition0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays_new"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays_per_user"/>
|
||||
@@ -25,7 +25,7 @@
|
||||
<field name="process_id" ref="process_process_holidaysprocess0"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_holidaysrequest0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays_new"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
@@ -36,7 +36,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_refused0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays_new"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
@@ -47,7 +47,7 @@
|
||||
<field eval=""""object.state=='refuse'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_approved0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays_new"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
@@ -58,7 +58,7 @@
|
||||
<field eval=""""object.state=='validate'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_calendar0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays_new"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
@@ -69,7 +69,7 @@
|
||||
<field eval=""""object.state=='validate'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_holidays0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
@@ -80,7 +80,7 @@
|
||||
<field eval=""""object.state in ('draft', 'validate', 'confirm', 'refuse', 'cancel')"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_legaldeclaration0" model="process.node">
|
||||
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays"/>
|
||||
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
|
||||
@@ -89,91 +89,85 @@
|
||||
<field eval=""""Legal Declaration Document to declare new employee"""" name="note"/>
|
||||
<field name="process_id" ref="hr.process_process_employeecontractprocess0"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Process Transition
|
||||
-->
|
||||
|
||||
|
||||
|
||||
|
||||
<record id="process_transition_employeedeclaration0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Employee Declaration"""" name="name"/>
|
||||
<field eval=""""Document for employee"""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_legaldeclaration0"/>
|
||||
<field model="process.node" name="source_node_id" ref="hr.process_node_employee0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_holidaysdefrequest0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Holidays def Request"""" name="name"/>
|
||||
<field eval=""""If holidays available, employee can take it and fill it."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_holidaysrequest0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_holidaysdefinition0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_refusedrequest0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Refused Request"""" name="name"/>
|
||||
<field eval=""""Request is refused."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_refused0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_holidaysrequest0" />
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_approvedrequest0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Approved Request"""" name="name"/>
|
||||
<field eval=""""Request is approved."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_approved0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_holidaysrequest0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_setholiday0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Set Holiday"""" name="name"/>
|
||||
<field eval=""""Holiday is set in the calendar."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_calendar0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_approved0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_employeeholidays0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Employee Holidays"""" name="name"/>
|
||||
<field eval=""""Employee get holidays"""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_holidays0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_legaldeclaration0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Transition Action
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_transition_action_confirm0" model="process.transition.action">
|
||||
<field eval=""""holidays_confirm"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Confirm"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_holidaysdefrequest0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_reufse0" model="process.transition.action">
|
||||
<field eval=""""holidays_refuse"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Refuse"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_refusedrequest0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_validate0" model="process.transition.action">
|
||||
<field eval=""""holidays_validate"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Validate"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_approvedrequest0"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -9,6 +9,7 @@
|
||||
sequence: 0.0
|
||||
name: Fortis
|
||||
state: bank
|
||||
bank: base.res_bank_1
|
||||
-
|
||||
I create a new employee “Richard”
|
||||
-
|
||||
|
||||
@@ -254,11 +254,6 @@ msgstr "Convert To Partner"
|
||||
msgid "Recruitments Statistics"
|
||||
msgstr "Recruitments Statistics"
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_done:0
|
||||
msgid "%Done"
|
||||
msgstr "%Done"
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
@@ -312,11 +307,6 @@ msgstr "Email"
|
||||
msgid "Availability (Days)"
|
||||
msgstr "Availability (Days)"
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,avg_answers:0
|
||||
msgid "Avg. Answers"
|
||||
msgstr "Avg. Answers"
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: view:hr.recruitment.report:0
|
||||
msgid "Available"
|
||||
@@ -464,11 +454,6 @@ msgstr "Stage of Recruitment"
|
||||
msgid "Stages"
|
||||
msgstr "Stages"
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_cancel:0
|
||||
msgid "%Cancel"
|
||||
msgstr "%Cancel"
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.applicant,probability:0
|
||||
msgid "Probability"
|
||||
|
||||
@@ -257,11 +257,6 @@ msgstr ""
|
||||
msgid "Recruitments Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_done:0
|
||||
msgid "%Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
@@ -315,11 +310,6 @@ msgstr ""
|
||||
msgid "Availability (Days)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,avg_answers:0
|
||||
msgid "Avg. Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: view:hr.recruitment.report:0
|
||||
msgid "Available"
|
||||
@@ -467,11 +457,6 @@ msgstr ""
|
||||
msgid "Stages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_cancel:0
|
||||
msgid "%Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.applicant,probability:0
|
||||
msgid "Probability"
|
||||
|
||||
@@ -254,11 +254,6 @@ msgstr ""
|
||||
msgid "Recruitments Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_done:0
|
||||
msgid "%Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
@@ -464,11 +459,6 @@ msgstr ""
|
||||
msgid "Stages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_cancel:0
|
||||
msgid "%Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.applicant,probability:0
|
||||
msgid "Probability"
|
||||
|
||||
@@ -258,11 +258,6 @@ msgstr ""
|
||||
msgid "Recruitments Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_done:0
|
||||
msgid "%Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
@@ -316,11 +311,6 @@ msgstr ""
|
||||
msgid "Availability (Days)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,avg_answers:0
|
||||
msgid "Avg. Answers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: view:hr.recruitment.report:0
|
||||
msgid "Available"
|
||||
@@ -468,11 +458,6 @@ msgstr ""
|
||||
msgid "Stages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.recruitment.report,perc_cancel:0
|
||||
msgid "%Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_recruitment
|
||||
#: field:hr.applicant,probability:0
|
||||
msgid "Probability"
|
||||
|
||||
@@ -36,26 +36,10 @@ class hr_recruitment_report(osv.osv):
|
||||
_auto = False
|
||||
_rec_name = 'date'
|
||||
|
||||
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
|
||||
|
||||
""" @param cr: the current row, from the database cursor,
|
||||
@param uid: the current user’s ID for security checks,
|
||||
@param ids: List of case and section Data’s IDs
|
||||
@param context: A standard dictionary for contextual values """
|
||||
|
||||
res = {}
|
||||
state_perc = 0.0
|
||||
avg_ans = 0.0
|
||||
#TODO: Calculate avg_answer, perc_done, perc_cancel
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
||||
'nbr': fields.integer('# of Cases', readonly=True),
|
||||
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
|
||||
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
|
||||
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
|
||||
'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
|
||||
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
||||
('03', 'March'), ('04', 'April'),\
|
||||
('05', 'May'), ('06', 'June'), \
|
||||
|
||||
@@ -57,14 +57,14 @@ class hr_analytic_timesheet(osv.osv):
|
||||
return super(hr_analytic_timesheet, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
|
||||
def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, unit, context=None):
|
||||
def on_change_unit_amount(self, cr, uid, id, prod_id, unit_amount, company_id, unit=False, journal_id=False, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
res = {'value':{}}
|
||||
if prod_id and unit_amount:
|
||||
# find company
|
||||
company_id = self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', context=context)
|
||||
res.update(self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, context=context))
|
||||
res.update(self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, journal_id, context=context))
|
||||
# update unit of measurement
|
||||
if prod_id:
|
||||
uom = self.pool.get('product.product').browse(cr, uid, prod_id, context=context)
|
||||
|
||||
@@ -12,16 +12,17 @@
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom" string="Timesheet Lines">
|
||||
<field name="user_id" on_change="on_change_user_id(user_id)" required="1"/>
|
||||
<field name="date" on_change="on_change_date(date)"/>
|
||||
<field domain="[('type','=','normal'),('state', '<>', 'close')]" name="account_id"/>
|
||||
<field name="user_id" on_change="on_change_user_id(user_id)" required="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" required="1" domain="[('type','=','service')]"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" sum="Total time"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="amount" sum="Total cost"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="journal_id"/>
|
||||
<field domain="[('type','=','normal')]" name="account_id"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" required="1" domain="[('type','=','service')]" invisible="1"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" sum="Total time"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" invisible="1"/>
|
||||
<field name="amount" sum="Total cost" invisible="1"/>
|
||||
<field name="general_account_id" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -40,9 +41,9 @@
|
||||
<page string="Information">
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Product" colspan="2"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" required="1" domain="[('type','=','service')]"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" required="1" domain="[('type','=','service')]"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
</group>
|
||||
<group colspan="2" col="2">
|
||||
<separator string="Accounting" colspan="2"/>
|
||||
@@ -67,7 +68,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Timesheet">
|
||||
<group col='8' colspan='4'>
|
||||
<filter icon="terp-go-today" domain="[('date', '=', time.strftime('%%Y-%%m-%%d'))]" string="Today"/>
|
||||
<filter name="today" icon="terp-go-today" domain="[('date', '=', time.strftime('%%Y-%%m-%%d'))]" string="Today"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="user_id"/>
|
||||
<field name="account_id" select="1" widget="selection"/>
|
||||
@@ -81,32 +82,20 @@
|
||||
<filter string="Anlytic account" icon="terp-folder-green" domain="[]" context="{'group_by':'account_id'}"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
|
||||
</group>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
</record>
|
||||
|
||||
<record id="act_hr_timesheet_line_me_all_form" model="ir.actions.act_window">
|
||||
<field name="name">My Working Hours</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hr.analytic.timesheet</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('user_id','=',uid)]</field>
|
||||
<field name="filter" eval="True"/>
|
||||
<field name="context">{"search_default_user_id":uid, "search_default_my": 1}</field>
|
||||
<field name="search_view_id" ref="hr_timesheet_line_search"/>
|
||||
</record>
|
||||
|
||||
<record id="act_hr_timesheet_line_evry1_all_form" model="ir.actions.act_window">
|
||||
<field name="name">Working Hours</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">hr.analytic.timesheet</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="context">{"search_default_user_id":uid, "search_default_today":1}</field>
|
||||
<field name="search_view_id" ref="hr_timesheet_line_search"/>
|
||||
<field name="help">This functionality gives you a list of work done by user, product and analytic account (or project). A search tool allows you to make fine-grained analysis.</field>
|
||||
</record>
|
||||
|
||||
@@ -81,7 +81,7 @@ class hr_so_project(osv.osv_memory):
|
||||
|
||||
if not res['product_uom_id']:
|
||||
raise osv.except_osv(_('UserError'), _('No cost unit defined for this employee !'))
|
||||
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour, res['product_uom_id'])['value']
|
||||
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour,False, res['product_uom_id'])['value']
|
||||
|
||||
res['name'] = data['info']
|
||||
res['account_id'] = data['account_id'].id
|
||||
|
||||
@@ -21,17 +21,6 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!--record id="view_account_analytic_account_form" model="ir.ui.view">
|
||||
<field name="name">account.analytic.account.form</field>
|
||||
<field name="model">account.analytic.account</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_account_form"/>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="company_currency_id" position="replace">
|
||||
<field name="currency_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record-->
|
||||
<record id="hr_timesheet_line_form" model="ir.ui.view">
|
||||
<field name="name">hr.analytic.timesheet.form</field>
|
||||
<field name="model">hr.analytic.timesheet</field>
|
||||
@@ -83,13 +72,26 @@
|
||||
</record>
|
||||
|
||||
<!-- Inherits for account analytic lines -->
|
||||
<record id="view_account_analytic_line_search_inherit" model="ir.ui.view">
|
||||
<field name="name">account.analytic.line.search.to_invoice</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="type">search</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_line_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<filter name="others" position="after">
|
||||
<separator orientation="vertical"/>
|
||||
<filter name="to_invoice" string="To Invoice" context="{'to_invoice': 1}" domain="[('invoice_id','=',False),('to_invoice','<>',False)]" icon="terp-sale"/>
|
||||
</filter>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_analytic_line_tree_inherit" model="ir.ui.view">
|
||||
<field name="name">account.analytic.line.tree.to_invoice</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="journal_id" position="after">
|
||||
<field name="account_id" position="after">
|
||||
<field name="to_invoice"/>
|
||||
</field>
|
||||
</field>
|
||||
@@ -103,18 +105,19 @@
|
||||
<field name="arch" type="xml">
|
||||
<field name="product_uom_id" position="after">
|
||||
<field name="to_invoice"/>
|
||||
<field name="invoice_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Menus -->
|
||||
<record id="action_hr_analytic_timesheet_open_tree" model="ir.actions.act_window">
|
||||
<field name="name">Entries to invoice</field>
|
||||
<field name="name">Costs to Invoice</field>
|
||||
<field name="res_model">account.analytic.line</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('to_invoice','<>',False)]</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="context">{'search_default_to_invoice': 1}</field>
|
||||
<field name="help">OpenERP automatically group the entries to be invoiced so you can keep an eye on them on real time in one glance.</field>
|
||||
</record>
|
||||
<menuitem
|
||||
@@ -123,31 +126,6 @@
|
||||
parent="account.menu_finance_periodical_processing_billing"
|
||||
sequence="1"/>
|
||||
|
||||
<record id="action_hr_analytic_timesheet_tree_invoiced" model="ir.actions.act_window">
|
||||
<field name="name">Uninvoiced Entries</field>
|
||||
<field name="res_model">account.analytic.line</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('invoice_id','=',False),('to_invoice','!=',False)]</field>
|
||||
<field name="filter" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="action_open_analytic_accounts" model="ir.actions.act_window">
|
||||
<field name="name">Open Analytic Accounts</field>
|
||||
<field name="res_model">account.analytic.account</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','<>','close'),('type','<>','view')]</field>
|
||||
</record>
|
||||
|
||||
<record id="action_open_invoice_analytic_accounts" model="ir.actions.act_window">
|
||||
<field name="name">Unclosed Invoiceable Accounts</field>
|
||||
<field name="res_model">account.analytic.account</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('state','<>','close'),('type','<>','view'),('pricelist_id','<>',False)]</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_timesheet_invoice_factor_form" model="ir.ui.view">
|
||||
<field name="name">hr_timesheet_invoice.factor.form</field>
|
||||
<field name="model">hr_timesheet_invoice.factor</field>
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
from osv import fields,osv
|
||||
import tools
|
||||
from decimal_precision import decimal_precision as dp
|
||||
|
||||
|
||||
class report_analytic_account_close(osv.osv):
|
||||
_name = "report.analytic.account.close"
|
||||
@@ -70,8 +72,8 @@ class report_account_analytic_line_to_invoice(osv.osv):
|
||||
'account_id':fields.many2one('account.analytic.account', 'Analytic account', readonly=True),
|
||||
'product_uom_id':fields.many2one('product.uom', 'UoM', readonly=True),
|
||||
'unit_amount': fields.float('Units', readonly=True),
|
||||
'sale_price': fields.float('Sale price', readonly=True),
|
||||
'amount': fields.float('Amount', readonly=True),
|
||||
'sale_price': fields.float('Sale price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
|
||||
'amount': fields.float('Amount', readonly=True, digits_compute=dp.get_precision('Account')),
|
||||
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
|
||||
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||
'accounts': fields.many2many('account.analytic.account', 'invoice_id', 'account_id', 'Analytic Accounts', required=True),
|
||||
'date': fields.boolean('Date', help='The real date of each work will be displayed on the invoice'),
|
||||
'time': fields.boolean('Time spent', help='The time of each work done will be displayed on the invoice'),
|
||||
'name': fields.boolean('Name of entry', help='The detail of each work done will be displayed on the invoice'),
|
||||
'name': fields.boolean('Description', help='The detail of each work done will be displayed on the invoice'),
|
||||
'price': fields.boolean('Cost', help='The cost of each work done will be displayed on the invoice. You probably don\'t want to check this'),
|
||||
'product': fields.many2one('product.product', 'Product', help='Complete this field only if you want to force to use a specific product. Keep empty to use the real product that comes from the cost.'),
|
||||
}
|
||||
@@ -59,8 +59,10 @@ class hr_timesheet_invoice_create(osv.osv_memory):
|
||||
return [x[0] for x in account_ids]
|
||||
|
||||
_defaults = {
|
||||
'accounts': _get_accounts
|
||||
}
|
||||
'accounts': _get_accounts,
|
||||
'date': lambda *args: 1,
|
||||
'name': lambda *args: 1
|
||||
}
|
||||
|
||||
def do_create(self, cr, uid, ids, context=None):
|
||||
mod_obj = self.pool.get('ir.model.data')
|
||||
|
||||
@@ -2,37 +2,33 @@
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_hr_timesheet_invoice_create" model="ir.ui.view">
|
||||
<record id="view_hr_timesheet_invoice_create" model="ir.ui.view">
|
||||
<field name="name">hr.timesheet.invoice.create.form</field>
|
||||
<field name="model">hr.timesheet.invoice.create</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Invoice analytic lines">
|
||||
<group height="280" width="450">
|
||||
<group col="4" colspan="6">
|
||||
<notebook>
|
||||
<page string="Billing Data">
|
||||
<separator string="Do you want to show details of work in invoice ?" colspan="4"/>
|
||||
<field name="date"/>
|
||||
<field name="time"/>
|
||||
<field name="name"/>
|
||||
<field name="price"/>
|
||||
<separator string="Force to use a specific product" colspan="4"/>
|
||||
<field name="product"/>
|
||||
</page>
|
||||
<page string="Filter on Accounts" groups="base.group_extended">
|
||||
<separator string="Choose accounts you want to invoice" colspan="4"/>
|
||||
<field name="accounts" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</group>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
|
||||
<button name="do_create" string="Create Invoices" colspan="1" type="object" icon="gtk-execute"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
<form string="Invoice analytic lines">
|
||||
<notebook colspan="4">
|
||||
<page string="Billing Data">
|
||||
<separator string="Do you want to show details of work in invoice ?" colspan="4"/>
|
||||
<field name="date"/>
|
||||
<field name="time"/>
|
||||
<field name="name"/>
|
||||
<field name="price"/>
|
||||
<separator string="Force to use a specific product" colspan="4"/>
|
||||
<field name="product"/>
|
||||
</page>
|
||||
<page string="Filter on Accounts" groups="base.group_extended">
|
||||
<separator string="Choose accounts you want to invoice" colspan="4"/>
|
||||
<field name="accounts" colspan="4" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
|
||||
<button name="do_create" string="Create Invoices" colspan="1" type="object" icon="gtk-execute"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -45,7 +41,7 @@
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.values" id="hr_timesheet_invoice_create_values">
|
||||
<record model="ir.values" id="hr_timesheet_invoice_create_values">
|
||||
<field name="model_id" ref="model_account_analytic_line" />
|
||||
<field name="object" eval="1" />
|
||||
<field name="name">Invoice analytic lines</field>
|
||||
@@ -55,5 +51,5 @@
|
||||
<field name="model">account.analytic.line</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -104,11 +104,11 @@
|
||||
<field invisible="1" name="date"/>
|
||||
<field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/>
|
||||
<field name="name"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" widget="float_time"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
|
||||
<field name="to_invoice"/>
|
||||
<field invisible="1" name="journal_id"/>
|
||||
<field invisible="1" name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field invisible="1" name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field invisible="1" name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field invisible="1" name="amount"/>
|
||||
<field invisible="1" name="general_account_id"/>
|
||||
<field invisible="1" name="user_id" required="1"/>
|
||||
@@ -117,11 +117,11 @@
|
||||
<field name="date"/>
|
||||
<field domain="[('type','=','normal'), ('state', '<>', 'close')]" name="account_id" on_change="on_change_account_id(account_id)"/>
|
||||
<field name="name"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)" widget="float_time"/>
|
||||
<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)" widget="float_time"/>
|
||||
<field name="to_invoice"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, product_uom_id)"/>
|
||||
<field name="product_id" domain="[('type','=','service')]" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, False, product_uom_id,journal_id)"/>
|
||||
<field name="amount"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="user_id" required="1"/>
|
||||
@@ -201,8 +201,7 @@
|
||||
id="base.menu_project_management_time_tracking"
|
||||
name="Time Tracking"
|
||||
parent="base.menu_main_pm" sequence="5"/>
|
||||
<menuitem action="hr_timesheet_sheet.act_hr_timesheet_sheet_form" id="menu_act_project_management_timesheet_sheet_form" parent="base.menu_project_management_time_tracking"
|
||||
sequence="5"/>
|
||||
|
||||
<menuitem action="act_hr_timesheet_sheet_form" id="menu_act_hr_timesheet_sheet_form" parent="hr_attendance.menu_hr_time_tracking"
|
||||
sequence="2"/>
|
||||
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
|
||||
<!-- Roles definition -->
|
||||
|
||||
|
||||
<record id="HR" model="res.roles">
|
||||
<field name="name">Timesheets validation</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Workflow definition -->
|
||||
|
||||
|
||||
<record id="wkf_timesheet" model="workflow">
|
||||
<field name="name">hr_timesheet_sheet.sheet</field>
|
||||
<field name="osv">hr_timesheet_sheet.sheet</field>
|
||||
<field name="on_create">True</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="act_new" model="workflow.activity">
|
||||
<field name="wkf_id" ref="wkf_timesheet"/>
|
||||
<field name="name">new</field>
|
||||
@@ -42,7 +42,7 @@
|
||||
<field name="action">write({'state':'done'})</field>
|
||||
<field name="flow_stop">True</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="t0" model="workflow.transition">
|
||||
<field name="act_from" ref="act_new"/>
|
||||
<field name="act_to" ref="act_draft"/>
|
||||
@@ -56,13 +56,11 @@
|
||||
<field name="act_from" ref="act_confirm"/>
|
||||
<field name="act_to" ref="act_done"/>
|
||||
<field name="signal">done</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
<record id="t3" model="workflow.transition">
|
||||
<field name="act_from" ref="act_confirm"/>
|
||||
<field name="act_to" ref="act_draft"/>
|
||||
<field name="signal">cancel</field>
|
||||
<field name="role_id" ref="HR"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!--
|
||||
|
||||
<!--
|
||||
Process
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_process_hrtimesheetprocess0" model="process.process">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="model_id" ref="hr_timesheet_sheet.model_hr_timesheet_sheet_sheet"/>
|
||||
<field eval=""""Hr Timesheet"""" name="name"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
|
||||
<!--
|
||||
Process Node
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_node_attendance0" model="process.node">
|
||||
<field name="model_id" ref="hr.model_hr_employee"/>
|
||||
<field eval=""""state"""" name="kind"/>
|
||||
@@ -24,7 +24,7 @@
|
||||
<field name="process_id" ref="process_process_hrtimesheetprocess0"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_timesheet0" model="process.node">
|
||||
<field name="menu_id" ref="hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form"/>
|
||||
<field name="model_id" ref="hr_timesheet_sheet.model_hr_timesheet_sheet_sheet"/>
|
||||
@@ -35,7 +35,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_drafttimesheetsheet0" model="process.node">
|
||||
<field name="menu_id" ref="hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form"/>
|
||||
<field name="model_id" ref="hr_timesheet_sheet.model_hr_timesheet_sheet_sheet"/>
|
||||
@@ -46,7 +46,7 @@
|
||||
<field eval=""""object.state=='draft'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_confirmedtimesheet0" model="process.node">
|
||||
<field name="menu_id" ref="hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form"/>
|
||||
<field name="model_id" ref="hr_timesheet_sheet.model_hr_timesheet_sheet_sheet"/>
|
||||
@@ -68,7 +68,7 @@
|
||||
<field eval=""""object.state=='done'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_invoiceonwork0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_finance_receivables"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -91,39 +91,32 @@
|
||||
<field eval=""""object.state in ('open', pending', 'done', 'cancelled')"""" name="model_states"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
|
||||
<!--
|
||||
Process Transition
|
||||
-->
|
||||
|
||||
|
||||
<record id="res_roles_hr0" model="res.roles">
|
||||
<field eval=""""HR"""" name="name"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_timesheet_sheet.t1" model="workflow.transition">
|
||||
<field name="role_id" ref="res_roles_hr0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_attendancetimesheet0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Sign in/out"""" name="name"/>
|
||||
<field eval=""""The employee signs in and signs out."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_drafttimesheetsheet0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_attendance0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_timesheetdraft0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Service"""" name="name"/>
|
||||
<field eval=""""The timesheet line represents the time spent by the employee on a specific service provided."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_drafttimesheetsheet0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_timesheet0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_confirmtimesheet0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Confirmation"""" name="name"/>
|
||||
<field eval=""""The employee periodically confirms his own timesheets."""" name="note"/>
|
||||
@@ -131,58 +124,55 @@
|
||||
<field model="process.node" name="source_node_id" ref="process_node_drafttimesheetsheet0"/>
|
||||
<field eval="[(6,0,[ref('hr_timesheet_sheet.t1')])]" name="transition_ids"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_validatetimesheet0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Validation"""" name="name"/>
|
||||
<field eval=""""The project manager validates the timesheets."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_validatedtimesheet0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_confirmedtimesheet0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_invoiceontimesheet0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Billing"""" name="name"/>
|
||||
<field eval=""""The invoice is created based on the timesheet."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_invoiceonwork0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_confirmedtimesheet0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_tasktimesheet0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Task timesheet"""" name="name"/>
|
||||
<field eval=""""Moves task entry into the timesheet line"""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_timesheet0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_workontask0"/>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
</record>
|
||||
|
||||
<!--
|
||||
Process Action
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_transition_action_draftconfirmtimesheet0" model="process.transition.action">
|
||||
<field eval=""""button_confirm"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Confirm"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_confirmtimesheet0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_validatetimesheet0" model="process.transition.action">
|
||||
<field eval=""""write({'state':'done'})"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Validate"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_validatetimesheet0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_refusetimesheet0" model="process.transition.action">
|
||||
<field eval=""""write({'state':'draft'})"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Refuse"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_validatetimesheet0"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<field name="model">hr.timesheet.current.open</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Current Timesheet">
|
||||
<form string="My Timesheet">
|
||||
<separator string="It will open the your current timesheet" colspan="4" />
|
||||
<group colspan="4" col="6">
|
||||
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
|
||||
@@ -17,7 +17,7 @@
|
||||
</record>
|
||||
|
||||
<record id="action_hr_timesheet_current_open" model="ir.actions.act_window">
|
||||
<field name="name">Current Timesheet</field>
|
||||
<field name="name">My Timesheet</field>
|
||||
<field name="res_model">hr.timesheet.current.open</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
@@ -25,7 +25,11 @@
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_hr_timesheet_current_open" icon="STOCK_NEW" id="menu_act_hr_timesheet_sheet_form_my_current" name="Current Timesheet" parent="hr_attendance.menu_hr_time_tracking" sequence="1"/>
|
||||
<menuitem action="action_hr_timesheet_current_open" icon="STOCK_NEW" id="menu_act_hr_timesheet_sheet_form_my_current" name="My Timesheet" parent="hr_attendance.menu_hr_time_tracking" sequence="1"/>
|
||||
|
||||
<menuitem action="action_hr_timesheet_current_open"
|
||||
id="menu_act_project_management_timesheet_sheet_form" parent="base.menu_project_management_time_tracking"
|
||||
sequence="5"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
# Hindi translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-20 06:56+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 13:03+0000\n"
|
||||
"Last-Translator: vir (Open ERP) <vir@tinyerp.com>\n"
|
||||
"Language-Team: Hindi <hi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-10-05 04:57+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: knowledge
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,wiki:0
|
||||
msgid "Collaborative Content (Wiki)"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: help:knowledge.installer,wiki_quality_manual:0
|
||||
msgid "Creates an example skeleton for a standard quality manual."
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,document_ftp:0
|
||||
msgid "Shared Repositories (FTP)"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.module.module,shortdesc:knowledge.module_meta_information
|
||||
msgid "Knowledge Management System"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: constraint:ir.ui.menu:0
|
||||
msgid "Error ! You can not create recursive Menu."
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "कार्य की परिभाषा में मॉडल का नाम अमान्य है."
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.ui.menu,name:knowledge.menu_document
|
||||
msgid "Knowledge"
|
||||
msgstr "ज्ञान"
|
||||
|
||||
#. module: knowledge
|
||||
#: help:knowledge.installer,document_webdav:0
|
||||
msgid ""
|
||||
"Provides a WebDAV access to your OpenERP's Document Management System. Lets "
|
||||
"you access attachments and virtual documents through your standard file "
|
||||
"browser."
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,progress:0
|
||||
msgid "Configuration Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: view:knowledge.installer:0
|
||||
msgid "title"
|
||||
msgstr "शीर्षक:"
|
||||
|
||||
#. module: knowledge
|
||||
#: help:knowledge.installer,document_ftp:0
|
||||
msgid ""
|
||||
"Provides an FTP access to your OpenERP's Document Management System. Lets "
|
||||
"you access attachments and virtual documents through a standard FTP client."
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.module.module,description:knowledge.module_meta_information
|
||||
msgid ""
|
||||
"Installer for knowledge-based tools\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.ui.menu,name:knowledge.menu_document_configuration
|
||||
msgid "Configuration"
|
||||
msgstr "कॉन्फ़िगरेशन"
|
||||
|
||||
#. module: knowledge
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "संरचना देखने के लिए अमान्य XML!"
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.actions.act_window,name:knowledge.action_knowledge_installer
|
||||
msgid "Knowledge Modules Installation"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: view:ir.actions.todo:0
|
||||
msgid "Launch"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,wiki_quality_manual:0
|
||||
msgid "Quality Manual"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: view:knowledge.installer:0
|
||||
msgid "Templates of Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,document_webdav:0
|
||||
msgid "Shared Repositories (WebDAV)"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: help:knowledge.installer,wiki_faq:0
|
||||
msgid ""
|
||||
"Creates a skeleton internal FAQ pre-filled with documentation about "
|
||||
"OpenERP's Document Management System."
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,wiki_faq:0
|
||||
msgid "Internal FAQ"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.ui.menu,name:knowledge.menu_document2
|
||||
msgid "Collaborative Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: knowledge
|
||||
#: field:knowledge.installer,config_logo:0
|
||||
msgid "Image"
|
||||
msgstr "चित्र"
|
||||
|
||||
#. module: knowledge
|
||||
#: model:ir.model,name:knowledge.model_knowledge_installer
|
||||
msgid "knowledge.installer"
|
||||
msgstr "knowledge.installer"
|
||||
|
||||
#. module: knowledge
|
||||
#: help:knowledge.installer,wiki:0
|
||||
msgid ""
|
||||
"Lets you create wiki pages and page groups in order to keep track of "
|
||||
"business knowledge and share it with and between your employees."
|
||||
msgstr ""
|
||||
@@ -38,7 +38,7 @@ class knowledge_installer(osv.osv_memory):
|
||||
help="Lets you create wiki pages and page groups in order "
|
||||
"to keep track of business knowledge and share it with "
|
||||
"and between your employees."),
|
||||
# Templates of Content
|
||||
# Content templates
|
||||
'wiki_faq':fields.boolean('Internal FAQ',
|
||||
help="Creates a skeleton internal FAQ pre-filled with "
|
||||
"documentation about OpenERP's Document Management "
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<field name="document_ftp"/>
|
||||
<field name="document_webdav"/>
|
||||
<field name="wiki"/>
|
||||
<separator string="Templates of Content" colspan="4"/>
|
||||
<separator string="Content templates" colspan="4"/>
|
||||
<field name="wiki_faq"/>
|
||||
<field name="wiki_quality_manual"/>
|
||||
</group>
|
||||
|
||||
@@ -199,7 +199,7 @@ class mailgate_message(osv.osv):
|
||||
if action_ids:
|
||||
action_data = action_pool.read(cr, uid, action_ids[0], context=context)
|
||||
action_data.update({
|
||||
'res_id': res_id,
|
||||
'domain' : "[('id','=',%d)]"%(res_id),
|
||||
'nodestroy': True
|
||||
})
|
||||
return action_data
|
||||
@@ -214,11 +214,12 @@ class mailgate_message(osv.osv):
|
||||
"""
|
||||
action_data = False
|
||||
action_pool = self.pool.get('ir.actions.act_window')
|
||||
message_pool = self.browse(cr ,uid, ids)[0]
|
||||
action_ids = action_pool.search(cr, uid, [('res_model', '=', 'ir.attachment')])
|
||||
if action_ids:
|
||||
action_data = action_pool.read(cr, uid, action_ids[0], context=context)
|
||||
action_data.update({
|
||||
'domain': [('res_id','in',ids),('res_model','=',self._name)],
|
||||
'domain': [('res_id','=',message_pool.res_id),('res_model','=',message_pool.model)],
|
||||
'nodestroy': True
|
||||
})
|
||||
return action_data
|
||||
|
||||
@@ -135,16 +135,6 @@
|
||||
</record>
|
||||
|
||||
<!-- Emails action-->
|
||||
<record model="ir.actions.act_window" id="action_view_mailgate_message">
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">mailgate.message</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="domain">[('history', '=', True)]</field>
|
||||
<field name="view_id" ref="view_mailgate_message_tree"/>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_view_mailgate_thread">
|
||||
<field name="name">Mailgateway Threads</field>
|
||||
<field name="res_model">mailgate.thread</field>
|
||||
@@ -196,18 +186,9 @@
|
||||
view_id="view_mailgate_message_tree"
|
||||
/>
|
||||
|
||||
|
||||
<menuitem name="Emails" id="menu_base_config_mail"
|
||||
parent="base.menu_base_partner" sequence="5" />
|
||||
|
||||
<menuitem name="Emails" id="menu_mailgate_message"
|
||||
parent="menu_base_config_mail"
|
||||
action="mail_gateway.action_view_mailgate_message"
|
||||
/>
|
||||
|
||||
<act_window
|
||||
id="act_res_partner_open_email" name="Attachments"
|
||||
res_model="ir.attachment"
|
||||
res_model="ir.attachment"
|
||||
src_model="mailgate.message"
|
||||
domain="[('res_id', '=', res_id),('res_model','=',model)]"/>
|
||||
|
||||
|
||||
@@ -29,10 +29,9 @@
|
||||
<attribute name="string">Configure</attribute>
|
||||
</xpath>
|
||||
<group colspan="8">
|
||||
<field name="marketing_campaign" />
|
||||
<field name="email_template" />
|
||||
<field name="crm_profiling" />
|
||||
<field name="marketing_campaign" />
|
||||
<field name="marketing_campaign_mailchimp" />
|
||||
</group>
|
||||
</data>
|
||||
</field>
|
||||
|
||||
@@ -29,10 +29,8 @@ class marketing_installer(osv.osv_memory):
|
||||
help="Helps you to design templates of emails and integrate them in your different processes."),
|
||||
'marketing_campaign':fields.boolean('Marketing Campaigns',
|
||||
help="Helps you to manage marketing campaigns and automate actions and communication steps."),
|
||||
'marketing_campaign_mailchimp':fields.boolean('Mailchimp Integration',
|
||||
help="This modules integrate mailchimp.com's service with OpenERP to automate mass mailings."),
|
||||
'crm_profiling':fields.boolean('Profiling Tools',
|
||||
help="Helps you to perform segmentation within partners and design segmentation questionnaires")
|
||||
help="Helps you to perform segmentation of partners and design segmentation questionnaires")
|
||||
}
|
||||
marketing_installer()
|
||||
|
||||
|
||||
@@ -84,8 +84,8 @@
|
||||
<field name="search_view_id" ref="view_campaign_analysis_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Reporting" id="base.menu_report_association" parent="base.marketing_menu"/>
|
||||
<menuitem action="action_campaign_analysis_all" id="menu_action_campaign_analysis_all" parent="base.menu_report_association" sequence="2"/>
|
||||
<menuitem name="Reporting" id="base.menu_report_marketing" parent="base.marketing_menu"/>
|
||||
<menuitem action="action_campaign_analysis_all" id="menu_action_campaign_analysis_all" parent="base.menu_report_marketing" sequence="2"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
|
||||
<!--
|
||||
Process
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_process_membershipprocess0" model="process.process">
|
||||
<field eval=""""Membership Process"""" name="name"/>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field eval="1" name="active"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Node
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_node_membershipproduct0" model="process.node">
|
||||
<field name="menu_id" ref="membership.menu_membership_products"/>
|
||||
<field name="model_id" ref="product.model_product_product"/>
|
||||
@@ -25,7 +25,7 @@
|
||||
<field name="process_id" ref="process_process_membershipprocess0"/>
|
||||
<field eval="1" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_waitingmember0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -35,7 +35,7 @@
|
||||
<field name="process_id" ref="process_process_membershipprocess0"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_invoicedmember0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -45,7 +45,7 @@
|
||||
<field name="process_id" ref="process_process_membershipprocess0"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_paidmember0" model="process.node">
|
||||
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
|
||||
<field name="model_id" ref="account.model_account_invoice"/>
|
||||
@@ -56,7 +56,7 @@
|
||||
<field eval=""""object.state=='paid'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_setassociation0" model="process.node">
|
||||
<field name="menu_id" ref="membership.menu_members"/>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
@@ -67,7 +67,7 @@
|
||||
<field eval=""""object.state=='paid'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_node_associatedmember0" model="process.node">
|
||||
<field name="menu_id" ref="membership.menu_members"/>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
@@ -78,62 +78,57 @@
|
||||
<field eval=""""object.state=='associated'"""" name="model_states"/>
|
||||
<field eval="0" name="flow_start"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--
|
||||
Process Transition
|
||||
-->
|
||||
|
||||
|
||||
<record id="process_transition_producttomember0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Product to member"""" name="name"/>
|
||||
<field eval=""""Define product for membership."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_waitingmember0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_membershipproduct0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_waitingtoinvoice0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Waiting to invoice"""" name="name"/>
|
||||
<field eval=""""Draft invoice is now open."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_invoicedmember0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_waitingmember0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_action_create0" model="process.transition.action">
|
||||
<field eval=""""invoice_open"""" name="action"/>
|
||||
<field eval=""""object"""" name="state"/>
|
||||
<field eval=""""Create"""" name="name"/>
|
||||
<field name="transition_id" ref="process_transition_waitingtoinvoice0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_invoicetopaid0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Invoice to paid"""" name="name"/>
|
||||
<field eval=""""Invoice is be paid."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_paidmember0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_invoicedmember0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_invoicetoassociate0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""invoice to associate"""" name="name"/>
|
||||
<field eval=""""Invoiced member may be Associated member."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_associatedmember0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_invoicedmember0"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="process_transition_associationpartner0" model="process.transition">
|
||||
<field eval="[(6,0,[])]" name="role_ids"/>
|
||||
<field eval="[(6,0,[])]" name="transition_ids"/>
|
||||
<field eval=""""Association Partner"""" name="name"/>
|
||||
<field eval=""""Associated partner."""" name="note"/>
|
||||
<field model="process.node" name="target_node_id" ref="process_node_associatedmember0"/>
|
||||
<field model="process.node" name="source_node_id" ref="process_node_setassociation0"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -85,7 +85,6 @@
|
||||
],
|
||||
'demo_xml': [
|
||||
'mrp_demo.xml',
|
||||
'board_manufacturing_demo.xml'
|
||||
],
|
||||
'test': [
|
||||
'test/mrp_procurement.yml',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user