merge from the tiny trunk addons

bzr revid: mga@tinyerp.com-20081127085857-m9cs53x8d5elg923
This commit is contained in:
Mantavya Gajjar
2008-11-27 14:28:57 +05:30
56 changed files with 1889 additions and 688 deletions
+2 -1
View File
@@ -59,7 +59,8 @@
"project/project_report.xml",
"product_view.xml",
"account_assert_test.xml",
"process/invoice_process.xml",
"process/customer_invoice_process.xml",
"process/supplier_invoice_process.xml",
"process/statement_process.xml",
],
"translations" : {
+4 -17
View File
@@ -1032,23 +1032,10 @@ class account_move(osv.osv):
}, context, check=False)
ok = False
if ok:
obj_line=self.browse(cr, uid, ids[0])
for move in self.browse(cr, uid, ids, context):
for obj_line in move.line_id:
#create analytic lines
if obj_line.analytic_account_id:
vals_lines={
'name': obj_line.name,
'date': obj_line.date,
'account_id': obj_line.analytic_account_id.id,
'unit_amount':obj_line.quantity,
'amount': obj_line.debit or obj_line.credit,
'general_account_id': obj_line.account_id.id,
'journal_id': obj_line.journal_id.analytic_journal_id.id,
'ref': obj_line.ref,
'move_id':obj_line.id
}
self.pool.get('account.analytic.line').create(cr,uid,vals_lines)
list_ids = []
for tmp in move.line_id:
list_ids.append(tmp.id)
self.pool.get('account.move.line').create_analytic_lines(cr, uid, list_ids, context)
return ok
account_move()
+32 -1
View File
@@ -58,6 +58,34 @@ class account_move_line(osv.osv):
del data[f]
return data
def create_analytic_lines(self, cr, uid, ids, context={}):
for obj_line in self.browse(cr, uid, ids, context):
if obj_line.analytic_account_id:
amt = (obj_line.credit or 0.0) - (obj_line.debit or 0.0)
vals_lines={
'name': obj_line.name,
'date': obj_line.date,
'account_id': obj_line.analytic_account_id.id,
'unit_amount':obj_line.quantity,
'product_id': obj_line.product_id and obj_line.product_id.id or False,
'product_uom_id': obj_line.product_uom_id and obj_line.product_uom_id.id or False,
'amount': amt,
'general_account_id': obj_line.account_id.id,
'journal_id': obj_line.journal_id.analytic_journal_id.id,
'ref': obj_line.ref,
'move_id':obj_line.id
}
new_id = self.pool.get('account.analytic.line').create(cr,uid,vals_lines)
return True
def _default_get_move_form_hook(self, cursor, user, data):
'''Called in the end of default_get method for manual entry in account_move form'''
if data.has_key('analytic_account_id'):
del(data['analytic_account_id'])
if data.has_key('account_tax_id'):
del(data['account_tax_id'])
return data
def _default_get(self, cr, uid, fields, context={}):
# Compute simple values
data = super(account_move_line, self).default_get(cr, uid, fields, context)
@@ -86,6 +114,7 @@ class account_move_line(osv.osv):
s = -total_new
data['debit'] = s>0 and s or 0.0
data['credit'] = s<0 and -s or 0.0
data = self._default_get_move_form_hook(cr, uid, data)
return data
# Ends: Manual entry from account.move form
@@ -278,6 +307,8 @@ class account_move_line(osv.osv):
_columns = {
'name': fields.char('Name', size=64, required=True),
'quantity': fields.float('Quantity', digits=(16,2), help="The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very usefull for some reports."),
'product_uom_id': fields.many2one('product.uom', 'UoM'),
'product_id': fields.many2one('product.product', 'Product'),
'debit': fields.float('Debit', digits=(16,2)),
'credit': fields.float('Credit', digits=(16,2)),
'account_id': fields.many2one('account.account', 'Account', required=True, ondelete="cascade", domain=[('type','<>','view'), ('type', '<>', 'closed')], select=2),
@@ -863,7 +894,7 @@ class account_move_line(osv.osv):
'account_tax_id': False,
'tax_code_id': tax[tax_code],
'tax_amount': tax[tax_sign] * abs(tax['amount']),
'account_id': tax[account_id],
'account_id': tax[account_id] or vals['account_id'],
'credit': tax['amount']<0 and -tax['amount'] or 0.0,
'debit': tax['amount']>0 and tax['amount'] or 0.0,
}
+9 -4
View File
@@ -247,10 +247,14 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Account Journal">
<field name="name" select="1"/>
<field name="active" select="1"/>
<field name="code" select="1"/>
<field name="type"/>
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="code" select="1"/>
<field name="active" select="1"/>
<field name="type"/>
<field name="refund_journal" attrs="{'readonly':[('type','=','general'),('type','=','cash'),('type','=','situation')]}"/>
</group>
<notebook colspan="4">
<page string="General Information">
<field name="view_id"/>
@@ -853,6 +857,7 @@
<field name="ref"/>
<field name="debit" sum="Total Debit"/>
<field name="credit" sum="Total Credit"/>
<field name="analytic_account_id"/>
<field name="state"/>
</tree>
</field>
+33
View File
@@ -171,6 +171,18 @@ your own chart of account.
<field model="account.account" name="default_debit_account_id" search="[('type','=','receivable')]"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="refund_sales_journal" model="account.journal">
<field name="name">x Sales Credit Note Journal</field>
<field name="code">SCNJ</field>
<field name="type">sale</field>
<field name="refund_journal">True</field>
<field name="view_id" ref="account_journal_view"/>
<field name="sequence_id" ref="sequence_sale_journal"/>
<field model="account.account" name="default_credit_account_id" search="[('type','=','receivable')]"/>
<field model="account.account" name="default_debit_account_id" search="[('type','=','receivable')]"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="expenses_journal" model="account.journal">
<field name="name">x Expenses Journal</field>
<field name="code">EXJ</field>
@@ -181,6 +193,17 @@ your own chart of account.
<field model="account.account" name="default_credit_account_id" search="[('type','=','payable')]"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="refund_expenses_journal" model="account.journal">
<field name="name">x Expenses Credit Notes Journal</field>
<field name="code">ECNJ</field>
<field name="type">purchase</field>
<field name="refund_journal">True</field>
<field name="view_id" ref="account_journal_view"/>
<field name="sequence_id" ref="sequence_purchase_journal"/>
<field model="account.account" name="default_debit_account_id" search="[('type','=','payable')]"/>
<field model="account.account" name="default_credit_account_id" search="[('type','=','payable')]"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="bank_journal" model="account.journal">
<field name="name">x Bank Journal</field>
@@ -192,6 +215,16 @@ your own chart of account.
<field model="account.account" name="default_credit_account_id" ref="cash"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="check_journal" model="account.journal">
<field name="name">x Checks Journal</field>
<field name="code">CHK</field>
<field name="type">cash</field>
<field name="view_id" ref="account_journal_bank_view"/>
<field name="sequence_id" ref="sequence_journal"/>
<field model="account.account" name="default_debit_account_id" ref="cash"/>
<field model="account.account" name="default_credit_account_id" ref="cash"/>
<field name="user_id" ref="base.user_root"/>
</record>
<!--
Product income and expense accounts, default parameters
+2
View File
@@ -611,6 +611,8 @@ class account_invoice(osv.osv):
'tax_amount': x.get('tax_amount', False),
'ref':x.get('ref',False),
'quantity':x.get('quantity',1.00),
'product_id':x.get('product_id', False),
'product_uom_id':x.get('uos_id',False),
'analytic_account_id':x.get('account_analytic_id',False),
}
@@ -0,0 +1,195 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_invoiceworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;Customer Invoice flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
<field eval="&quot;&quot;&quot;Customer Invoice Workflow&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Node
-->
<record id="process_node_analytic0" model="process.node">
<field name="menu_id" ref="account.account_analytic_def_account"/>
<field name="model_id" ref="account.model_account_analytic_account"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Analytic&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Analytic costs to reinvoice purchases, timesheets, ...&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field name="subflow_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'close')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_draftinvoices0" model="process.node">
<field name="menu_id" ref="account.menu_invoice_draft"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Invoices&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Proposed invoice to be checked, validated and printed&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_invoiceinvoice0" model="process.node">
<field name="menu_id" ref="account.menu_finance_invoice"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Have a number and entries are generated&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_accountingentries0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_form"/>
<field name="model_id" ref="account.model_account_move"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Accounting Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Validated accounting entries.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_bankstatement0" model="process.node">
<field name="menu_id" ref="account.menu_bank_statement_tree2"/>
<field name="model_id" ref="account.model_account_bank_statement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Bank Statement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Statement encoding produces payment entries&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_paymententries0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_form"/>
<field name="model_id" ref="account.model_account_move_line"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Payment Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Can be draft or validated&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'valid')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_reconciliation0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_search"/>
<field name="model_id" ref="account.model_account_move_reconcile"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Reconciliation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconciliation of entries from invoice(s) and payment(s)&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='valid'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_paidinvoice0" model="process.node">
<field name="menu_id" ref="account.menu_action_invoice_tree1"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Paid invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Paid invoice when reconciled.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='paid'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="res_roles_invoice0" model="res.roles">
<field eval="&quot;&quot;&quot;Invoice&quot;&quot;&quot;" name="name"/>
</record>
<record id="account.t5" model="workflow.transition">
<field name="role_id" ref="res_roles_invoice0"/>
</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="&quot;&quot;&quot;analytic Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;From analytic accounts, Create invoice.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_draftinvoices0"/>
<field model="process.node" name="source_node_id" ref="process_node_analytic0"/>
</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="&quot;&quot;&quot;Customer Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Number of entries are generated&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_invoiceinvoice0"/>
<field model="process.node" name="source_node_id" ref="process_node_draftinvoices0"/>
<field eval="[(6,0,[ref('account.t5')])]" name="transition_ids"/>
</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="&quot;&quot;&quot;Valid Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Valid entries from invoice&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_accountingentries0"/>
<field model="process.node" name="source_node_id" ref="process_node_invoiceinvoice0"/>
</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="&quot;&quot;&quot;Entries Reconcile&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconcile Entries.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_reconciliation0"/>
<field model="process.node" name="source_node_id" ref="process_node_accountingentries0"/>
</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="&quot;&quot;&quot;Statement Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;From statement, create entries&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_paymententries0"/>
<field model="process.node" name="source_node_id" ref="process_node_bankstatement0"/>
</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="&quot;&quot;&quot;Payment Reconcile&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconcilate the entries from payment&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_reconciliation0"/>
<field model="process.node" name="source_node_id" ref="process_node_paymententries0"/>
</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="&quot;&quot;&quot;Reconcile Paid&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Paid invoice when reconciled.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_paidinvoice0"/>
<field model="process.node" name="source_node_id" ref="process_node_reconciliation0"/>
</record>
<!--
Process Action
-->
<record id="process_transition_action_createentries0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_move_create&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Create entry&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_customerinvoice0"/>
</record>
</data>
</openerp>
+31 -50
View File
@@ -26,6 +26,17 @@
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_manually0" model="process.node">
<field name="menu_id" ref="account.menu_bank_statement_tree2"/>
<field name="model_id" ref="account.model_account_bank_statement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Manually&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Encode manually the statement&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_statementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_importinvoice0" model="process.node">
<field name="menu_id" ref="account.menu_bank_statement_tree2"/>
@@ -43,47 +54,24 @@
<field name="model_id" ref="account.model_account_bank_statement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft statement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Set starting and ending balance if bank statement&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Set starting and ending balance for control&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_statementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_confirmedstatement0" model="process.node">
<field name="menu_id" ref="account.menu_bank_statement_tree"/>
<field name="model_id" ref="account.model_account_bank_statement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Confirmed statement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Confirmed with/with out Reconciliation and Real balance=Computed balance&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_statementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='confirm'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_accountingstatemententries0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_search"/>
<field name="model_id" ref="account.model_account_move_line"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Accounting Statement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Accounting entries can be draft or validated&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Accounting entries at statement's confirmation&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_statementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'valid')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_reconciliationofentries0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_search"/>
<field name="model_id" ref="account.model_account_move_line"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Reconciliation of Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconcilation of the entries with invoice.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_statementworkflow0"/>
<field name="subflow_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='valid'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
<!--
Process Transition
-->
@@ -95,6 +83,15 @@
<field model="process.node" name="target_node_id" ref="process_node_draftstatement0"/>
<field model="process.node" name="source_node_id" ref="process_node_electronicfile0"/>
</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="&quot;&quot;&quot;Manually statement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Encode manually statement comes into the draft statement&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_draftstatement0"/>
<field model="process.node" name="source_node_id" ref="process_node_manually0"/>
</record>
<record id="process_transition_invoiceimport0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
@@ -110,28 +107,10 @@
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Confirm statement from draft&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Confirm statement with/without reconciliation from draft statement&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_confirmedstatement0"/>
<field model="process.node" name="target_node_id" ref="process_node_accountingstatemententries0"/>
<field model="process.node" name="source_node_id" ref="process_node_draftstatement0"/>
</record>
<record id="process_transition_confirmaccountingentries0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Confirm Accounting entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After confirming statement, it creates Entries and its entry lines&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_accountingstatemententries0"/>
<field model="process.node" name="source_node_id" ref="process_node_confirmedstatement0"/>
</record>
<record id="process_transition_accountentryreconcile0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Account entry reconcile&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconciliation of entries of accounting entries&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_reconciliationofentries0"/>
<field model="process.node" name="source_node_id" ref="process_node_accountingstatemententries0"/>
</record>
<record id="process_transition_statemententries0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -141,9 +120,11 @@
<field model="process.node" name="source_node_id" ref="process_node_bankstatement0"/>
</record>
<!--
Process Action
-->
<!--
Process Action
-->
<record id="process_transition_action_draftconfirmstatement0" model="process.transition.action">
<field eval="&quot;&quot;&quot;button_confirm&quot;&quot;&quot;" name="action"/>
@@ -0,0 +1,175 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_supplierinvoiceworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;Supplier Invoice flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
<field eval="&quot;&quot;&quot;Supplier Invoice Workflow&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Node
-->
<record id="process_node_supplieranalytic0" model="process.node">
<field name="menu_id" ref="account.account_analytic_def_account"/>
<field name="model_id" ref="account.model_account_analytic_account"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Analytic&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Analytic costs to reinvoice purchases, timesheets, ...&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'close')&quot;&quot;&quot;" 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_invoice_draft"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Invoices&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Pre-generated invoice from control&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" 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_invoice"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Have a number and entries are generated&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" 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_tree2"/>
<field name="model_id" ref="account.model_account_bank_statement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Bank Statement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Statement encoding produces payment entries&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_supplieraccountingentries0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_form"/>
<field name="model_id" ref="account.model_account_move"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Accounting Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Validated accounting entries.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_supplierpaymentorder0" model="process.node">
<field name="menu_id" ref="account.menu_action_move_line_search"/>
<field name="model_id" ref="account.model_account_move_line"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Payment Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Select invoices you want to pay and manages advances&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" 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_action_move_line_search"/>
<field name="model_id" ref="account.model_account_move_reconcile"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Reconciliation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconciliation of entries from invoice(s) and payment(s)&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='valid'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Paid invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Paid invoice when reconciled.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='paid'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_supplieranalyticinvoice0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;analytic Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;From analytic accounts, Create invoice.&quot;&quot;&quot;" 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_supplieranalytic0"/>
</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="&quot;&quot;&quot;Customer Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Number of entries are generated&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_supplierinvoiceinvoice0"/>
<field model="process.node" name="source_node_id" ref="process_node_supplierdraftinvoices0"/>
<field eval="[(6,0,[ref('account.t5')])]" 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="&quot;&quot;&quot;Valid Entries&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Valid entries from invoice&quot;&quot;&quot;" 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="&quot;&quot;&quot;Entries Reconcile&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconcile Entries.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Payment Reconcilation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconcilation of entries from payment order.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Payment Reconcilation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reconcilation of entries from payment order.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Reconcile Paid&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Paid invoice when reconciled.&quot;&quot;&quot;" 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>
@@ -280,28 +280,29 @@ class account_move_line(osv.osv):
'analytics_id':fields.many2one('account.analytic.plan.instance','Analytic Distribution'),
}
def _analytic_update(self, cr, uid, ids, context):
if self.called:
self.called=False
return False
def _default_get_move_form_hook(self, cursor, user, data):
data = super(account_move_line, self)._default_get_move_form_hook(cursor, user, data)
if data.has_key('analytics_id'):
del(data['analytics_id'])
return data
obj_line=self.pool.get('account.analytic.line')
for line in self.browse(cr, uid, ids, context):
def create_analytic_lines(self, cr, uid, ids, context={}):
super(account_move_line, self).create_analytic_lines(cr, uid, ids, context)
for line in self.browse(cr, uid, ids, context):
if line.analytics_id:
toremove = obj_line.search(cr, uid, [('move_id','=',line.id)], context=context)
toremove = self.pool.get('account.analytic.line').search(cr, uid, [('move_id','=',line.id)], context=context)
if toremove:
obj_line.unlink(cr, uid, toremove, context=context)
obj_line.unlink(cr, uid, toremove, context=context)
for line2 in line.analytics_id.account_ids:
val = (line.debit or 0.0) - (line.credit or 0.0)
val = (line.credit or 0.0) - (line.debit or 0.0)
amt=val * (line2.rate/100)
al_vals={
'name': line.name,
'date': line.date,
'unit_amount':1,
'product_id':12,
'account_id': line2.analytic_account_id.id,
'unit_amount': line.quantity,
'product_id': line.product_id and line.product_id.id or False,
'product_uom_id': line.product_uom_id and line.product_uom_id.id or False,
'amount': amt,
'general_account_id': line.account_id.id,
'move_id': line.id,
@@ -309,25 +310,7 @@ class account_move_line(osv.osv):
'ref': line.ref,
}
ali_id=self.pool.get('account.analytic.line').create(cr,uid,al_vals)
self.called=True
return True
def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
self.called=False
if ('analytics_id' in vals) and (not vals['analytics_id']):
for line in self.browse(cr, uid, ids, context):
toremove = self.pool.get('account.analytic.line').search(cr, uid, [('move_id','=',line.id)], context=context)
if toremove:
self.pool.get('account.analytic.line').unlink(cr, uid, toremove, context=context)
result = super(account_move_line, self).write(cr, uid, ids, vals, context, check, update_check)
self._analytic_update(cr, uid, ids, context)
return result
def create(self, cr, uid, vals, context=None, check=True):
self.called=False
result = super(account_move_line, self).create(cr, uid, vals, context, check)
self._analytic_update(cr, uid, [result], context)
return result
return True
account_move_line()
@@ -17,6 +17,27 @@
</record>
<record model="ir.ui.view" id="view_account_move_form_inherit">
<field name="name">account.move.form.inherit</field>
<field name="model">account.move</field>
<field name="type">form</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<field name="analytic_account_id" position="replace">
<field name="analytics_id" />
</field>
</field>
</record>
<record id="account.journal_col11" model="account.journal.column">
<field eval="&quot;&quot;&quot;Analytic Distribution&quot;&quot;&quot;" name="name"/>
<field eval="11" name="sequence"/>
<field name="view_id" ref="account.account_journal_view"/>
<field eval="0" name="required"/>
<field eval="&quot;&quot;&quot;analytics_id&quot;&quot;&quot;" name="field"/>
<field eval="0" name="readonly"/>
</record>
<record model="ir.ui.view" id="view_move_line_form_inherit">
<field name="name">account.move.line.form.inherit</field>
<field name="model">account.move.line</field>
@@ -29,17 +50,6 @@
</field>
</record>
<record model="ir.ui.view" id="view_move_line_tree_inherit">
<field name="name">account.move.line.tree.inherit</field>
<field name="model">account.move.line</field>
<field name="type">tree</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="arch" type="xml">
<field name="move_id" position="after">
<field name="analytics_id" />
</field>
</field>
</record>
<!-- Replace analytic_id with analytics_id in account.invoice.line -->
@@ -68,6 +78,7 @@
</field>
</record>
<!-- views for account.analytic.plan.instance -->
<record model="ir.ui.view" id="account_analytic_plan_instance_form">
<field name="name">account.analytic.plan.instance.form</field>
<field name="model">account.analytic.plan.instance</field>
@@ -88,7 +99,6 @@
</field>
</record>
<record model="ir.ui.view" id="account_analytic_plan_instance_tree">
<field name="name">account.analytic.plan.instance.tree</field>
<field name="model">account.analytic.plan.instance</field>
@@ -41,7 +41,7 @@ form = '''<?xml version="1.0"?>
</form>'''
fields = {
'file': {'string':'Select a PDF File', 'type':'binary','required':True,'filters':['*.pdf']},
'file': {'string':'Select a PDF File', 'type':'binary','required':True,'filters':'*.pdf'},
}
@@ -82,6 +82,7 @@ class report_custom(report_int):
obj_user=pool.get('res.users').browse(cr,uid,uid)
self.list['printing_user']=obj_user.name
self.list['company_name']=obj_user.company_id.name
self.list['company_country']=obj_user.company_id.partner_id.country
self.list['company_vat']=obj_user.company_id.partner_id.vat
self.list['printing_time']=time.strftime('%H:%M:%S')
self.list['printing_date']=time.strftime('%D')
+3 -2
View File
@@ -40,14 +40,15 @@
Pay attention that this module converts the existing addresses into "addresses + contacts". It means that some fields of the addresses will be missing (like the contact name), since these are supposed to be defined in an other object.
""",
"depends" : ["base"],
"depends" : ["base", "process"],
"init_xml" : [],
"demo_xml" : [
"base_contact_demo.xml"
],
"update_xml" : [
"security/ir.model.access.csv",
'base_contact_view.xml'
'base_contact_view.xml',
"process/base_contact_process.xml"
],
"active": False,
"installable": True
+3 -3
View File
@@ -116,9 +116,9 @@ class res_partner_job(osv.osv):
_order = 'sequence_contact'
_columns = {
'name': fields.related('address_id','partner_id', type='many2one', relation='res.partner', string='Partner'),
'address_id':fields.many2one('res.partner.address','Address', required=True),
'contact_id':fields.many2one('res.partner.contact','Contact', required=True),
'function_id': fields.many2one('res.partner.function','Job Title', required=True),
'address_id':fields.many2one('res.partner.address','Address'),
'contact_id':fields.many2one('res.partner.contact','Contact', required=True, ondelete='cascade'),
'function_id': fields.many2one('res.partner.function','Job Title'),
'sequence_contact':fields.integer('Sequence (Contact)',help='order of importance of this address in the list of addresses of the linked contact'),
'sequence_partner':fields.integer('Sequence (Partner)',help='order of importance of this job title in the list of job title of the linked partner'),
'email': fields.char('E-Mail', size=240),
@@ -0,0 +1,91 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_basecontactworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;base_contact workflow&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Base contact flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
</record>
<!--
Process node
-->
<record id="process_node_contacts0" model="process.node">
<field name="menu_id" ref="base_contact.menu_partner_contact_form"/>
<field name="model_id" ref="base_contact.model_res_partner_contact"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;People you work with.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Contacts&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_basecontactworkflow0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_partners0" model="process.node">
<field name="menu_id" ref="base.menu_partner_form"/>
<field name="model_id" ref="base.model_res_partner"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Companies you work with.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Partners&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_basecontactworkflow0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_function0" model="process.node">
<field name="menu_id" ref="base_contact.menu_action_res_partner_job"/>
<field name="model_id" ref="base_contact.model_res_partner_job"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Jobs at a same partner address.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Function&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_basecontactworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_addresses0" model="process.node">
<field name="menu_id" ref="base.menu_partner_address_form"/>
<field name="model_id" ref="base.model_res_partner_address"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Working and private addresses.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Addresses&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_basecontactworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_contacttofunction0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Contact to function&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Defines contacts and functions.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_function0"/>
<field model="process.node" name="source_node_id" ref="process_node_contacts0"/>
</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="&quot;&quot;&quot;Function to address&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Define functions and address.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_addresses0"/>
<field model="process.node" name="source_node_id" ref="process_node_function0"/>
</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="&quot;&quot;&quot;Partner to address&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Define partners and their addresses.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_addresses0"/>
<field model="process.node" name="source_node_id" ref="process_node_partners0"/>
</record>
</data>
</openerp>
@@ -232,6 +232,21 @@ class base_module_record(osv.osv):
del result[v]
return result
def _create_function(self, cr, uid, doc, model, name, record_id):
print 'Create Function', model, name, record_id
record = doc.createElement('function')
record.setAttribute("name", name)
record.setAttribute("model", model)
record_list = [record]
value = doc.createElement('value')
value.setAttribute('eval', '[ref(\'%s\')]' % (record_id, ))
value.setAttribute('model', model)
record.appendChild(value)
return record_list, False
def _generate_object_xml(self, cr, uid, rec, recv, doc, result=None):
record_list = []
noupdate = False
@@ -245,6 +260,16 @@ class base_module_record(osv.osv):
noupdate = noupdate or update
record_list += record
elif rec[4] in ('menu_create',):
for id in rec[5]:
id,update = self._get_id(cr, uid, rec[3], id)
noupdate = noupdate or update
if not id:
continue
record,update = self._create_function(cr, uid, doc, rec[3], rec[4], id)
noupdate = noupdate or update
record_list += record
elif rec[4]=='create':
id = self._create_id(cr, uid, rec[3],rec[5])
record,noupdate = self._create_record(cr, uid, doc, rec[3], rec[5], id)
@@ -306,7 +306,7 @@ from
def _aggregation_error(self, cr, uid, ids):
aggregate_columns = ('int','float')
apply_functions = ('sum','min','max','avg')
apply_functions = ('sum','min','max','avg','count')
this_objs = self.browse(cr, uid, ids)
for obj in this_objs:
for fld in obj.field_ids:
@@ -349,7 +349,7 @@ class report_creator_field(osv.osv):
'sequence': fields.integer('Sequence'),
'field_id': fields.many2one('ir.model.fields', 'Field'),
'report_id': fields.many2one('base_report_creator.report','Report', on_delete='cascade'),
'group_method': fields.selection([('group','Grouped'),('sum','Sum'),('min','Minimum'),('max','Maximum'),('avg','Average')], 'Grouping Method', required=True),
'group_method': fields.selection([('group','Grouped'),('sum','Sum'),('min','Minimum'),('count','Count'),('max','Maximum'),('avg','Average')], 'Grouping Method', required=True),
'graph_mode': fields.selection([('','/'),('x','X Axis'),('y','Y Axis')], 'Graph Mode'),
'calendar_mode': fields.selection([('','/'),('date_start','Starting Date'),('date_end','Ending Date'),('date_delay','Delay'),('color','Uniq Colors')], 'Calendar Mode'),
}
+3
View File
@@ -30,6 +30,9 @@
from osv import osv
from osv import fields
def mult_add(i, j):
"""Sum each digits of the multiplication of i and j."""
return reduce(lambda x, y: x + int(y), str(i*j), 0)
class res_partner(osv.osv):
_inherit = 'res.partner'
+1 -1
View File
@@ -78,7 +78,7 @@ meetings, eso.
# "crm_phonecall_data.xml",
# "crm_phonecall_menu.xml",
"security/ir.model.access.csv",
"process/crm_configuration_process.xml",
# "process/crm_configuration_process.xml",
],
"active": False,
"installable": True
@@ -1,106 +1,132 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<data>
<!--
Process
-->
<record id="process_process_contractworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;Contracts flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
<field eval="&quot;&quot;&quot;Contract Workflow&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Node
-->
<record id="process_node_leads0" model="process.node">
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Leads&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Premier Contact Leads&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_opportunities0" model="process.node">
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Opportunities&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Business Opportunities&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_accord0" model="process.node">
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Accord&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Accord Client Contract&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='done'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_contractanalytic0" model="process.node">
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Contract Analytic&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Analytic Accounts&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_contractpricelist0" model="process.node">
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Contract Pricelist&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Contract Volume (pricelist)&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_leadopportunity0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Lead Opportunity&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Creating business opportunities from leads&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_opportunities0"/>
<field model="process.node" name="source_node_id" ref="process_node_leads0"/>
</record>
<record id="process_transition_opportunitiesaccord0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Opportunities Accord&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;When leads are confirmed&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_accord0"/>
<field model="process.node" name="source_node_id" ref="process_node_opportunities0"/>
</record>
<record id="process_transition_accordanalytic0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Accord Analytic&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Goes into the Analytic&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_contractanalytic0"/>
<field model="process.node" name="source_node_id" ref="process_node_accord0"/>
</record>
<record id="process_transition_accordpricelist0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Accord Pricelist&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Goes into the Pricelist&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_contractpricelist0"/>
<field model="process.node" name="source_node_id" ref="process_node_accord0"/>
</record>
<field eval="&quot;&quot;&quot;Contracts flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
<field eval="&quot;&quot;&quot;Contract Workflow&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Node
-->
<record id="process_node_leads0" model="process.node">
<field name="menu_id" ref="crm_configuration.menu_crm_case_categ0_act_leads_all"/>
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Leads&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Very first contact with new prospect&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_partner0" model="process.node">
<field name="menu_id" ref="base.menu_partner_form"/>
<field name="model_id" ref="base.model_res_partner"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Partner&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Convert to prospect to business partner&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_opportunities0" model="process.node">
<field name="menu_id" ref="crm_configuration.menu_crm_case_categ0_act_oppor11"/>
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Opportunities&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;When a real project/opportunity is detected&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_meeting0" model="process.node">
<field name="menu_id" ref="crm_configuration.menu_crm_case_category_act_meetings"/>
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Meeting&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Schedule a normal or phone meeting&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_contractanalytic0" model="process.node">
<field name="menu_id" ref="account.account_analytic_def_account"/>
<field name="model_id" ref="account.model_account_analytic_account"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Analytic account&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Reflect the contract made with customer&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_contractpricelist0" model="process.node">
<field name="menu_id" ref="product.menu_product_pricelist_action2"/>
<field name="model_id" ref="product.model_product_pricelist"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Contract Pricelist&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Contract Volume (pricelist)&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_contractworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_leadopportunity0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Lead Opportunity&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Creating business opportunities from leads&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_opportunities0"/>
<field model="process.node" name="source_node_id" ref="process_node_leads0"/>
</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="&quot;&quot;&quot;Lead Partner&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Prospect is converting to business partner&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_partner0"/>
<field model="process.node" name="source_node_id" ref="process_node_leads0"/>
</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="&quot;&quot;&quot;Opportunity Meeting&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Normal or phone meeting for opportunity&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_meeting0"/>
<field model="process.node" name="source_node_id" ref="process_node_opportunities0"/>
</record>
<record id="process_transition_opportunitypricelist0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Opportunity Pricelist&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Opporunity convert to the Pricelist&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_contractpricelist0"/>
<field model="process.node" name="source_node_id" ref="process_node_opportunities0"/>
</record>
<record id="process_transition_opportunityanalytic0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Opportunity Analytic&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Analytic Account&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_contractanalytic0"/>
<field model="process.node" name="source_node_id" ref="process_node_opportunities0"/>
</record>
</data>
</openerp>
</data>
</openerp>
+4 -4
View File
@@ -113,8 +113,8 @@
<field name="title" select="1"/>
<field name="partner_id"/>
<field name="user_id"/>
<field name="create_uid" select="1"/>
<field name="create_date" select="1"/>
<field name="create_uid" select="2"/>
<field name="create_date" select="2"/>
</group>
<notebook colspan="4">
<page string="Attachment">
@@ -125,7 +125,7 @@
</group>
<group col="2" colspan="2">
<separator string="Attached To" colspan="2"/>
<field name="res_model" select="1" readonly="1"/>
<field name="res_model" select="2" readonly="1"/>
<field name="res_id" readonly="1"/>
</group>
<separator string="Preview" colspan="4"/>
@@ -151,7 +151,7 @@
<group colspan="2" col="2">
<separator string="File Information" colspan="2"/>
<field name="file_size" readonly="1"/>
<field name="parent_id" readonly="1"/>
<field name="parent_id" readonly="1" select="2"/>
</group>
</page><page string="Notes">
<field colspan="4" name="description" nolabel="1"/>
+19 -9
View File
@@ -2,20 +2,30 @@ import threading
import ftpserver
import authorizer
import abstracted_fs
import netsvc
PORT = 8021
HOST = ''
class ftp_server(threading.Thread):
def run(self):
autho = authorizer.authorizer()
ftpserver.FTPHandler.authorizer = autho
ftpserver.max_cons = 300
ftpserver.max_cons_per_ip = 50
ftpserver.FTPHandler.abstracted_fs = abstracted_fs.abstracted_fs
address = (HOST, PORT)
ftpd = ftpserver.FTPServer(address, ftpserver.FTPHandler)
ftpd.serve_forever()
def log(self, level, message):
logger = netsvc.Logger()
logger.notifyChannel('FTP', level, message)
def run(self):
autho = authorizer.authorizer()
ftpserver.FTPHandler.authorizer = autho
ftpserver.max_cons = 300
ftpserver.max_cons_per_ip = 50
ftpserver.FTPHandler.abstracted_fs = abstracted_fs.abstracted_fs
ftpserver.log = lambda msg: self.log(netsvc.LOG_INFO, msg)
ftpserver.logline = lambda msg: None
ftpserver.logerror = lambda msg: self.log(netsvc.LOG_ERROR, msg)
address = (HOST, PORT)
ftpd = ftpserver.FTPServer(address, ftpserver.FTPHandler)
ftpd.serve_forever()
ds = ftp_server()
ds.start()
+25 -12
View File
@@ -12,6 +12,10 @@ import netsvc
import os
from service import security
def log(message):
logger = netsvc.Logger()
logger.notifyChannel('DMS', netsvc.LOG_ERROR, message)
class file_wrapper(StringIO.StringIO):
def __init__(self, sstr='', ressource_id=False, dbname=None, uid=1, name=''):
StringIO.StringIO.__init__(self, sstr)
@@ -68,15 +72,25 @@ class abstracted_fs:
def db_list(self):
s = netsvc.LocalService('db')
result = s.list()
self.db_name_list=[]
self.db_name_list = []
for db_name in result:
db = pooler.get_db_only(db_name)
cr = db.cursor()
cr.execute("select id from ir_module_module where name like 'document%' and state='installed' ")
res=cr.fetchone()
if res and len(res):
self.db_name_list.append(db_name)
cr.close()
db, cr = None, None
try:
db = pooler.get_db_only(db_name)
cr = db.cursor()
cr.execute("SELECT 1 FROM pg_class WHERE relkind = 'r' AND relname = 'ir_module_module'")
if not cr.fetchone():
continue
cr.execute("select id from ir_module_module where name like 'document%' and state='installed' ")
res = cr.fetchone()
if res and len(res):
self.db_name_list.append(db_name)
finally:
if cr is not None:
cr.close()
if db is not None:
pooler.close_db(db_name)
return self.db_name_list
# Ok
@@ -210,7 +224,7 @@ class abstracted_fs:
s = file_wrapper('', cid, cr.dbname, uid, )
return s
except Exception,e:
print e
log(e)
raise OSError(1, 'Operation not permited.')
# Ok
@@ -305,7 +319,7 @@ class abstracted_fs:
pool.get('document.directory').create(cr, uid, val)
cr.commit()
except Exception,e:
print e
log(e)
raise OSError(1, 'Operation not permited.')
@@ -344,7 +358,6 @@ class abstracted_fs:
for db in self.db_list():
result.append(false_node(db))
return result
print path.children()
return path.children()
# Ok
@@ -495,7 +508,7 @@ class abstracted_fs:
else:
raise OSError(1, 'Operation not permited.')
except Exception,err:
print err
log(err)
raise OSError(1,'Operation not permited.')
-3
View File
@@ -1754,7 +1754,6 @@ class FTPHandler(asynchat.async_chat):
- (file) file: the file[-like] object to send (if any).
"""
if self.data_channel:
print 'DATA', data
self.respond("125 Data connection already open. Transfer starting.")
if file:
self.data_channel.file_obj = file
@@ -2075,10 +2074,8 @@ class FTPHandler(asynchat.async_chat):
self.fs.close_cr(data)
data = ''
if listing:
print listing
listing.sort()
data = '\r\n'.join(listing) + '\r\n'
print data
self.log('OK NLST "%s". Transfer starting.' %line)
self.push_dtp_data(data)
+14 -4
View File
@@ -17,9 +17,11 @@
-->
<record id="process_node_jobshiring0" model="process.node">
<!--<field name="menu_id" ref="crm_configuration.menu_crm_case_categ0_act11"/>
<field name="model_id" ref="crm.model_crm_case"/> -->
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Jobs hiring&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Jobs hiring to new employees&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Process to search, interview and evaluate new candidates&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_employeecontractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
@@ -54,11 +56,20 @@
<field name="process_id" ref="process_process_employeecontractworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_employeeuser0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Openerp user&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Create openerp user&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_openerpuser0"/>
<field model="process.node" name="source_node_id" ref="process_node_employee0"/>
</record>
<record id="process_transition_employeejob0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -76,7 +87,6 @@
<field model="process.node" name="target_node_id" ref="process_node_employeecontact0"/>
<field model="process.node" name="source_node_id" ref="process_node_employee0"/>
</record>
</data>
</openerp>
-1
View File
@@ -4,7 +4,6 @@
<record id="group_hr_manager" model="res.groups">
<field name="name">Human Resources / Manager</field>
</record>
<record id="group_hr_user" model="res.groups">
<field name="name">Human Resources / User</field>
</record>
+2 -1
View File
@@ -28,10 +28,11 @@
"depends" : ["base","hr",],
"demo_xml" : ["hr_attendance_demo.xml"],
"update_xml" : [
"security/hr_security.xml",
"hr_attendance_view.xml",
"hr_attendance_wizard.xml",
"hr_attendance_report.xml",
"security/ir.model.access.csv",
"security/ir.model.access.csv"
],
"active": False,
"installable": True,
+2 -1
View File
@@ -48,7 +48,8 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_hr_attendance" name="Attendances" parent="hr.menu_hr_root"/>
<menuitem id="menu_hr_attendance" name="Attendances" parent="hr.menu_hr_root"
groups="group_hr_attendance"/>
<menuitem action="open_view_attendance" id="menu_open_view_attendance"
parent="menu_hr_attendance" groups="hr.group_hr_manager"/>
@@ -5,7 +5,8 @@
<wizard id="si_so" model="hr.employee" name="hr.si_so" string="Sign in / Sign out"/>
<wizard id="wizard_attendance_error" keyword="client_print_multi" model="hr.employee" name="hr.timesheet.attendance.report" string="Print Attendance Error Report"/>
<menuitem action="si_so" id="menu_si_so" parent="menu_hr_attendance" type="wizard"/>
<menuitem action="si_so" id="menu_si_so" parent="menu_hr_attendance" type="wizard"
groups="group_hr_attendance"/>
</data>
</openerp>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="group_hr_attendance" model="res.groups">
<field name="name">Human Resources / Attendances User</field>
</record>
</data>
</openerp>
+1
View File
@@ -48,6 +48,7 @@
"hr_expense_workflow.xml",
"hr_expense_view.xml",
"hr_expense_report.xml",
"process/hr_expense_process.xml"
],
"active": False,
"installable": True
@@ -0,0 +1,187 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_expenseworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;Expense flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
<field eval="&quot;&quot;&quot;Expense Workflow&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Expenses&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Employee encode all his expenses&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Confirmed Expenses&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The employee validates his expense sheet&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='confirm'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Refused&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The direct manager refuses the sheet.Reset as draft.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='canceled'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Approved&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The direct manager approves the sheet&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='accepted'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Supplier Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The accoutant validates the sheet&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Reimbursement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The accoutant reimburse the expenses&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='paid'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Reinvoicing&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Some costs may be reinvoices to the customer&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_expenseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" 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="&quot;&quot;&quot;Confirm expense&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Expense is confirmed.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Refuse expense&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Expense is refused.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Approve expense&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Expense is approved.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Supplier Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Creates supplier invoice.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Reimburse expense&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After creating invoice, reimburse expenses&quot;&quot;&quot;" 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="&quot;&quot;&quot;Reinvoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Create Customer invoice&quot;&quot;&quot;" 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="&quot;&quot;&quot;expense_confirm&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Confirm&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_confirmexpense0"/>
</record>
<record id="process_transition_action_refuse0" model="process.transition.action">
<field eval="&quot;&quot;&quot;expense_canceled&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Refuse&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_refuseexpense0"/>
</record>
<record id="process_transition_action_accept0" model="process.transition.action">
<field eval="&quot;&quot;&quot;expense_accept&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Accept&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_approveexpense0"/>
</record>
<record id="process_transition_action_supplierinvoice0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_invoice_create&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Invoice&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_approveinvoice0"/>
</record>
</data>
</openerp>
@@ -2,43 +2,177 @@
<openerp>
<data>
<record id="process_node_secretariatsocial0" model="process.node">
<field name="menu_id" ref="hr_holidays.menu_open_ask_holidays"/>
<!--
Process
-->
<record id="process_process_holidaysworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;Holidays Workflow&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Holidays flow for service company.&quot;&quot;&quot;" name="note"/>
<field eval="1" name="active"/>
</record>
<!--
Process Node
-->
<record id="process_node_holidaysdefinition0" model="process.node">
<field name="menu_id" ref="hr_holidays.menu_action_my_holiday_available"/>
<field name="model_id" ref="hr_holidays.model_hr_holidays_per_user"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Encoding of annual available holidays.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Holidays Definition&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_holidaysworkflow0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_holidaysrequest0" model="process.node">
<field name="menu_id" ref="hr_holidays.menu_action_my_holiday"/>
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Secretariat Social&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Secretariat social&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="hr.process_process_employeecontractworkflow0"/>
<field eval="&quot;&quot;&quot;Employee fills in a request for holidays&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Holidays Request&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_holidaysworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
</record>
<record id="process_node_refused0" model="process.node">
<field name="menu_id" ref="hr_holidays.menu_action_my_holiday_refuse"/>
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;His manager refuses the request&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Refused&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_holidaysworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='refuse'&quot;&quot;&quot;" 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_action_my_holiday_validate"/>
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;His manager approves the request&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Approved&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_holidaysworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='validate'&quot;&quot;&quot;" 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_action_my_holiday_validate"/>
<field name="model_id" ref="hr_holidays.model_hr_holidays"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;The holiday is set in the calendar&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Calendar&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_holidaysworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='validate'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Holidays&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Employee Get holidays&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Encode number of available holidays&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="hr.process_process_employeecontractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'validate', 'confirm', 'refuse', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_transition_employeesocial0" model="process.transition">
<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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Legal Declaration&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Document to declare new employee&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="hr.process_process_employeecontractworkflow0"/>
<field eval="0" name="flow_start"/>
</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="&quot;&quot;&quot;Employee Social&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Social Activity&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_secretariatsocial0"/>
<field eval="&quot;&quot;&quot;Employee Declaration&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Document for employee&quot;&quot;&quot;" 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="&quot;&quot;&quot;Holidays def Request&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If holidays available, employee can take it and fill it.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Refused Request&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Request is refused.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Approved Request&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Request is approved.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Set Holiday&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Holiday is set in the calendar.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Employee Holidays&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Employee get holidays&quot;&quot;&quot;" 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_secretariatsocial0"/>
<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="&quot;&quot;&quot;holidays_confirm&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Confirm&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_holidaysdefrequest0"/>
</record>
<record id="process_transition_action_reufse0" model="process.transition.action">
<field eval="&quot;&quot;&quot;holidays_refuse&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Reufse&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_refusedrequest0"/>
</record>
<record id="process_transition_action_validate0" model="process.transition.action">
<field eval="&quot;&quot;&quot;holidays_validate&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Validate&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_approvedrequest0"/>
</record>
</data>
@@ -11,9 +11,9 @@
<field name="date_from"/>
<field name="date_to"/>
<field name="name"/>
<field name="total_attendance"/>
<field name="total_attendance" groups="hr_attendance.group_hr_attendance"/>
<field name="total_timesheet"/>
<field name="total_difference"/>
<field name="total_difference" groups="hr_attendance.group_hr_attendance"/>
<field name="state"/>
</tree>
</field>
@@ -58,8 +58,8 @@
<field name="sheet_id" select="1"/>
<field name="name" select="1"/>
<field name="total_timesheet"/>
<field name="total_attendance"/>
<field name="total_difference"/>
<field name="total_attendance" groups="hr_attendance.group_hr_attendance"/>
<field name="total_difference" groups="hr_attendance.group_hr_attendance"/>
</form>
</field>
</record>
@@ -74,8 +74,8 @@
<field name="sheet_id"/>
<field name="name"/>
<field name="total_timesheet" sum="Total Timesheet"/>
<field name="total_attendance" sum="Total Attendance"/>
<field name="total_difference" sum="Total Difference"/>
<field name="total_attendance" sum="Total Attendance" groups="hr_attendance.group_hr_attendance"/>
<field name="total_difference" sum="Total Difference" groups="hr_attendance.group_hr_attendance"/>
</tree>
</field>
</record>
@@ -102,21 +102,21 @@
<button icon="gtk-media-next" name="date_next" string="" type="object"/>
</group>
<field colspan="3" context="name=date_current,user_id=user_id" height="100" name="attendances_ids" nolabel="1">
<field colspan="3" context="name=date_current,user_id=user_id" height="100" name="attendances_ids" nolabel="1" groups="hr_attendance.group_hr_attendance">
<tree string="Attendances">
<field name="name"/>
<field name="action"/>
<field invisible="1" name="employee_id"/>
</tree>
</field>
<group col="1" colspan="1">
<group col="1" colspan="1" groups="hr_attendance.group_hr_attendance">
<button name="sign_in" string="Sign In" type="object"/>
<button name="sign_out" string="Sign Out" type="object"/>
</group>
<field name="state_attendance"/>
<field name="total_attendance_day" widget="float_time"/>
<field name="state_attendance" groups="hr_attendance.group_hr_attendance"/>
<field name="total_attendance_day" widget="float_time" groups="hr_attendance.group_hr_attendance"/>
<field colspan="4" context="date=date_current,user_id=user_id" domain="[('name','=',date_current)]" name="timesheet_ids" nolabel="1">
<tree editable="top" string="Timesheet">
<field invisible="1" name="date"/>
@@ -140,9 +140,9 @@
<field colspan="4" name="period_ids" nolabel="1">
<tree colors="red:total_difference&lt;=0.1;blue:total_difference&gt;=0.1" string="Period">
<field name="name"/>
<field name="total_attendance" widget="float_time"/>
<field name="total_attendance" widget="float_time" groups="hr_attendance.group_hr_attendance"/>
<field name="total_timesheet" widget="float_time"/>
<field name="total_difference" widget="float_time"/>
<field name="total_difference" widget="float_time" groups="hr_attendance.group_hr_attendance"/>
</tree>
</field>
<field name="total_attendance" widget="float_time"/>
+3 -2
View File
@@ -25,7 +25,7 @@
"author" : "Tiny",
"category" : "Generic Modules/Association",
"depends" : [
"base", "product", "account",
"base", "product", "account","process"
],
"demo_xml" : [
#"demo_data.xml",
@@ -36,7 +36,8 @@
],
"update_xml" : [
"security/ir.model.access.csv",
"membership_view.xml","membership_wizard.xml"
"membership_view.xml","membership_wizard.xml",
"process/membership_process.xml"
],
"active" : False,
"installable" : True,
@@ -0,0 +1,139 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_membershipworkflow0" model="process.process">
<field eval="&quot;&quot;&quot;Membership workflow&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Membership flow for services companies.&quot;&quot;&quot;" name="note"/>
<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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Define membership product.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Membership product&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_membershipworkflow0"/>
<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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft invoice for membership.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Waiting member&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_membershipworkflow0"/>
<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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Open invoice.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Invoiced member&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_membershipworkflow0"/>
<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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Membership invoice paid.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Paid member&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_membershipworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='paid'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Set an associate member of partner.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Set association&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_membershipworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='paid'&quot;&quot;&quot;" 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"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Member is associated.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Associated member&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_membershipworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='associated'&quot;&quot;&quot;" 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="&quot;&quot;&quot;Product to member&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Define product for membership.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Waiting to invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Draft invoice is now open.&quot;&quot;&quot;" 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="&quot;&quot;&quot;invoice_open&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Create&quot;&quot;&quot;" 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="&quot;&quot;&quot;Invoice to paid&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Invoice is be paid.&quot;&quot;&quot;" 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="&quot;&quot;&quot;invoice to associate&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Invoiced member may be Associated member.&quot;&quot;&quot;" 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="&quot;&quot;&quot;Association Partner&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Associated partner.&quot;&quot;&quot;" 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>
+1 -1
View File
@@ -25,7 +25,7 @@
"author" : "Tiny",
"website" : "http://tinyerp.com/module_mrp.html",
"category" : "Generic Modules/Production",
"depends" : ["stock", "hr", "purchase", "product", "process"],
"depends" : ["stock", "hr", "purchase", "product","process"],
"description": """
This is the base module to manage the manufacturing process in Tiny ERP.
+27 -3
View File
@@ -285,7 +285,7 @@ class mrp_bom(osv.osv):
'workcenter_id': wc.id,
'sequence': level,
'cycle': cycle,
'hour': wc_use.hour_nbr + (wc.time_start+wc.time_stop+cycle*wc.time_cycle) * (wc.time_efficiency or 1.0),
'hour': float(wc_use.hour_nbr + (wc.time_start+wc.time_stop+cycle*wc.time_cycle) * (wc.time_efficiency or 1.0)),
})
for bom2 in bom.bom_lines:
res = self._bom_explode(cr, uid, bom2, factor, properties, addthis=True, level=level+10)
@@ -361,6 +361,24 @@ class mrp_production(osv.osv):
res[production['id']]=move.sale_line_id and move.sale_line_id.order_id.client_order_ref or False
return res
def _production_calc(self, cr, uid, ids, prop, unknow_none, context={}):
result = {}
for prod in self.browse(cr, uid, ids, context=context):
result[prod.id] = {
'hour_total': 0.0,
'cycle_total': 0.0,
}
for wc in prod.workcenter_lines:
result[prod.id]['hour_total'] += wc.hour
result[prod.id]['cycle_total'] += wc.cycle
return result
def _production_date(self, cr, uid, ids, prop, unknow_none, context={}):
result = {}
for prod in self.browse(cr, uid, ids, context=context):
result[prod.id] = prod.date_planned[:10]
return result
def _sale_name_calc(self, cr, uid, ids, prop, unknow_none, unknow_dict):
return self._get_sale_order(cr,uid,ids,field_name='name')
@@ -383,11 +401,13 @@ class mrp_production(osv.osv):
'location_dest_id': fields.many2one('stock.location', 'Finnished Products Location', required=True,
help="Location where the system will stock the finnished products."),
'date_planned_date': fields.function(_production_date, method=True, type='date', string='Planned Date'),
'date_planned': fields.datetime('Scheduled date', required=True, select=1),
'date_start': fields.datetime('Start Date'),
'date_finnished': fields.datetime('End Date'),
'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id','=',False)]),
'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null'),
'picking_id': fields.many2one('stock.picking', 'Packing list', readonly=True,
help="This is the internal picking list take bring the raw materials to the production plan."),
@@ -399,6 +419,9 @@ class mrp_production(osv.osv):
'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Workcenters Utilisation'),
'state': fields.selection([('draft','Draft'),('picking_except', 'Packing Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','In Production'),('cancel','Canceled'),('done','Done')],'Status', readonly=True),
'hour_total': fields.function(_production_calc, method=True, type='float', string='Total Hours', multi='workorder'),
'cycle_total': fields.function(_production_calc, method=True, type='float', string='Total Cycles', multi='workorder'),
'sale_name': fields.function(_sale_name_calc, method=True, type='char', string='Sale Name'),
'sale_ref': fields.function(_sale_ref_calc, method=True, type='char', string='Sale Ref'),
}
@@ -449,8 +472,9 @@ class mrp_production(osv.osv):
if not bom_point:
bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, production.product_id.id, production.product_uom.id, properties)
if bom_id:
self.write(cr, uid, [production.id], {'bom_id': bom_id})
bom_point = self.pool.get('mrp.bom').browse(cr, uid, [bom_id])[0]
bom_point = self.pool.get('mrp.bom').browse(cr, uid, bom_id)
routing_id = bom_point.routing_id.id or False
self.write(cr, uid, [production.id], {'bom_id': bom_id, 'routing_id': routing_id})
if not bom_id:
raise osv.except_osv('Error', "Couldn't find bill of material for product")
+56 -20
View File
@@ -377,9 +377,11 @@
<tree colors="red:date_planned&lt;current_date and state not in ('done','cancel')" string="Production orders">
<field name="name"/>
<field name="product_id"/>
<field name="product_qty"/>
<field name="product_qty" sum="Total Qty"/>
<field name="date_planned"/>
<field name="date_finnished"/>
<field name="routing_id" groups="base.group_extended"/>
<field name="hour_total" sum="Total Hours" groups="base.group_extended"/>
<field name="cycle_total" sum="Total Cycles" groups="base.group_extended"/>
<field name="origin"/>
<field name="state"/>
</tree>
@@ -392,31 +394,49 @@
<field name="type">calendar</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<calendar color="product_id" date_start="date_planned" string="Production Orders">
<calendar color="routing_id" date_start="date_planned" string="Production Orders">
<field name="origin"/>
<field name="name"/>
<field name="product_id"/>
<field name="product_qty"/>
</calendar>
</field>
</record>
<record id="view_production_gantt" model="ir.ui.view">
<field name="name">mrp.production.gantt</field>
<field name="model">mrp.production</field>
<field name="type">gantt</field>
<field name="arch" type="xml">
<gantt color="product_id" date_delay="hour_total" date_start="date_planned" string="Productions">
<level object="mrp.routing" link="routing_id" domain="[]">
<field name="product_id"/>
<field name="origin"/>
</level>
</gantt>
</field>
</record>
<record model="ir.ui.view" id="view_production_graph">
<field name="name">mrp.production.graph</field>
<field name="model">mrp.production</field>
<field name="type">graph</field>
<field name="arch" type="xml">
<graph string="Production orders" type="bar">
<field name="product_id"/>
<field name="product_qty" operator="+"/>
<field name="date_planned_date"/>
<field name="hour_total" operator="+"/>
<field name="cycle_total" operator="+"/>
</graph>
</field>
</record>
<wizard
string="Change Product Qty."
model="mrp.production"
name="change_production_qty"
id="mrp.wizard_change_production_qty"
keyword="client_action_multi"
multi="True"/>
<wizard
string="Change Product Qty."
model="mrp.production"
name="change_production_qty"
id="mrp.wizard_change_production_qty"
keyword="client_action_multi"
multi="True"/>
<record id="mrp_production_form_view" model="ir.ui.view">
<field name="name">mrp.production.form</field>
<field name="model">mrp.production</field>
@@ -426,7 +446,7 @@
<group colspan="4" col="7">
<field name="name" select="1"/>
<field name="date_planned" select="1"/>
<field name="priority" groups="base.group_extended"/>
<field name="origin" select="1"/>
<newline/>
<field name="product_id" on_change="product_id_change(product_id)" select="1"/>
<field name="product_qty"/>
@@ -443,7 +463,7 @@
<field name="location_src_id" select="2" domain="[('usage','=','internal')]" on_change="location_id_change(location_src_id,location_dest_id)"/>
<field name="location_dest_id" domain="[('usage','=','internal')]"/>
<field name="bom_id" select="2" domain="[('product_id','=',product_id),('bom_id','=',False)]"/>
<field name="origin" select="1"/>
<field name="routing_id" groups="base.group_extended" select="1"/>
<newline/>
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list"/>
<group col="9" colspan="4">
@@ -467,6 +487,8 @@
<field colspan="4" name="workcenter_lines" nolabel="1" widget="one2many_list"/>
</page>
<page string="Extra Information">
<field name="priority" groups="base.group_extended"/>
<newline/>
<field name="date_start" select="2"/>
<field name="date_finnished"/>
<field name="picking_id"/>
@@ -483,17 +505,31 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>
<field name="view_mode">tree,form,calendar,graph,gantt</field>
<field name="view_id" eval="False"/>
</record>
<menuitem action="mrp_production_action" id="menu_mrp_production_action" parent="menu_mrp_root"/>
<record id="mrp_production_action2_gantt" model="ir.actions.act_window">
<field name="name">Production Orders Planning</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production</field>
<field name="view_type">form</field>
<field name="view_mode">gantt,tree,form,calendar,graph</field>
<field name="domain">[('state','in',('ready','confirmed','in_production'))]</field>
</record>
<menuitem
action="mrp_production_action2_gantt"
id="menu_production_orders_start_gantt"
parent="menu_mrp_production_action"
sequence="20"/>
<record id="mrp_production_action2" model="ir.actions.act_window">
<field name="name">Production Orders To Start</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>
<field name="view_mode">tree,form,calendar,graph,gantt</field>
<field name="domain">[('state','=','ready')]</field>
</record>
<menuitem action="mrp_production_action2" id="menu_production_orders_start" parent="menu_mrp_production_action"/>
@@ -502,7 +538,7 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>
<field name="view_mode">tree,form,calendar,graph,gantt</field>
<field name="domain">[('state','=','in_production')]</field>
</record>
<menuitem action="mrp_production_action3" id="menu_mrp_production_action3" parent="menu_mrp_production_action"/>
@@ -511,7 +547,7 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph</field>
<field name="view_mode">tree,form,calendar,graph,gantt</field>
<field name="domain">[('state','=','confirmed')]</field>
</record>
<menuitem action="mrp_production_action4" id="menu_production_orders_waiting4" parent="mrp.menu_mrp_production_action"/>
@@ -521,7 +557,7 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree,calendar,graph</field>
<field name="view_mode">form,tree,calendar,graph,gantt</field>
</record>
<menuitem action="mrp_production_new" id="menu_production_orders_new" parent="mrp.menu_mrp_production_action"/>
+112 -114
View File
@@ -15,6 +15,16 @@
Process Node
-->
<record id="process_node_purchaseprocure0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Procurements&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procurement orders&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="purchase.process_process_purchaseworkflow0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_minimumstockrule0" model="process.node">
<field name="menu_id" ref="mrp.menu_action_orderpoint_form"/>
<field name="model_id" ref="mrp.model_stock_warehouse_orderpoint"/>
@@ -25,26 +35,34 @@
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_billofmaterial0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_bom_form_action"/>
<field name="model_id" ref="mrp.model_mrp_bom"/>
<record id="process_node_routing0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_routing_action"/>
<field name="model_id" ref="mrp.model_mrp_routing"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Bill of Material&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Defines Bill of materials&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Routing&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Define a routing to describe the manufacturing steps.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="product.process_process_productworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_procurements0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Procurements&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procurement Orders&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="purchase.process_process_purchaseworkflow0"/>
<field name="subflow_id" ref="process_process_procurementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting') &quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
<record id="process_node_billofmaterial0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_bom_form_action"/>
<field name="model_id" ref="mrp.model_mrp_bom"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Bill of Materials&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Define the product structure, with sub-products and/or components.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="product.process_process_productworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_mrpminimumstockrule0" model="process.node">
<field name="menu_id" ref="mrp.menu_action_orderpoint_form"/>
<field name="model_id" ref="mrp.model_stock_warehouse_orderpoint"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Minimum Stock Rule&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procurement is created if the product quantity is lower than the minimum limit.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_productionorder0" model="process.node">
@@ -80,40 +98,40 @@
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting') &quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_maketoorder0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Make to order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Procurement is make to order&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting') &quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_maketostock0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Make to stock&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Procurement is make to stock&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting') &quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Make to stock&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Procurement is make to stock&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting') &quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_subcontracting0" model="process.node">
<field name="menu_id" ref="purchase.menu_purchase_order_draft"/>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Subcontracting&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procure method is purchase&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Request For Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;A purchase order is created for a sub-contracting demand.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field name="subflow_id" ref="purchase.process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_stockablemaketostock0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Make to Stock&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The system waits for requested products in stock.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting') &quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_stockableproduct0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
@@ -126,7 +144,7 @@
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_stockablemaketostock0" model="process.node">
<record id="process_node_stockablestock0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
@@ -152,8 +170,8 @@
<field name="menu_id" ref="purchase.menu_purchase_order_draft"/>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Stockable request&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If procure method is purchase&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Request For Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;A Request for Quotation is created and sent to the supplier.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field name="subflow_id" ref="purchase.process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
@@ -164,14 +182,14 @@
<field name="menu_id" ref="mrp.menu_mrp_production_action"/>
<field name="model_id" ref="mrp.model_mrp_production"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Stock produce&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If procure method is produce&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Production Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Production orders are created for the product manufacturing.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_procurementworkflow0"/>
<field name="subflow_id" ref="process_process_procurementworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='confirmed'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
-->
@@ -183,6 +201,33 @@
<record id="mrp.trans_draft_confirm" model="workflow.transition">
<field name="role_id" ref="res_roles_mrp0"/>
</record>
<record id="process_transition_purchaseprocure0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Procurement Purchase&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procurement convert into the draft purchase order.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="purchase.process_node_draftpurchaseorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_purchaseprocure0"/>
</record>
<record id="process_transition_billofmaterialrouting0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Material routing&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;An entry is being made from billing material to routing.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_routing0"/>
<field model="process.node" name="source_node_id" ref="process_node_billofmaterial0"/>
</record>
<record id="process_transition_stockruleproduct" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Stock Rule Product&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;From minimum stock rules, it goes for procure product.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_procureproducts0"/>
<field model="process.node" name="source_node_id" ref="process_node_mrpminimumstockrule0"/>
</record>
<record id="process_transition_productionprocurement0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
@@ -207,10 +252,10 @@
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Service make to order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If product type is service and procure method is Make to order&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_maketoorder0"/>
<field model="process.node" name="target_node_id" ref="process_node_stockablemaketoorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_serviceproduct0"/>
</record>
<record id="process_transition_servicemaketostock0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -219,17 +264,7 @@
<field model="process.node" name="target_node_id" ref="process_node_maketostock0"/>
<field model="process.node" name="source_node_id" ref="process_node_serviceproduct0"/>
</record>
<record id="process_transition_ordersubcontracting0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Order Subcontracting&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If procure method is Make to order and supply method is buy&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_subcontracting0"/>
<field model="process.node" name="source_node_id" ref="process_node_maketoorder0"/>
<field eval="[(6,0,[ref('mrp.trans_draft_confirm')])]" name="transition_ids"/>
</record>
<record id="process_transition_procurementstockable0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -239,6 +274,15 @@
<field model="process.node" name="source_node_id" ref="process_node_procureproducts0"/>
</record>
<record id="process_transition_stockablestock0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Stockable product stock&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Product type is Stockable and procure method is make to stock&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_stockablestock0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockableproduct0"/>
</record>
<record id="process_transition_stockablemaketostock0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -247,22 +291,22 @@
<field model="process.node" name="target_node_id" ref="process_node_stockablemaketostock0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockableproduct0"/>
</record>
<record id="process_transition_stockablemaketoorder0" model="process.transition">
<record id="process_transition_stockablestockrequest0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Stockable make to order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Product type is Stockable and procure method is Make to order&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_stockablemaketoorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockableproduct0"/>
<field eval="&quot;&quot;&quot;Stockable stock request&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Product type is Stockable and procure method is make to stock&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_stockablerequest0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockablestock0"/>
</record>
<record id="process_transition_stockableorderrequest0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Stockable Order Request&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Procure method is Make to order and supply method is buy&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_stockablerequest0"/>
<field model="process.node" name="target_node_id" ref="process_node_subcontracting0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockablemaketoorder0"/>
<field eval="[(6,0,[ref('mrp.trans_draft_confirm')])]" name="transition_ids"/>
</record>
@@ -273,19 +317,10 @@
<field eval="&quot;&quot;&quot;Stockable Order Production&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Procure method is Make to order and supply method is produce&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_stockableproduction0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockablemaketoorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_stockablestock0"/>
<field eval="[(6,0,[ref('mrp.trans_draft_confirm')])]" name="transition_ids"/>
</record>
<record id="process_transition_procurementtopurchase0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;procurement to purchase&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After procurementing order , it comes into the Draft Purchase Order&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="purchase.process_node_draftpurchaseorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_procurements0"/>
</record>
<record id="process_transition_producttostockrules0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -304,15 +339,6 @@
<field model="process.node" name="source_node_id" ref="product.process_node_product0"/>
</record>
<record id="process_transition_bomtook0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Bom to Ok&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Set status of Bill of material to ok&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="product.process_node_statusok0"/>
<field model="process.node" name="source_node_id" ref="process_node_billofmaterial0"/>
</record>
<!--
Process Condition
-->
@@ -335,34 +361,6 @@
Process Action
-->
<record id="process_transition_action_procurementpurchaseorder0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_po_assign&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Purchase&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_procurementtopurchase0"/>
</record>
<record id="process_transition_action_orderconfirmsubcontracting0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_confirm&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Confirm&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_ordersubcontracting0"/>
</record>
<record id="process_transition_action_ordercancelsubcontracting0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_cancel&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Cancel&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_ordersubcontracting0"/>
</record>
<record id="process_transition_action_runprocurement0" model="process.transition.action">
<field eval="&quot;&quot;&quot;write({'state':'exception'})&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Run Procurement&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_ordersubcontracting0"/>
</record>
<record id="process_transition_action_stockableconfirmrequest0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_confirm&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
@@ -404,6 +402,6 @@
<field eval="&quot;&quot;&quot;Run Procurement&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_stockableorderproduction0"/>
</record>
</data>
</openerp>
+34 -35
View File
@@ -188,41 +188,40 @@ class mrp_procurement(osv.osv):
while ids:
ids=orderpoint_obj.search(cr,uid,[],offset=offset,limit=100)
for op in orderpoint_obj.browse(cr, uid, ids):
try:
prods = location_obj._product_virtual_get(cr, uid,
op.location_id.id, [op.product_id.id],
{'uom': op.product_uom.id})[op.product_id.id]
if prods < op.product_min_qty:
qty = max(op.product_min_qty, op.product_max_qty)-prods
reste = qty % op.qty_multiple
if reste>0:
qty += op.qty_multiple-reste
newdate = DateTime.now() + DateTime.RelativeDateTime(
days=op.product_id.seller_delay)
if op.product_id.supply_method == 'buy':
location_id = op.warehouse_id.lot_input_id
elif op.product_id.supply_method == 'produce':
location_id = op.warehouse_id.lot_stock_id
else:
continue
proc_id = procurement_obj.create(cr, uid, {
'name': 'OP:'+str(op.id),
'date_planned': newdate.strftime('%Y-%m-%d'),
'product_id': op.product_id.id,
'product_qty': qty,
'product_uom': op.product_uom.id,
'location_id': op.warehouse_id.lot_input_id.id,
'procure_method': 'make_to_order',
'origin': op.name
})
wf_service.trg_validate(uid, 'mrp.procurement', proc_id,
'button_confirm', cr)
wf_service.trg_validate(uid, 'mrp.procurement', proc_id,
'button_check', cr)
orderpoint_obj.write(cr, uid, [op.id],
{'procurement_id': proc_id})
except Exception, e:
report.append('OP %d:\n%s\n' % (op.id, str(e)))
if op.procurement_id and op.procurement_id.purchase_id and op.procurement_id.purchase_id.state in ('draft','confirmed'):
continue
prods = location_obj._product_virtual_get(cr, uid,
op.location_id.id, [op.product_id.id],
{'uom': op.product_uom.id})[op.product_id.id]
if prods < op.product_min_qty:
qty = max(op.product_min_qty, op.product_max_qty)-prods
reste = qty % op.qty_multiple
if reste>0:
qty += op.qty_multiple-reste
newdate = DateTime.now() + DateTime.RelativeDateTime(
days=op.product_id.seller_delay)
if op.product_id.supply_method == 'buy':
location_id = op.warehouse_id.lot_input_id
elif op.product_id.supply_method == 'produce':
location_id = op.warehouse_id.lot_stock_id
else:
continue
proc_id = procurement_obj.create(cr, uid, {
'name': 'OP:'+str(op.id),
'date_planned': newdate.strftime('%Y-%m-%d'),
'product_id': op.product_id.id,
'product_qty': qty,
'product_uom': op.product_uom.id,
'location_id': op.warehouse_id.lot_input_id.id,
'procure_method': 'make_to_order',
'origin': op.name
})
wf_service.trg_validate(uid, 'mrp.procurement', proc_id,
'button_confirm', cr)
wf_service.trg_validate(uid, 'mrp.procurement', proc_id,
'button_check', cr)
orderpoint_obj.write(cr, uid, [op.id],
{'procurement_id': proc_id})
offset += len(ids)
if use_new_cursor:
cr.commit()
+1 -1
View File
@@ -54,7 +54,7 @@ class mrp_production_workcenter_line(osv.osv):
}
_defaults = {
'state': lambda *a: 'draft',
'delay': lambda *a: '0 Days 00 hrs and 00 mins'
'delay': lambda *a: 0.0
}
def modify_production_order_state(self,cr,uid,ids,action):
+4 -44
View File
@@ -29,38 +29,16 @@
<record id="process_node_supplier0" model="process.node">
<field name="menu_id" ref="product.menu_products"/>
<field name="model_id" ref="product.model_product_product"/>
<field name="model_id" ref="product.model_product_supplierinfo"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Supplier&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Defines the list of supplier&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Supplier Info&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Product suppliers, with their product name, price, etc.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_productworkflow0"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_statusok0" model="process.node">
<field name="menu_id" ref="product.menu_products"/>
<field name="model_id" ref="product.model_product_product"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Status ok&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Set Status OK&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_productworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='sellable'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_endlifecycle0" model="process.node">
<field name="menu_id" ref="product.menu_products"/>
<field name="model_id" ref="product.model_product_product"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;End lifecycle&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;End Of lifecycle&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_productworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='end'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Transition
Process Transition
-->
<record id="process_transition_supplierofproduct0" model="process.transition">
@@ -72,23 +50,5 @@
<field model="process.node" name="source_node_id" ref="process_node_product0"/>
</record>
<record id="process_transition_suppliertook0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Supplier to ok&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Set the status of list of supplier to ok&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_statusok0"/>
<field model="process.node" name="source_node_id" ref="process_node_supplier0"/>
</record>
<record id="process_transition_oktoend0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Ok to End&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;End of lifecycle after Ok&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_endlifecycle0"/>
<field model="process.node" name="source_node_id" ref="process_node_statusok0"/>
</record>
</data>
</openerp>
+1 -1
View File
@@ -300,7 +300,7 @@ class product_template(osv.osv):
def _check_uom(self, cursor, user, ids):
for product in self.browse(cursor, user, ids):
if product.uom_id.id <> product.uom_po_id.id:
if product.uom_id.category_id.id <> product.uom_po_id.category_id.id:
return False
return True
+1 -1
View File
@@ -39,7 +39,7 @@
</record>
<record id="process_node_opentask0" model="process.node">
<field name="menu_id" ref="menu_tasks_yours_prog"/>
<!-- <field name="menu_id" ref="project.menu_action_view_task6"/> -->
<field name="model_id" ref="project.model_project_task"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Open task&quot;&quot;&quot;" name="name"/>
+1 -1
View File
@@ -28,7 +28,7 @@
<field name="active" select="2"/>
<field name="planned_hours" widget="float_time"/>
<field name="effective_hours" widget="float_time"/>
<field name="category_id" select="2"/>
<field name="category_id" select="2" context="{'default_name':name}"/>
<newline/>
<separator colspan="4" string="Project's members"/>
<field colspan="4" name="members" nolabel="1"/>
@@ -6,12 +6,12 @@
Process Node
-->
<record id="process_node_tasks0" model="process.node">
<record id="process_node_procuretasktask0" model="process.node">
<field name="menu_id" ref="project.menu_action_view_task"/>
<field name="model_id" ref="project.model_project_task"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Tasks&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;In case you sell services on sale order (task subflow)&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Task&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;For each product, on type service and on order&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="sale.process_process_salesworkflow0"/>
<field name="subflow_id" ref="project.process_process_tasksworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
@@ -33,35 +33,24 @@
<field name="menu_id" ref="project.menu_action_view_task"/>
<field name="model_id" ref="project.model_project_task"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Procure task&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If Procure method is produce&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Task&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;A task is created to provide the service.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="mrp.process_process_procurementworkflow0"/>
<field name="subflow_id" ref="project.process_process_tasksworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Condition
-->
<record id="process_condition_conditiontask0" model="process.condition">
<field name="model_id" ref="product.model_product_template"/>
<field name="node_id" ref="process_node_tasks0"/>
<field eval="&quot;&quot;&quot;object.type=='service'&quot;&quot;&quot;" name="model_states"/>
<field eval="&quot;&quot;&quot;condition_task&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_task0" model="process.transition">
<record id="process_transition_procuretask0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Task&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;When you select any product's type as a 'service' after confiming sale order, it will create a task of product.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_tasks0"/>
<field model="process.node" name="source_node_id" ref="sale.process_node_saleorder0"/>
<field eval="&quot;&quot;&quot;Procure Task&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;if product type is 'service' then it creates the task.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_procuretasktask0"/>
<field model="process.node" name="source_node_id" ref="sale.process_node_saleprocurement0"/>
</record>
<record id="process_transition_createtask0" model="process.transition">
@@ -79,7 +68,7 @@
<field eval="&quot;&quot;&quot;Order Task&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;If procure method is Make to order and supply method is produce&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_procuretask0"/>
<field model="process.node" name="source_node_id" ref="mrp.process_node_maketoorder0"/>
<field model="process.node" name="source_node_id" ref="mrp.process_node_stockablemaketoorder0"/>
<field eval="[(6,0,[ref('mrp.trans_draft_confirm')])]" name="transition_ids"/>
</record>
+54 -16
View File
@@ -21,8 +21,8 @@
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Purchase Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After confirming purchase order, it is approved by supplier.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;When controlling invoice from orders&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="account.process_process_supplierinvoiceworkflow0"/>
<field name="subflow_id" ref="process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
@@ -32,19 +32,30 @@
<field name="menu_id" ref="purchase.menu_purchase_order_draft"/>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Purchase Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Proposed by the system or manually&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Request for Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Request for quotation is proposed by the system.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_draftpurchaseorder1" model="process.node">
<field name="menu_id" ref="purchase.menu_purchase_order_draft"/>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Request for Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Encoded manually by the user.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_confirmpurchaseorder0" model="process.node">
<field name="menu_id" ref="purchase.menu_purchase_form_action3"/>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Confirm Purchase Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The user confirm he wants to purchase&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Confirmed Purchase&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Purchase order is confirmed by the user.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='confirmed'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
@@ -54,8 +65,8 @@
<field name="menu_id" ref="purchase.menu_purchase_form_action4"/>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Approve Purchase Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The supplier confirms he can deliver&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Approved Purchase&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Purchase order is approved by supplier.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='approved'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
@@ -65,8 +76,8 @@
<field name="menu_id" ref="account.menu_action_invoice_tree8"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Invoice Control&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Draft invoices are pre-generated for control.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Draft Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Pre-generated supplier invoice to control based on order&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field name="subflow_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
@@ -77,8 +88,8 @@
<field name="menu_id" ref="stock.menu_action_picking_tree4"/>
<field name="model_id" ref="stock.model_stock_picking"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Packing list&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Pre-generated in draft for control&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Incoming Products&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Packing is created for the products reception control.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='assigned'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
@@ -88,14 +99,32 @@
<field name="menu_id" ref="account.menu_finance_invoice"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Invoice after packing&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;In case you control based on delivery&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Draft Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Supplier Invoice pre-generated on receptions for control&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_purchaseworkflow0"/>
<field name="subflow_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
Process Condition
-->
<record id="process_condition_conditionorigin" model="process.condition">
<field name="model_id" ref="purchase.model_purchase_order"/>
<field name="node_id" ref="process_node_draftpurchaseorder1"/>
<field eval="&quot;&quot;&quot;object.origin==''&quot;&quot;&quot;" name="model_states"/>
<field eval="&quot;&quot;&quot;condition_origin&quot;&quot;&quot;" name="name"/>
</record>
<record id="process_condition_conditioninvoicemanual" model="process.condition">
<field name="model_id" ref="purchase.model_purchase_order"/>
<field name="node_id" ref="process_node_invoicecontrol0"/>
<field eval="&quot;&quot;&quot;object.invoice_method=='manual'&quot;&quot;&quot;" name="model_states"/>
<field eval="&quot;&quot;&quot;condition_invoice_manual&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Transition
-->
@@ -122,6 +151,15 @@
<field eval="[(6,0,[ref('purchase.trans_draft_confirmed')])]" name="transition_ids"/>
</record>
<record id="process_transition_confirmingpurchaseorder1" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Confirming Purchase&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Confirm Purchase order from Request for quotation without origin&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_confirmpurchaseorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_draftpurchaseorder1"/>
</record>
<record id="process_transition_approvingpurchaseorder0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
@@ -164,7 +202,7 @@
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Purchase Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After Purchase order , Create invoice.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="account.process_node_draftinvoices0"/>
<field model="process.node" name="target_node_id" ref="account.process_node_supplierdraftinvoices0"/>
<field model="process.node" name="source_node_id" ref="process_node_purchaseorder0"/>
</record>
+139 -112
View File
@@ -1,161 +1,188 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
<!--
Process
-->
<record id="process_process_salesworkflow0" model="process.process">
<field eval="1" name="active"/>
<field eval="'From the quotation to the delivery and invoices.'" name="note"/>
<field eval="'Sales Workflow'" name="name"/>
<field eval="&quot;&quot;&quot;Sales flow for services companies.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Sales Workflow&quot;&quot;&quot;" name="name"/>
</record>
<!--
Process Node
<!--
Process Node
-->
<record id="process_node_order0" model="process.node">
<field name="menu_id" ref="sale.menu_sale_order"/>
<field name="model_id" ref="sale.model_sale_order"/>
<field eval="'subflow'" name="kind"/>
<field eval="'Order'" name="name"/>
<field eval="'After confirming order, Create the invoice.'" name="note"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;After confirming order, Create the invoice.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="account.process_process_invoiceworkflow0"/>
<field name="subflow_id" ref="process_process_salesworkflow0"/>
<field name="model_states">object.state=='draft'</field>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_saleorderprocurement0" model="process.node">
<field name="menu_id" ref="sale.menu_sale_order"/>
<field name="model_id" ref="sale.model_sale_order"/>
<field eval="'subflow'" name="kind"/>
<field eval="'Sale Order Procurement'" name="name"/>
<field eval="'Procurement for each line'" name="note"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Sale Order Procurement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procurement for each line&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="mrp.process_process_procurementworkflow0"/>
<field name="subflow_id" ref="process_process_salesworkflow0"/>
<field name="model_states">object.state in ('draft','waiting_date','manual','progress','shipping_except','invoice_except','done','cancel')</field>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'waiting_date', 'manual', 'progress', 'shipping_except', 'invoice_except', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_quotation0" model="process.node">
<field name="menu_id" ref="sale.menu_action_order_tree10"/>
<field name="model_id" ref="sale.model_sale_order"/>
<field eval="'state'" name="kind"/>
<field eval="'Quotation'" name="name"/>
<field eval="'Quotations are sales order in draft state.'" name="note"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Ok&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Quotation (A sale order in draft state)&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field name="model_states">object.state=='draft'</field>
<field eval="1" name="flow_start"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_saleorder0" model="process.node">
<field name="menu_id" ref="sale.menu_action_order_tree9"/>
<field name="model_id" ref="sale.model_sale_order"/>
<field eval="'Sale Order'" name="name"/>
<field eval="'Confirmed by the customer.'" name="note"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Ok&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Ok&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field name="model_states">object.state in ('waiting_date','manual','progress')</field>
<field eval="&quot;&quot;&quot;object.state=='manual'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_saleprocurement0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Procurement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;One procurement for each product.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='confirmed'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_packinglist0" model="process.node">
<field name="menu_id" ref="stock.menu_picking_waiting"/>
<field name="model_id" ref="stock.model_stock_picking"/>
<field eval="'Packing List'" name="name"/>
<field eval="'The worker have to pack the requested products.'" name="note"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Outgoing Products&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Packing OUT is created for stockable products.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field name="model_states">object.state in ('assigned', 'confirmed')</field>
<field eval="&quot;&quot;&quot;object.state in ('assigned', 'confirmed')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_deliveryorder0" model="process.node">
<field name="menu_id" ref="stock.menu_picking_waiting_delivery"/>
<field name="model_id" ref="stock.model_stock_picking"/>
<field eval="'state'" name="kind"/>
<field eval="'Delivery Order'" name="name"/>
<field eval="'The delivery order document, when boxes leaves the warehouse.'" name="note"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Delivery Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Delivery, from the warehouse to the customer.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field name="model_states">object.state in ('done')</field>
<field eval="&quot;&quot;&quot;object.state in ('done', 'assigned')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_invoice0" model="process.node">
<field name="menu_id" ref="account.menu_invoice_draft"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="'subflow'" name="kind"/>
<field eval="'Invoice'" name="name"/>
<field eval="'Invoice based on the sale order.'" name="note"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Draft customer invoice, to be reviewed by accountant.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field name="subflow_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_invoiceafterdelivery0" model="process.node">
<field name="menu_id" ref="account.menu_invoice_draft"/>
<field name="model_id" ref="account.model_account_invoice"/>
<field eval="'subflow'" name="kind"/>
<field eval="'Invoice on Packing'" name="name"/>
<field eval="'In case you invoice based on packings'" name="note"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Draft Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Invoice based on packing lists&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="process_process_salesworkflow0"/>
<field name="subflow_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state=='draft'&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<!--
<!--
Process Condition
-->
<record id="process_condition_conditionafterdelivery0" model="process.condition">
<field name="model_id" ref="sale.model_sale_order"/>
<field name="node_id" ref="process_node_invoiceafterdelivery0"/>
<field name="model_states">object.order_policy=='postpaid'</field>
<field eval="'condition_after_delivery'" name="name"/>
<field eval="&quot;&quot;&quot;object.order_policy=='postpaid'&quot;&quot;&quot;" name="model_states"/>
<field eval="&quot;&quot;&quot;condition_after_delivery&quot;&quot;&quot;" name="name"/>
</record>
<!--
<!--
Process Transition
-->
<record id="res_roles_salesman0" model="res.roles">
<field eval="'Salesman'" name="name"/>
<field eval="&quot;&quot;&quot;Salesman&quot;&quot;&quot;" name="name"/>
</record>
<record id="sale.trans_draft_router" model="workflow.transition">
<field name="role_id" ref="res_roles_salesman0"/>
</record>
<record id="sale.trans_wait_invoice_invoice_manual" model="workflow.transition">
<record id="sale.trans_wait_invoice_invoice_manual" model="workflow.transition">
<field name="role_id" ref="res_roles_salesman0"/>
</record>
<record id="process_transition_confirmquotation0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Confirm Quotation'" name="name"/>
<field eval="'Whenever confirm button is clicked, the draft state is moved to manual. that is, quotation is moved to sale order.'" name="note"/>
<field eval="&quot;&quot;&quot;Confirm Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Whenever confirm button is clicked, the draft state is moved to manual. that is, quotation is moved to sale order.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_saleorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_quotation0"/>
<field eval="[(6,0,[ref('sale.trans_draft_router')])]" name="transition_ids"/>
</record>
<record id="process_transition_packing0" model="process.transition">
<record id="process_transition_saleprocurement0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Packing'" name="name"/>
<field eval="'Packing list is created when the Assign button is being clicked after confirming the sale order. This transaction moves the sale order to packing list.'" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_packinglist0"/>
<field eval="&quot;&quot;&quot;Sale Procurement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Procurement is created after confirmation of sale order.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_saleprocurement0"/>
<field model="process.node" name="source_node_id" ref="process_node_saleorder0"/>
</record>
<record id="process_transition_packing0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Packing&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Packing list is created when 'Assign' is being clicked after confirming the sale order. This transaction moves the sale order to packing list.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_packinglist0"/>
<field model="process.node" name="source_node_id" ref="process_node_saleprocurement0"/>
</record>
<record id="process_transition_deliver0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Deliver'" name="name"/>
<field eval="'Confirming the packing list moves them to delivery order. This can be done by clicking on the Validate button.'" name="note"/>
<field eval="&quot;&quot;&quot;Deliver&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Confirming the packing list moves them to delivery order. This can be done by clicking on 'Validate' button.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_deliveryorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_packinglist0"/>
</record>
<record id="process_transition_invoice0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Invoice'" name="name"/>
<field eval="'Invoice is created when Create Invoice is being clicked after confirming the sale order. This transaction moves the sale order to invoices.'" name="note"/>
<field eval="&quot;&quot;&quot;Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Invoice is created when 'Create Invoice' is being clicked after confirming the sale order. This transaction moves the sale order to invoices.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_invoice0"/>
<field model="process.node" name="source_node_id" ref="process_node_saleorder0"/>
<field eval="[(6,0,[ref('sale.trans_wait_invoice_invoice_manual')])]" name="transition_ids"/>
@@ -163,103 +190,103 @@
<record id="process_transition_invoiceafterdelivery0" model="process.transition">
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Invoice after delivery'" name="name"/>
<field eval="'When you select Shipping Ploicy = Automatic Invoice after delivery , it will automatic create after delivery.'" name="note"/>
<field eval="&quot;&quot;&quot;Invoice after delivery&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;When you select Shipping Ploicy = 'Automatic Invoice after delivery' , it will automatic create after delivery.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_invoiceafterdelivery0"/>
<field model="process.node" name="source_node_id" ref="process_node_deliveryorder0"/>
<field model="process.node" name="source_node_id" ref="process_node_packinglist0"/>
</record>
<record id="process_transition_saleprocurement0" model="process.transition">
<record id="process_transition_saleorderprocurement0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Sale Procurement'" name="name"/>
<field eval="'In sale order , procuerement for each line and it comes into the procurement order'" name="note"/>
<field eval="&quot;&quot;&quot;Sale Procurement&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;In sale order , procuerement for each line and it comes into the procurement order&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="mrp.process_node_procureproducts0"/>
<field model="process.node" name="source_node_id" ref="process_node_saleorderprocurement0"/>
</record>
<record id="process_transition_saleinvoice0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="'Sale Invoice'" name="name"/>
<field eval="'Confirm sale order and Create invoice.'" name="note"/>
<field eval="&quot;&quot;&quot;Sale Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Confirm sale order and Create invoice.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="account.process_node_draftinvoices0"/>
<field model="process.node" name="source_node_id" ref="process_node_order0"/>
</record>
<!--
<!--
Process Action
-->
<record id="process_transition_action_confirm0" model="process.transition.action">
<field eval="'action_wait'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Confirm'" name="name"/>
<field eval="&quot;&quot;&quot;action_wait&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Confirm&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_confirmquotation0"/>
</record>
<record id="process_transition_action_cancel0" model="process.transition.action">
<field eval="'action_cancel'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Cancel'" name="name"/>
<field eval="&quot;&quot;&quot;action_cancel&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Cancel&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_confirmquotation0"/>
</record>
<record id="process_transition_action_assign0" model="process.transition.action">
<field eval="'action_assign'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Assign'" name="name"/>
<field eval="&quot;&quot;&quot;action_assign&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Assign&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_packing0"/>
</record>
<record id="process_transition_action_forceassignation0" model="process.transition.action">
<field eval="'force_assign'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Force Assignation'" name="name"/>
<field eval="&quot;&quot;&quot;force_assign&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Force Assignation&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_packing0"/>
</record>
<record id="process_transition_action_cancel1" model="process.transition.action">
<field eval="'action_cancel'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Cancel'" name="name"/>
<field eval="&quot;&quot;&quot;action_cancel&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Cancel&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_packing0"/>
</record>
<record id="process_transition_action_cancelassignation0" model="process.transition.action">
<field eval="'cancel_assign'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Cancel Assignation'" name="name"/>
<field eval="&quot;&quot;&quot;cancel_assign&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Cancel Assignation&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_deliver0"/>
</record>
<record id="process_transition_action_validate0" model="process.transition.action">
<field eval="'test_finnished'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Validate'" name="name"/>
<field eval="&quot;&quot;&quot;test_finnished&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Validate&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_deliver0"/>
</record>
<record id="process_transition_action_cancel2" model="process.transition.action">
<field eval="'action_cancel'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Cancel'" name="name"/>
<field eval="&quot;&quot;&quot;action_cancel&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Cancel&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_deliver0"/>
</record>
<record id="process_transition_action_createinvoice0" model="process.transition.action">
<field eval="'action_invoice_create'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Create Invoice'" name="name"/>
<field eval="&quot;&quot;&quot;action_invoice_create&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Create Invoice&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_invoice0"/>
</record>
<record id="process_transition_action_cancelorder0" model="process.transition.action">
<field eval="'action_cancel'" name="action"/>
<field eval="'object'" name="state"/>
<field eval="'Cancel Order'" name="name"/>
<record id="process_transition_action_cancelorder0" model="process.transition.action">
<field eval="&quot;&quot;&quot;action_cancel&quot;&quot;&quot;" name="action"/>
<field eval="&quot;&quot;&quot;object&quot;&quot;&quot;" name="state"/>
<field eval="&quot;&quot;&quot;Cancel Order&quot;&quot;&quot;" name="name"/>
<field name="transition_id" ref="process_transition_invoice0"/>
</record>
</data>
</openerp>
+1 -1
View File
@@ -204,7 +204,7 @@
<field name="user_id"/>
<field name="order_policy"/>
<field groups="base.group_extended" name="origin"/>
<field groups="base.group_extended" name="invoice_quantity" attrs="{'readonly':[('order_policy','=','picking')]}"/>
<field groups="base.group_extended" name="invoice_quantity" attrs="{'readonly':[('order_policy','=','prepaid')]}"/>
<field name="payment_term"/>
<separator colspan="4" string="Notes"/>
<field colspan="4" name="note" nolabel="1"/>
+43 -13
View File
@@ -2,25 +2,55 @@
<openerp>
<data>
<record id="process_node_contractsale0" model="process.node">
<field name="menu_id" ref="sale.menu_sale_order"/>
<field name="model_id" ref="sale.model_sale_order"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Contract Sale&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Contract Command (sale)&quot;&quot;&quot;" name="note"/>
<!--
Process Node
-->
<record id="process_node_crmquotation0" model="process.node">
<field name="menu_id" ref="sale.menu_action_order_tree10"/>
<field name="model_id" ref="sale.model_sale_order"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Convert opportunity to quotation&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="crm_configuration.process_process_contractworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'manual', 'waiting_date', 'progress', 'shipping_except', 'invoice_except', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_transition_accordsale0" model="process.transition">
<record id="process_node_crmopportunity0" model="process.node">
<field name="menu_id" ref="crm_configuration.menu_crm_case_categ0_act_oppor11"/>
<field name="model_id" ref="crm.model_crm_case"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;CRM Opportunity&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;The CRM Opportunity can lead to a quotation.&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="sale.process_process_salesworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<!--
Process Transition
-->
<record id="process_transition_crmopportunityquotation" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Accord Sale&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Goes into the Sale&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_contractsale0"/>
<field model="process.node" name="source_node_id" ref="crm_configuration.process_node_accord0"/>
<field eval="&quot;&quot;&quot;Crm opportunity quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Opportunity goes into the quotation&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="sale.process_node_quotation0"/>
<field model="process.node" name="source_node_id" ref="process_node_crmopportunity0"/>
</record>
<record id="process_transition_opportunityquotation0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Opportunity Quotation&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Opportunity convert into quotation&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="process_node_crmquotation0"/>
<field model="process.node" name="source_node_id" ref="crm_configuration.process_node_opportunities0"/>
</record>
</data>
</openerp>
+1
View File
@@ -42,6 +42,7 @@
"report_stock_view.xml",
"security/stock_security.xml",
"security/ir.model.access.csv",
"process/stock_process.xml"
],
"active": False,
"installable": True
+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="process_node_packinginvoice0" model="process.node">
<field name="menu_id" ref="stock.menu_picking_waiting"/>
<field name="model_id" ref="stock.model_stock_picking"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Out Packing&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Invoice based on deliveries&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="account.process_process_invoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('assigned', 'confirmed')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_productrecept0" model="process.node">
<field name="menu_id" ref="stock.menu_picking_waiting"/>
<field name="model_id" ref="stock.model_stock_picking"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Product Recept&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Control invoices on receptions&quot;&quot;&quot;" name="note"/>
<field name="process_id" ref="account.process_process_supplierinvoiceworkflow0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'open', 'pending', 'close')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_transition_productrecept0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Product recept invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Create invoice from product recept&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="account.process_node_supplierdraftinvoices0"/>
<field model="process.node" name="source_node_id" ref="process_node_productrecept0"/>
</record>
<record id="process_transition_packinginvoice0" model="process.transition">
<field eval="[(6,0,[])]" name="role_ids"/>
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Packing Invoice&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;From Packing list, Create invoice.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="account.process_node_draftinvoices0"/>
<field model="process.node" name="source_node_id" ref="process_node_packinginvoice0"/>
</record>
</data>
</openerp>
+2 -2
View File
@@ -101,7 +101,7 @@ class stock_location(osv.osv):
'child_ids': fields.one2many('stock.location', 'location_id', 'Contains'),
'chained_location_id': fields.many2one('stock.location', 'Chained Location If Fixed'),
'chained_location_type': fields.selection([('','None'),('customer', 'Customer'),('fixed','Fixed Location')],
'chained_location_type': fields.selection([('none','None'),('customer', 'Customer'),('fixed','Fixed Location')],
'Chained Location Type', required=True),
'chained_auto_packing': fields.selection(
[('auto','Automatic Move'), ('manual','Manual Operation'),('transparent','Automatic No Step Added')],
@@ -128,7 +128,7 @@ class stock_location(osv.osv):
'active': lambda *a: 1,
'usage': lambda *a: 'internal',
'allocation_method': lambda *a: 'fifo',
'chained_location_type': lambda *a: '',
'chained_location_type': lambda *a: 'none',
'chained_auto_packing': lambda *a: 'manual',
'posx': lambda *a: 0,
'posy': lambda *a: 0,
+8 -8
View File
@@ -492,7 +492,7 @@
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Calendar View" date_start="min_date" date_stop="max_date" color="address_id">
<field name="name"/>
<field name="origin"/>
<field name="type"/>
<field name="address_id"/>
</calendar>
@@ -804,8 +804,8 @@
<form string="Packing list">
<group col="6" colspan="4">
<field name="address_id" select="2"/>
<field name="name" select="1" readonly="1"/>
<field name="min_date" select="2"/>
<field name="name" select="1" readonly="1"/>
<field name="invoice_state"/>
<field name="backorder_id" select="2" readonly="1"/>
<field name="origin" select="2" readonly="1"/>
@@ -1217,16 +1217,16 @@
<field name="location_id" select="1"/>
<field name="location_dest_id" select="1"/>
<field colspan="4" name="product_id" select="1"/>
<field name="product_qty" select="1"/>
<field name="product_uom" select="1"/>
<field colspan="4" name="name" select="1"/>
<field name="product_qty" select="2"/>
<field name="product_uom" select="2"/>
<field colspan="4" name="name" select="2"/>
<field name="date"/>
<field name="date_planned"/>
<field name="priority"/>
<field name="address_id" select="1" context="{'context_display':'partner'}"/>
<field name="address_id" select="2" context="{'context_display':'partner'}"/>
<newline/>
<field name="prodlot_id" select="1" context="{'location_id':location_id, 'product_id':product_id}" domain="[('product_id','=',product_id)]" on_change="onchange_lot_id(prodlot_id,product_qty, location_id)"/>
<field name="tracking_id" select="1"/>
<field name="prodlot_id" select="2" context="{'location_id':location_id, 'product_id':product_id}" domain="[('product_id','=',product_id)]" on_change="onchange_lot_id(prodlot_id,product_qty, location_id)"/>
<field name="tracking_id" select="2"/>
<field name="picking_id"/>
<newline/>
<label/>
+1 -1
View File
@@ -24,7 +24,7 @@
"version" : "1.0",
"author" : "Tiny",
"website" : "http://tinyerp.com/module_sale.html",
"depends" : ["delivery"],
"depends" : ["delivery", "stock"],
"category" : "Generic Modules/Sales & Purchases",
"description": """
When you send or deliver goods, this module automatically launch