[MERGE] Merge lp:openobeject-addons.

bzr revid: bth@tinyerp.com-20130215122526-einsh4wazw2e1lxs
This commit is contained in:
Bhumi Thakkar (Open ERP) 2013-02-15 17:55:26 +05:30
commit ad6d133d3c
88 changed files with 927 additions and 672 deletions

View File

@ -39,6 +39,8 @@ class account_financial_report(osv.osv):
_description = "Account Report"
def _get_level(self, cr, uid, ids, field_name, arg, context=None):
'''Returns a dictionary with key=the ID of a record and value = the level of this
record in the tree structure.'''
res = {}
for report in self.browse(cr, uid, ids, context=context):
level = 0
@ -48,6 +50,8 @@ class account_financial_report(osv.osv):
return res
def _get_children_by_order(self, cr, uid, ids, context=None):
'''returns a dictionary with the key= the ID of a record and value = all its children,
computed recursively, and sorted by sequence. Ready for the printing'''
res = []
for id in ids:
res.append(id)
@ -56,6 +60,12 @@ class account_financial_report(osv.osv):
return res
def _get_balance(self, cr, uid, ids, field_names, args, context=None):
'''returns a dictionary with key=the ID of a record and value=the balance amount
computed for this record. If the record is of type :
'accounts' : it's the sum of the linked accounts
'account_type' : it's the sum of leaf accoutns with such an account_type
'account_report' : it's the amount of the related report
'sum' : it's the sum of the children of this record (aka a 'view' record)'''
account_obj = self.pool.get('account.account')
res = {}
for report in self.browse(cr, uid, ids, context=context):

View File

@ -23,7 +23,6 @@ import time
from lxml import etree
import openerp.addons.decimal_precision as dp
from openerp import netsvc
from openerp import pooler
from openerp.osv import fields, osv, orm
from openerp.tools.translate import _
@ -80,11 +79,10 @@ class account_invoice(osv.osv):
def _reconciled(self, cr, uid, ids, name, args, context=None):
res = {}
wf_service = netsvc.LocalService("workflow")
for inv in self.browse(cr, uid, ids, context=context):
res[inv.id] = self.test_paid(cr, uid, [inv.id])
if not res[inv.id] and inv.state == 'paid':
wf_service.trg_validate(uid, 'account.invoice', inv.id, 'open_test', cr)
self.signal_open_test(cr, uid, [inv.id])
return res
def _get_reference_type(self, cr, uid, context=None):
@ -638,10 +636,8 @@ class account_invoice(osv.osv):
# go from canceled state to draft state
def action_cancel_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state':'draft'})
wf_service = netsvc.LocalService("workflow")
for inv_id in ids:
wf_service.trg_delete(uid, 'account.invoice', inv_id, cr)
wf_service.trg_create(uid, 'account.invoice', inv_id, cr)
self.delete_workflow(cr, uid, ids)
self.create_workflow(cr, uid, ids)
return True
# Workflow stuff
@ -1394,7 +1390,12 @@ class account_invoice_line(osv.osv):
# XXX this gets the default account for the user's company,
# it should get the default account for the invoice's company
# however, the invoice's company does not reach this point
prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context)
if context is None:
context = {}
if context.get('type') in ('out_invoice','out_refund'):
prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context)
else:
prop = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category', context=context)
return prop and prop.id or False
_defaults = {

View File

@ -151,12 +151,12 @@ class account_config_settings(osv.osv_memory):
self.write(cr, uid, [id], vals, context)
return id
def onchange_company_id(self, cr, uid, ids, company_id):
def onchange_company_id(self, cr, uid, ids, company_id, context=None):
# update related fields
values = {}
values['currency_id'] = False
if company_id:
company = self.pool.get('res.company').browse(cr, uid, company_id)
company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
has_chart_of_accounts = company_id not in self.pool.get('account.installer').get_unconfigured_cmp(cr, uid)
fiscalyear_count = self.pool.get('account.fiscalyear').search_count(cr, uid,
[('date_start', '<=', time.strftime('%Y-%m-%d')), ('date_stop', '>=', time.strftime('%Y-%m-%d')),

View File

@ -33,7 +33,7 @@
<label for="company_id" string="Select Company"/>
<field name="company_id"
widget="selection"
on_change="onchange_company_id(company_id)"
on_change="onchange_company_id(company_id, context)"
class="oe_inline"/>
</div>
<div>

View File

@ -23,7 +23,6 @@ import time
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp import netsvc
class account_invoice_refund(osv.osv_memory):
@ -90,7 +89,6 @@ class account_invoice_refund(osv.osv_memory):
account_m_line_obj = self.pool.get('account.move.line')
mod_obj = self.pool.get('ir.model.data')
act_obj = self.pool.get('ir.actions.act_window')
wf_service = netsvc.LocalService('workflow')
inv_tax_obj = self.pool.get('account.invoice.tax')
inv_line_obj = self.pool.get('account.invoice.line')
res_users_obj = self.pool.get('res.users')
@ -161,8 +159,7 @@ class account_invoice_refund(osv.osv_memory):
to_reconcile_ids[line.account_id.id] = [line.id]
if type(line.reconcile_id) != osv.orm.browse_null:
reconcile_obj.unlink(cr, uid, line.reconcile_id.id)
wf_service.trg_validate(uid, 'account.invoice', \
refund.id, 'invoice_open', cr)
inv_obj.signal_invoice_open(cr, uid, [refund.id])
refund = inv_obj.browse(cr, uid, refund_id[0], context=context)
for tmpline in refund.move_id.line_id:
if tmpline.account_id.id == inv.account_id.id:

View File

@ -21,7 +21,6 @@
from openerp.osv import osv
from openerp.tools.translate import _
from openerp import netsvc
from openerp import pooler
class account_invoice_confirm(osv.osv_memory):
@ -33,16 +32,16 @@ class account_invoice_confirm(osv.osv_memory):
_description = "Confirm the selected invoices"
def invoice_confirm(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService('workflow')
if context is None:
context = {}
pool_obj = pooler.get_pool(cr.dbname)
data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context)
account_invoice_obj = pool_obj.get('account.invoice')
data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context)
for record in data_inv:
if record['state'] not in ('draft','proforma','proforma2'):
raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-Forma' state."))
wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_open', cr)
account_invoice_obj.signal_invoice_open(cr, uid, [ record['id'] ])
return {'type': 'ir.actions.act_window_close'}
account_invoice_confirm()
@ -59,14 +58,13 @@ class account_invoice_cancel(osv.osv_memory):
def invoice_cancel(self, cr, uid, ids, context=None):
if context is None:
context = {}
wf_service = netsvc.LocalService('workflow')
pool_obj = pooler.get_pool(cr.dbname)
data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context)
account_invoice_obj = pool_obj.get('account.invoice')
data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context)
for record in data_inv:
if record['state'] in ('cancel','paid'):
raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' or 'Done' state."))
wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_cancel', cr)
account_invoice_obj.signal_invoice_cancel(cr , uid, [record['id']])
return {'type': 'ir.actions.act_window_close'}
account_invoice_cancel()

View File

@ -35,8 +35,7 @@ class account_state_open(osv.osv_memory):
data_inv = obj_invoice.browse(cr, uid, context['active_ids'][0], context=context)
if data_inv.reconciled:
raise osv.except_osv(_('Warning!'), _('Invoice is already reconciled.'))
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.invoice', context['active_ids'][0], 'open_test', cr)
obj_invoice.signal_open_test(cr, uid, context['active_ids'][0])
return {'type': 'ir.actions.act_window_close'}
account_state_open()

View File

@ -331,6 +331,9 @@ class account_asset_asset(osv.osv):
depreciation_obj = self.pool.get('account.asset.depreciation.line')
period = period_obj.browse(cr, uid, period_id, context=context)
depreciation_ids = depreciation_obj.search(cr, uid, [('asset_id', 'in', ids), ('depreciation_date', '<=', period.date_stop), ('depreciation_date', '>=', period.date_start), ('move_check', '=', False)], context=context)
if context is None:
context = {}
context.update({'depreciation_date':period.date_stop})
return depreciation_obj.create_move(cr, uid, depreciation_ids, context=context)
def create(self, cr, uid, vals, context=None):
@ -388,7 +391,7 @@ class account_asset_depreciation_line(osv.osv):
created_move_ids = []
asset_ids = []
for line in self.browse(cr, uid, ids, context=context):
depreciation_date = time.strftime('%Y-%m-%d')
depreciation_date = context.get('depreciation_date') or time.strftime('%Y-%m-%d')
period_ids = period_obj.find(cr, uid, depreciation_date, context=context)
company_currency = line.asset_id.company_id.currency_id.id
current_currency = line.asset_id.currency_id.id

View File

@ -238,7 +238,12 @@ class res_partner(osv.osv):
from report import account_followup_print
assert len(ids) == 1
if context is None:
context = {}
partner = self.browse(cr, uid, ids[0], context=context)
#copy the context to not change global context. Overwrite it because _() looks for the lang in local variable 'context'.
#Set the language to use = the partner language
context = dict(context, lang=partner.lang)
followup_table = ''
if partner.unreconciled_aml_ids:
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
@ -251,13 +256,14 @@ class res_partner(osv.osv):
followup_table += '''
<table border="2" width=100%%>
<tr>
<td>Invoice date</td>
<td>Reference</td>
<td>Due date</td>
<td>Amount (%s)</td>
<td>Lit.</td>
<td>''' + _("Invoice Date") + '''</td>
<td>''' + _("Description") + '''</td>
<td>''' + _("Reference") + '''</td>
<td>''' + _("Due Date") + '''</td>
<td>''' + _("Amount") + " (%s)" % (currency.symbol) + '''</td>
<td>''' + _("Lit.") + '''</td>
</tr>
''' % (currency.symbol)
'''
total = 0
for aml in currency_dict['line']:
block = aml['blocked'] and 'X' or ' '
@ -268,13 +274,28 @@ class res_partner(osv.osv):
if date <= current_date and aml['balance'] > 0:
strbegin = "<TD><B>"
strend = "</B></TD>"
followup_table +="<TR>" + strbegin + str(aml['date']) + strend + strbegin + aml['ref'] + strend + strbegin + str(date) + strend + strbegin + str(aml['balance']) + strend + strbegin + block + strend + "</TR>"
followup_table +="<TR>" + strbegin + str(aml['date']) + strend + strbegin + aml['name'] + strend + strbegin + aml['ref'] + strend + strbegin + str(date) + strend + strbegin + str(aml['balance']) + strend + strbegin + block + strend + "</TR>"
total = rml_parse.formatLang(total, dp='Account', currency_obj=currency)
followup_table += '''<tr> </tr>
</table>
<center>Amount due: %s </center>''' % (total)
<center>''' + _("Amount due") + ''' : %s </center>''' % (total)
return followup_table
def write(self, cr, uid, ids, vals, context=None):
if vals.get("payment_responsible_id", False):
for part in self.browse(cr, uid, ids, context=context):
if part.payment_responsible_id <> vals["payment_responsible_id"]:
#Find partner_id of user put as responsible
responsible_partner_id = self.pool.get("res.users").browse(cr, uid, vals['payment_responsible_id'], context=context).partner_id.id
self.pool.get("mail.thread").message_post(cr, uid, 0,
body = _("You became responsible to do the next action for the payment follow-up of") + " <b><a href='#id=" + str(part.id) + "&view_type=form&model=res.partner'> " + part.name + " </a></b>",
type = 'comment',
subtype = "mail.mt_comment", context = context,
model = 'res.partner', res_id = part.id,
notified_partner_ids = [(6, 0, [responsible_partner_id])],
partner_ids = [(6, 0, [responsible_partner_id])])
return super(res_partner, self).write(cr, uid, ids, vals, context=context)
def action_done(self, cr, uid, ids, context=None):
return self.write(cr, uid, ids, {'payment_next_action_date': False, 'payment_next_action':'', 'payment_responsible_id': False}, context=context)
@ -408,13 +429,16 @@ class res_partner(osv.osv):
_inherit = "res.partner"
_columns = {
'payment_responsible_id':fields.many2one('res.users', ondelete='set null', string='Follow-up Responsible',
help="Optionally you can assign a user to this field, which will make him responsible for the action."),
'payment_note':fields.text('Customer Payment Promise', help="Payment Note"),
help="Optionally you can assign a user to this field, which will make him responsible for the action.",
track_visibility="onchange"),
'payment_note':fields.text('Customer Payment Promise', help="Payment Note", track_visibility="onchange"),
'payment_next_action':fields.text('Next Action',
help="This is the next action to be taken. It will automatically be set when the partner gets a follow-up level that requires a manual action. "),
help="This is the next action to be taken. It will automatically be set when the partner gets a follow-up level that requires a manual action. ",
track_visibility="onchange"),
'payment_next_action_date':fields.date('Next Action Date',
help="This is when the manual follow-up is needed. " \
"The date will be set to the current date when the partner gets a follow-up level that requires a manual action. Can be practical to set manually e.g. to see if he keeps his promises."),
"The date will be set to the current date when the partner gets a follow-up level that requires a manual action. "\
"Can be practical to set manually e.g. to see if he keeps his promises."),
'unreconciled_aml_ids':fields.one2many('account.move.line', 'partner_id', domain=['&', ('reconcile_id', '=', False), '&',
('account_id.active','=', True), '&', ('account_id.type', '=', 'receivable'), ('state', '!=', 'draft')]),
'latest_followup_date':fields.function(_get_latest, method=True, type='date', string="Latest Follow-up Date",

View File

@ -35,10 +35,10 @@
<filter string="Follow-ups To Do" domain="[('payment_next_action_date', '&lt;=', time.strftime('%%Y-%%m-%%d')), ('payment_amount_overdue', '>', 0.0)]" name="todo"/>
<separator/>
<filter string="No Responsible" domain="[('payment_responsible_id', '=', False)]"/>
<filter string="My Follow-ups" domain="[('payment_responsible_id','=', uid)]"/>
<filter string="My Follow-ups" domain="[('payment_responsible_id','=', uid)]" name="my"/>
</group>
<group expand="1" string="Group By...">
<filter string="Responsible" context="{'group_by':'payment_responsible_id'}"/>
<filter string="Follow-up Responsible" context="{'group_by':'payment_responsible_id'}"/>
</group>
</search>
</field>
@ -132,6 +132,18 @@
<!-- Menus about followup of customers -->
<menuitem id="account_followup_s" action="action_customer_followup"
parent="menu_finance_followup" name="Do Manual Follow-Ups" sequence="3"/>
<record id="action_customer_my_followup" model="ir.actions.act_window">
<field name="name">My Follow-Ups</field>
<field name="view_id" ref="customer_followup_tree"/>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('payment_amount_due', '>', 0.0)]</field>
<field name="context">{'Followupfirst':True, 'search_default_todo': True, 'search_default_my': True} </field>
<field name="search_view_id" ref="customer_followup_search_view"/>
</record>
<menuitem id="base.menu_sales_followup" parent="base.menu_base_partner" name="Payment Follow-up" groups="account.group_account_invoice" sequence="2"/>
<menuitem id="menu_sale_followup" parent="base.menu_sales_followup" sequence="10"
action="action_customer_my_followup" groups="account.group_account_invoice"/>
</data>
</openerp>

View File

@ -44,8 +44,7 @@ class TestAccountFollowup(TransactionCase):
'quantity': 5,
'price_unit':200
})]})
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.invoice', self.invoice_id, 'invoice_open', cr)
self.registry('account.invoice').signal_invoice_open(cr, uid, [self.invoice_id])
self.voucher = self.registry("account.voucher")

View File

@ -26,6 +26,8 @@ from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp import SUPERUSER_ID
class account_followup_stat_by_partner(osv.osv):
_name = "account_followup.stat.by.partner"
_description = "Follow-up Statistics by Partner"
@ -127,7 +129,7 @@ class account_followup_print(osv.osv_memory):
'email_body': fields.text('Email Body'),
'summary': fields.text('Summary', readonly=True),
'test_print': fields.boolean('Test Print',
help='Check if you want to print follow-ups without changing follow-ups level.'),
help='Check if you want to print follow-ups without changing follow-up level.'),
}
def _get_followup(self, cr, uid, context=None):
@ -204,7 +206,7 @@ class account_followup_print(osv.osv_memory):
if not part.unreconciled_aml_ids:
partners_to_clear.append(part.id)
self.pool.get('res.partner').action_done(cr, uid, partners_to_clear, context=context)
return len(ids)
return len(partners_to_clear)
def do_process(self, cr, uid, ids, context=None):
if context is None:
@ -313,6 +315,13 @@ class account_followup_print(osv.osv_memory):
if stat_line_id not in partner_list:
partner_list.append(stat_line_id)
to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': stat_line_id}
#Remove partners that are other companies in OpenERP
comp_obj = self.pool.get("res.company")
comp_ids = comp_obj.search(cr, SUPERUSER_ID, [], context=context)
for comp in comp_obj.browse(cr, SUPERUSER_ID, comp_ids, context=context):
company_partner_wiz_id = comp.partner_id.id * 10000 + company_id
if company_partner_wiz_id in partner_list:
partner_list.remove(company_partner_wiz_id)
return {'partner_ids': partner_list, 'to_update': to_update}
account_followup_print()

View File

@ -23,7 +23,6 @@ import logging
import time
from openerp.osv import fields, osv
from openerp import netsvc
_logger = logging.getLogger(__name__)
@ -120,9 +119,7 @@ class payment_order(osv.osv):
def set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_create(uid, 'payment.order', id, cr)
self.create_workflow(cr, uid, ids)
return True
def action_open(self, cr, uid, ids, *args):
@ -135,9 +132,8 @@ class payment_order(osv.osv):
return True
def set_done(self, cr, uid, ids, *args):
wf_service = netsvc.LocalService("workflow")
self.write(cr, uid, ids, {'date_done': time.strftime('%Y-%m-%d')})
wf_service.trg_validate(uid, 'payment.order', ids[0], 'done', cr)
self.signal_done(cr, uid, [ids[0]])
return True
def copy(self, cr, uid, id, default=None, context=None):

View File

@ -22,7 +22,6 @@
import time
from lxml import etree
from openerp import netsvc
from openerp.osv import fields, osv
import openerp.addons.decimal_precision as dp
from openerp.tools.translate import _
@ -50,13 +49,25 @@ class account_config_settings(osv.osv_memory):
'company_id', 'income_currency_exchange_account_id',
type='many2one',
relation='account.account',
string="Gain Exchange Rate Account"),
string="Gain Exchange Rate Account",
domain="[('type', '=', 'other')]"),
'expense_currency_exchange_account_id': fields.related(
'company_id', 'expense_currency_exchange_account_id',
type="many2one",
relation='account.account',
string="Loss Exchange Rate Account"),
string="Loss Exchange Rate Account",
domain="[('type', '=', 'other')]"),
}
def onchange_company_id(self, cr, uid, ids, company_id, context=None):
res = super(account_config_settings, self).onchange_company_id(cr, uid, ids, company_id, context=context)
if company_id:
company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id or False,
'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id or False})
else:
res['value'].update({'income_currency_exchange_account_id': False,
'expense_currency_exchange_account_id': False})
return res
class account_voucher(osv.osv):
def _check_paid(self, cr, uid, ids, name, args, context=None):
@ -820,10 +831,7 @@ class account_voucher(osv.osv):
return vals
def button_proforma_voucher(self, cr, uid, ids, context=None):
context = context or {}
wf_service = netsvc.LocalService("workflow")
for vid in ids:
wf_service.trg_validate(uid, 'account.voucher', vid, 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, ids)
return {'type': 'ir.actions.act_window_close'}
def proforma_voucher(self, cr, uid, ids, context=None):
@ -831,9 +839,7 @@ class account_voucher(osv.osv):
return True
def action_cancel_draft(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
for voucher_id in ids:
wf_service.trg_create(uid, 'account.voucher', voucher_id, cr)
self.create_workflow(cr, uid, ids)
self.write(cr, uid, ids, {'state':'draft'})
return True
@ -1508,7 +1514,6 @@ class account_bank_statement(osv.osv):
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, next_number, context=None):
voucher_obj = self.pool.get('account.voucher')
wf_service = netsvc.LocalService("workflow")
move_line_obj = self.pool.get('account.move.line')
bank_st_line_obj = self.pool.get('account.bank.statement.line')
st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context)
@ -1516,7 +1521,7 @@ class account_bank_statement(osv.osv):
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context)
if st_line.voucher_id.state == 'cancel':
voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context)
wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr)
voucher_obj.signal_proforma_voucher(cr, uid, [st_line.voucher_id.id])
v = voucher_obj.browse(cr, uid, st_line.voucher_id.id, context=context)
bank_st_line_obj.write(cr, uid, [st_line_id], {

View File

@ -159,8 +159,6 @@
I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case1'))
data = []
@ -183,10 +181,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my first voucher is valid
-
@ -257,8 +253,6 @@
I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case1'))
data = []
@ -281,10 +275,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my second voucher is valid
-

View File

@ -131,8 +131,6 @@
I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2_suppl'))
data = []
@ -162,10 +160,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
@ -237,8 +233,6 @@
I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2_suppl'))
data = []
@ -268,10 +262,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that my voucher state is posted
-

View File

@ -182,8 +182,7 @@
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
@ -258,8 +257,7 @@
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that my voucher state is posted
-

View File

@ -163,8 +163,6 @@
I fill amounts 130 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2b'))
data = []
@ -180,10 +178,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
@ -247,8 +243,6 @@
and I fully reconcil the 2 previous invoices
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2b'))
data = []
@ -271,10 +265,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that my voucher state is posted
-

View File

@ -118,8 +118,6 @@
I fill amounts 100 for the invoice of 150€ and 20 for the invoice of 80€
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case3'))
data = []
@ -142,10 +140,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my first voucher is valid
-
@ -209,8 +205,6 @@
I fill amounts 50 for the invoice of 150€ and 70 for the invoice of 80€
-
!python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case3'))
data = []
@ -233,10 +227,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my second voucher is valid
-

View File

@ -144,8 +144,7 @@
!python {model: account.voucher}: |
from openerp import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-

View File

@ -61,8 +61,7 @@
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, [voucher_id.id])
-
Finally i will Confirm the state of the invoice is paid

View File

@ -65,8 +65,7 @@
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr)
self.signal_proforma_voucher(cr, uid, [voucher_id.id])
-
I check that move lines are reconciled meaning voucher is paid
-

View File

@ -307,8 +307,9 @@
</group>
<group>
<field name="date" invisible="context.get('line_type', False)" on_change="onchange_date(date, currency_id, payment_rate_currency_id, amount, company_id, context)"/>
<field name="period_id"/>
<field name="reference" invisible="context.get('line_type', False)" string="Payment Ref" placeholder="e.g. 003/10"/>
<field name="name" colspan="2" invisible="context.get('line_type', False)" placeholder="e.g. Invoice SAJ/0042"/>
<field name="name" invisible="context.get('line_type', False)" placeholder="e.g. Invoice SAJ/0042"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="account_id"

View File

@ -1,75 +1,28 @@
# Russian translation for openobject-addons
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-03 16:03+0000\n"
"PO-Revision-Date: 2012-12-07 08:15+0000\n"
"Last-Translator: Denis Karataev <dskarataev@gmail.com>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-02-13 09:46+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-08 04:59+0000\n"
"X-Generator: Launchpad (build 16341)\n"
"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: base_crypt
#: model:ir.model,name:base_crypt.model_res_users
#. module: auth_crypt
#: field:res.users,password_crypt:0
msgid "Encrypted Password"
msgstr "Зашифрованный пароль"
#. module: auth_crypt
#: model:ir.model,name:auth_crypt.model_res_users
msgid "Users"
msgstr "Пользователи"
#~ msgid "res.users"
#~ msgstr "res.users"
#, python-format
#~ msgid "Error"
#~ msgstr "Error"
#, python-format
#~ msgid "Please specify the password !"
#~ msgstr "Необходимо указать пароль!"
#~ msgid "The chosen company is not in the allowed companies for this user"
#~ msgstr ""
#~ "Выбранная организация отсутствует в списке разрешённых для этого пользователя"
#~ msgid "You can not have two users with the same login !"
#~ msgstr "Не может быть двух пользователей с одинаковым именем пользователя!"
#~ msgid "Base - Password Encryption"
#~ msgstr "Основной - Шифрование паролей"
#~ msgid ""
#~ "This module replaces the cleartext password in the database with a password "
#~ "hash,\n"
#~ "preventing anyone from reading the original password.\n"
#~ "For your existing user base, the removal of the cleartext passwords occurs "
#~ "the first time\n"
#~ "a user logs into the database, after installing base_crypt.\n"
#~ "After installing this module it won't be possible to recover a forgotten "
#~ "password for your\n"
#~ "users, the only solution is for an admin to set a new password.\n"
#~ "\n"
#~ "Note: installing this module does not mean you can ignore basic security "
#~ "measures,\n"
#~ "as the password is still transmitted unencrypted on the network (by the "
#~ "client),\n"
#~ "unless you are using a secure protocol such as XML-RPCS.\n"
#~ " "
#~ msgstr ""
#~ "Этот модуль заменяет текстовые пароли в базе данных на их хэши,\n"
#~ "предотвращая хищение оригинальных паролей.\n"
#~ "Для существующей базы пользователей, удаление текстового пароля происходит "
#~ "при\n"
#~ "первом входе пользователя после установки base_crypt.\n"
#~ "После установки этого модуля станет невозможно восстановление пароля \n"
#~ "пользователя. Возможна будет только замена пароля.\n"
#~ "\n"
#~ "Прим.: установка этого модуля не избавляет от необходимости соблюдать\n"
#~ "базовые меры безопасности, поскольку пароли всё ещё передаются открытым\n"
#~ "текстом по сети, если не используется безопасный протокол вроде XML-RPCS.\n"
#~ " "

View File

@ -2,8 +2,10 @@ import functools
import logging
import simplejson
import werkzeug.utils
from werkzeug.exceptions import BadRequest
import openerp
from openerp import SUPERUSER_ID
import openerp.addons.web.http as oeweb
from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect
@ -69,6 +71,13 @@ class OAuthController(oeweb.Controller):
# auth_signup is not installed
_logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,))
url = "/#action=login&oauth_error=1"
except openerp.exceptions.AccessDenied:
# oauth credentials not valid, user could be on a temporary session
_logger.info('OAuth2: access denied, redirect to main page in case a valid session exists, without setting cookies')
url = "/#action=login&oauth_error=3"
redirect = werkzeug.utils.redirect(url, 303)
redirect.autocorrect_location_header = False
return redirect
except Exception, e:
# signup error
_logger.exception("OAuth2: %s" % str(e))

View File

@ -0,0 +1,23 @@
# Russian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-02-13 09:46+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: auth_oauth_signup
#: model:ir.model,name:auth_oauth_signup.model_res_users
msgid "Users"
msgstr "Пользователи"

View File

@ -36,6 +36,8 @@ class res_users(osv.Model):
login = super(res_users, self)._auth_oauth_signin(cr, uid, provider, validation, params, context=context)
except openerp.exceptions.AccessDenied:
if context and context.get('no_user_creation'):
return None
state = simplejson.loads(params['state'])
token = state.get('t')
oauth_uid = validation['user_id']

View File

@ -234,11 +234,12 @@
<field name="arch" type="xml">
<search string="Search Meetings">
<field name="name" string="Meeting" filter_domain="[('name','ilike',self)]"/>
<filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
<field name="partner_ids"/>
<field name="categ_ids"/>
<field name="user_id"/>
<separator/>
<filter string="My Meetings" help="My Meetings" domain="[('user_id','=',uid)]"/>
<field name="user_id"/>
<field name="partner_ids"/>
<filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
</search>
</field>
</record>

View File

@ -567,7 +567,8 @@ class crm_lead(base_stage, format_address, osv.osv):
for opportunity in opportunities:
subject.append(opportunity.name)
title = "%s : %s" % (opportunity.type == 'opportunity' and _('Merged opportunity') or _('Merged lead'), opportunity.name)
details.append(self._mail_body(cr, uid, opportunity, CRM_LEAD_FIELDS_TO_MERGE, title=title, context=context))
fields = list(CRM_LEAD_FIELDS_TO_MERGE)
details.append(self._mail_body(cr, uid, opportunity, fields, title=title, context=context))
# Chatter message's subject
subject = subject[0] + ": " + ", ".join(subject[1:])
@ -627,7 +628,10 @@ class crm_lead(base_stage, format_address, osv.osv):
opportunities = self.browse(cr, uid, ids, context=context)
sequenced_opps = []
for opportunity in opportunities:
sequenced_opps.append((opportunity.stage_id and opportunity.stage_id.state != 'cancel' and opportunity.stage_id.sequence or 0, opportunity))
if opportunity.stage_id and opportunity.stage_id.state != 'cancel':
sequenced_opps.append((opportunity.stage_id.sequence, opportunity))
else:
sequenced_opps.append((-1, opportunity))
sequenced_opps.sort(key=lambda tup: tup[0], reverse=True)
opportunities = [opportunity for sequence, opportunity in sequenced_opps]
ids = [opportunity.id for opportunity in opportunities]
@ -636,7 +640,8 @@ class crm_lead(base_stage, format_address, osv.osv):
tail_opportunities = opportunities_rest
merged_data = self._merge_data(cr, uid, ids, highest, CRM_LEAD_FIELDS_TO_MERGE, context=context)
fields = list(CRM_LEAD_FIELDS_TO_MERGE)
merged_data = self._merge_data(cr, uid, ids, highest, fields, context=context)
# Merge messages and attachements into the first opportunity
self._merge_opportunity_history(cr, uid, highest.id, tail_opportunities, context=context)
@ -651,7 +656,7 @@ class crm_lead(base_stage, format_address, osv.osv):
section_stages = self.pool.get('crm.case.section').read(cr, uid, merged_data['section_id'], ['stage_ids'], context=context)
if merged_data.get('stage_id') not in section_stages['stage_ids']:
stages_sequences = self.pool.get('crm.case.stage').search(cr, uid, [('id','in',section_stages['stage_ids'])], order='sequence', limit=1, context=context)
merged_data['stage_id'] = stages_sequences[0]
merged_data['stage_id'] = stages_sequences and stages_sequences[0] or False
# Write merged data into first opportunity
self.write(cr, uid, [highest.id], merged_data, context=context)
# Delete tail opportunities

View File

@ -327,6 +327,7 @@
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike',self)]"/>
<field name="section_id" context="{'invisible_section': False, 'default_section_id': self}"/>
<field name="user_id"/>
<field name="partner_id"/>
<field name="create_date"/>
<field name="country_id" context="{'invisible_country': False}"/>
<separator/>

View File

@ -58,11 +58,11 @@ class crm_lead2opportunity_partner(osv.osv_memory):
if partner_id:
# Search for opportunities that have the same partner and that arent done or cancelled
ids = lead_obj.search(cr, uid, [('partner_id', '=', partner_id)])
ids = lead_obj.search(cr, uid, [('partner_id', '=', partner_id), ('state', '!=', 'done')])
for id in ids:
tomerge.add(id)
if email:
ids = lead_obj.search(cr, uid, [('email_from', 'ilike', email[0])])
ids = lead_obj.search(cr, uid, [('email_from', 'ilike', email[0]), ('state', '!=', 'done')])
for id in ids:
tomerge.add(id)

View File

@ -21,7 +21,7 @@
<field name="email_from"/>
<field name="phone"/>
<field name="stage_id"/>
<field name="user_id" invisible="1"/>
<field name="user_id"/>
<field name="section_id"/>
</tree>
</field>
@ -67,7 +67,7 @@
<field name="email_from"/>
<field name="phone"/>
<field name="stage_id"/>
<field name="user_id" invisible="1"/>
<field name="user_id"/>
<field name="section_id"/>
</tree>
</field>

View File

@ -18,7 +18,7 @@
<field name="email_from"/>
<field name="phone"/>
<field name="stage_id"/>
<field name="user_id" invisible="1"/>
<field name="user_id"/>
<field name="section_id"/>
</tree>
</field>

View File

@ -62,5 +62,66 @@
</field>
</record>
<record id="view_crm_lead_geo_assign_form" model="ir.ui.view">
<field name="name">crm.lead.lead.geo_assign.inherit</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_form_view_leads"/>
<field name="arch" type="xml">
<data>
<xpath expr="//notebook/page[@string='Extra Info']" position="after">
<page string="Assignation">
<group name="partner_assign_group">
<group string="Partner Assignation">
<field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','&lt;&gt;',False)]"/>
<label for="date_assign"/>
<div>
<field name="date_assign"/>
<button string="Forward"
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
name="%(crm_lead_forward_to_partner_act)d"
icon="terp-mail-forward" type="action"
context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/>
</div>
</group>
<group string="Geo Assignation">
<field name="partner_latitude"/>
<field name="partner_longitude"/>
<span/>
<button string="Geo Assign" name="action_assign_partner" type="object" colspan="1"
icon="gtk-apply"/>
</group>
</group>
</page>
</xpath>
</data>
</field>
</record>
<record id="view_crm_lead_geo_assign_tree" model="ir.ui.view">
<field name="name">crm.lead.lead.geo_assign.tree.inherit</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_tree_view_leads"/>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="partner_assigned_id"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="crm_lead_partner_filter">
<field name="name">crm.lead.partner.filter.assigned</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.view_crm_case_leads_filter"/>
<field name="arch" type="xml">
<filter string="Team" position="after">
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
</filter>
<field name="partner_id" position="after">
<field name="partner_assigned_id"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@ -1,4 +1,5 @@
import simplejson
import urllib
import openerp.addons.web.http as openerpweb
import openerp.addons.web.controllers.main as webmain
@ -14,11 +15,15 @@ class EDI(openerpweb.Controller):
modules_json = simplejson.dumps(modules)
js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in webmain.manifest_list(req, modules_str, 'js'))
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in webmain.manifest_list(req, modules_str, 'css'))
# `url` may contain a full URL with a valid query string, we basically want to watch out for XML brackets and double-quotes
safe_url = urllib.quote_plus(url,':/?&;=')
return webmain.html_template % {
'js': js,
'css': css,
'modules': modules_json,
'init': 's.edi.edi_import("%s");' % url,
'init': 's.edi.edi_import("%s");' % safe_url,
}
@openerpweb.jsonrequest

View File

@ -21,7 +21,6 @@
import time
from openerp import netsvc
from openerp.osv import fields, osv
from openerp.tools.translate import _
@ -152,7 +151,6 @@ class hr_expense_expense(osv.osv):
account_journal = self.pool.get('account.journal')
voucher_obj = self.pool.get('account.voucher')
currency_obj = self.pool.get('res.currency')
wkf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
for exp in self.browse(cr, uid, ids, context=context):

View File

@ -24,10 +24,9 @@
import datetime
import time
from itertools import groupby
from operator import itemgetter
from operator import attrgetter, itemgetter
import math
from openerp import netsvc
from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
@ -304,10 +303,8 @@ class hr_holidays(osv.osv):
'manager_id': False,
'manager_id2': False,
})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_delete(uid, 'hr.holidays', id, cr)
wf_service.trg_create(uid, 'hr.holidays', id, cr)
self.delete_workflow(cr, uid, ids)
self.create_workflow(cr, uid, ids)
to_unlink = []
for record in self.browse(cr, uid, ids, context=context):
for record2 in record.linked_request_ids:
@ -370,11 +367,11 @@ class hr_holidays(osv.osv):
'employee_id': emp.id
}
leave_ids.append(self.create(cr, uid, vals, context=None))
wf_service = netsvc.LocalService("workflow")
for leave_id in leave_ids:
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
# TODO is it necessary to interleave the calls?
self.signal_confirm(cr, uid, [leave_id])
self.signal_validate(cr, uid, [leave_id])
self.signal_second_validate(cr, uid, [leave_id])
return True
def holidays_confirm(self, cr, uid, ids, context=None):
@ -404,9 +401,7 @@ class hr_holidays(osv.osv):
meeting_obj.unlink(cr, uid, [record.meeting_id.id])
# If a category that created several holidays, cancel all related
wf_service = netsvc.LocalService("workflow")
for request in record.linked_request_ids or []:
wf_service.trg_validate(uid, 'hr.holidays', request.id, 'refuse', cr)
self.signal_refuse(cr, uid, map(attrgetter('id'), record.linked_request_ids or []))
self._remove_resource_leave(cr, uid, ids, context=context)
return True
@ -478,10 +473,9 @@ class hr_employee(osv.osv):
leave_id = holiday_obj.create(cr, uid, {'name': _('Leave Request for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'remove', 'holiday_type': 'employee', 'number_of_days_temp': abs(diff)}, context=context)
else:
return False
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
holidays_obj.signal_confirm(cr, uid, [leave_id])
holidays_obj.signal_validate(cr, uid, [leave_id])
holidays_obj.signal_second_validate(cr, uid, [leave_id])
return True
def _get_remaining_days(self, cr, uid, ids, name, args, context=None):

View File

@ -18,10 +18,8 @@
I again set to draft and then confirm.
-
!python {model: hr.holidays}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')])
wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_employee1_cl'), 'confirm', cr)
self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')])
self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')])
-
I validate the holiday request by clicking on "To Approve" button.
-

View File

@ -26,7 +26,6 @@ from datetime import datetime
from datetime import timedelta
from dateutil import relativedelta
from openerp import netsvc
from openerp.osv import fields, osv
from openerp import tools
from openerp.tools.translate import _
@ -331,13 +330,12 @@ class hr_payslip(osv.osv):
def refund_sheet(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
for payslip in self.browse(cr, uid, ids, context=context):
id_copy = self.copy(cr, uid, payslip.id, {'credit_note': True, 'name': _('Refund: ')+payslip.name}, context=context)
self.compute_sheet(cr, uid, [id_copy], context=context)
wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'hr_verify_sheet', cr)
wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'process_sheet', cr)
self.signal_hr_verify_sheet(cr, uid, [id_copy])
self.signal_process_sheet(cr, uid, [id_copy])
form_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_form')
form_res = form_id and form_id[1] or False
tree_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_tree')

View File

@ -104,10 +104,8 @@
I want to check cancel button. So I first cancel the sheet then make it set to draft.
-
!python {model: hr.payslip}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None)
wf_service.trg_validate(uid, 'hr.payslip', ref("hr_payslip_0"), 'draft', cr)
self.signal_draft(cr, uid, [ref("hr_payslip_0")])
-
Then I click on the "Confirm" button.
-

View File

@ -371,7 +371,6 @@ class hr_applicant(base_stage, osv.Model):
update_vals = {}
update_vals.update({
'description': msg.get('body'),
'email_from': msg.get('from'),
'email_cc': msg.get('cc'),
})

View File

@ -187,6 +187,8 @@
domain="[('date_action','&lt;&gt;',False)]" help="Filter and view on next actions and date"/>
<field name="job_id"/>
<field name="user_id"/>
<separator/>
<field name="categ_ids"/>
<group expand="0" string="Group By...">
<filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Department" domain="[]" context="{'group_by':'department_id'}"/>

View File

@ -115,6 +115,4 @@
I click on "Create Invoice" button to create Invoice and validate the invoice.
-
!python {model: hr.timesheet.invoice.create.final}: |
from openerp import netsvc
wkf_service = netsvc.LocalService("workflow")
res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]})

View File

@ -114,6 +114,4 @@
I click on "Create Invoice" button to create Invoice and validate the invoice.
-
!python {model: hr.timesheet.invoice.create.final}: |
from openerp import netsvc
wkf_service = netsvc.LocalService("workflow")
res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]})

View File

@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp import netsvc
class hr_timesheet_sheet(osv.osv):
_name = "hr_timesheet_sheet.sheet"
@ -93,8 +92,7 @@ class hr_timesheet_sheet(osv.osv):
self.check_employee_attendance_state(cr, uid, sheet.id, context=context)
di = sheet.user_id.company_id.timesheet_max_difference
if (abs(sheet.total_difference) < di) or not di:
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'hr_timesheet_sheet.sheet', sheet.id, 'confirm', cr)
self.signal_confirm(cr, uid, [sheet.id])
else:
raise osv.except_osv(_('Warning!'), _('Please verify that the total difference of the sheet is lower than %.2f.') %(di,))
return True
@ -192,9 +190,7 @@ class hr_timesheet_sheet(osv.osv):
def action_set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'})
wf_service = netsvc.LocalService('workflow')
for id in ids:
wf_service.trg_create(uid, self._name, id, cr)
self.create_workflow(cr, uid, ids)
return True
def name_get(self, cr, uid, ids, context=None):

View File

@ -7,24 +7,24 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-02-01 10:13+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-02-14 15:58+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Documents"
msgstr ""
msgstr "Dokumentumok"
#. module: knowledge
#: model:ir.model,name:knowledge.model_knowledge_config_settings
msgid "knowledge.config.settings"
msgstr ""
msgstr "knowledge.config.settings"
#. module: knowledge
#: help:knowledge.config.settings,module_document_webdav:0
@ -32,11 +32,13 @@ msgid ""
"Access your documents in OpenERP through WebDAV.\n"
" This installs the module document_webdav."
msgstr ""
"Az OpenERP dokumentumok WebDAV-on keresztüli elérése.\n"
" Ez a document_webdav modult telepíti."
#. module: knowledge
#: help:knowledge.config.settings,module_document_page:0
msgid "This installs the module document_page."
msgstr ""
msgstr "Ez a document_page modult telepíti."
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document2
@ -47,12 +49,12 @@ msgstr "Csoportmunában készült tartalom"
#: model:ir.actions.act_window,name:knowledge.action_knowledge_configuration
#: view:knowledge.config.settings:0
msgid "Configure Knowledge"
msgstr ""
msgstr "Tudástár beállítása"
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Knowledge and Documents Management"
msgstr ""
msgstr "Tudástár és dokumentum kezelés"
#. module: knowledge
#: help:knowledge.config.settings,module_document:0
@ -62,31 +64,36 @@ msgid ""
"and a document dashboard.\n"
" This installs the module document."
msgstr ""
"Ez egy komplett dokumentum kezelő rendszer, beleértve: felhasználó "
"hitelesítást,\n"
" teljes dokumentum keresőt (de a pptx és docx nem "
"támogatott), és egy dokumentum vezérlőpultot.\n"
" Ez a document modult telepíti."
#. module: knowledge
#: field:knowledge.config.settings,module_document_page:0
msgid "Create static web pages"
msgstr ""
msgstr "Statikus weboldalak készítése"
#. module: knowledge
#: field:knowledge.config.settings,module_document_ftp:0
msgid "Share repositories (FTP)"
msgstr ""
msgstr "Elérési út (FTP) megosztás"
#. module: knowledge
#: field:knowledge.config.settings,module_document:0
msgid "Manage documents"
msgstr ""
msgstr "Dokumentum kezelés"
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Cancel"
msgstr ""
msgstr "Mégsem"
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "Apply"
msgstr ""
msgstr "Alkalmaz"
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document_configuration
@ -99,16 +106,18 @@ msgid ""
"Access your documents in OpenERP through an FTP interface.\n"
" This installs the module document_ftp."
msgstr ""
"Az OpenERP dokumentumok elérése egy FTP csatolón keresztül.\n"
" Ez a document_ftp modult telepíti."
#. module: knowledge
#: view:knowledge.config.settings:0
msgid "or"
msgstr ""
msgstr "vagy"
#. module: knowledge
#: field:knowledge.config.settings,module_document_webdav:0
msgid "Share repositories (WebDAV)"
msgstr ""
msgstr "Elérési útvonal (webDAV) megosztás"
#. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document

View File

@ -26,7 +26,6 @@ from calendar import isleap
from openerp.tools.translate import _
from openerp.osv import fields, osv
from openerp import netsvc
import openerp.addons.decimal_precision as dp
DATETIME_FORMAT = "%Y-%m-%d"
@ -179,7 +178,6 @@ class hr_payslip_run(osv.osv):
return res
def create_advice(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
payslip_pool = self.pool.get('hr.payslip')
payslip_line_pool = self.pool.get('hr.payslip.line')
advice_pool = self.pool.get('hr.payroll.advice')
@ -198,8 +196,9 @@ class hr_payslip_run(osv.osv):
advice_id = advice_pool.create(cr, uid, advice_data, context=context)
slip_ids = []
for slip_id in run.slip_ids:
wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'hr_verify_sheet', cr)
wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'process_sheet', cr)
# TODO is it necessary to interleave the calls ?
payslip_pool.signal_hr_verify_sheet(cr, uid, [slip_id.id])
payslip_pool.signal_process_sheet(cr, uid, [slip_id.id])
slip_ids.append(slip_id.id)
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context):

View File

@ -0,0 +1,174 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 01:06+0000\n"
"PO-Revision-Date: 2013-02-14 16:15+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
msgid "Template for Fiscal Position"
msgstr "ÁFA pozíció sablon"
#. module: l10n_multilang
#: sql_constraint:account.account:0
msgid "The code of the account must be unique per company !"
msgstr "A főkönyvi számla számának egyedinek kell lennie!"
#. module: l10n_multilang
#: constraint:account.account.template:0
msgid ""
"Configuration Error!\n"
"You can not define children to an account with internal type different of "
"\"View\"! "
msgstr ""
"Beállítási hiba!\n"
"Nem tud al-számlát létrehozni egy számlához, melynek a belső \"Nézet\" "
"típusa különböző! "
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_analytic_journal
msgid "Analytic Journal"
msgstr "Analitikus/Gyüjtő napló"
#. module: l10n_multilang
#: constraint:account.account.template:0
msgid "Error ! You can not create recursive account templates."
msgstr "Hiba! Nem hozhat létre rekurzív főkönyvi számla sablonokat."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_journal
msgid "Journal"
msgstr "Napló"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_chart_template
msgid "Templates for Account Chart"
msgstr "Számlatükör sablonok"
#. module: l10n_multilang
#: sql_constraint:account.tax:0
msgid "The description must be unique per company!"
msgstr "A leírás egyedi kell legyen minden vállalathoz!"
#. module: l10n_multilang
#: constraint:account.tax.code.template:0
msgid "Error ! You can not create recursive Tax Codes."
msgstr "Hiba! Nem hozhat létre rekurzív adógyűjtőket."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_tax_template
msgid "account.tax.template"
msgstr "account.tax.template"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_tax
msgid "account.tax"
msgstr "account.tax"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_account
msgid "Account"
msgstr "Főkönyvi számla"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
msgid "wizard.multi.charts.accounts"
msgstr "wizard.multi.charts.accounts"
#. module: l10n_multilang
#: constraint:account.journal:0
msgid ""
"Configuration error! The currency chosen should be shared by the default "
"accounts too."
msgstr ""
"Beállítási hiba! A választott pénznemet meg kell osztani az alapértelmezett "
"főkönyvi számlával is."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_account_template
msgid "Templates for Accounts"
msgstr "Főkönyvi számla sablonok"
#. module: l10n_multilang
#: help:account.chart.template,spoken_languages:0
msgid ""
"State here the languages for which the translations of templates could be "
"loaded at the time of installation of this localization module and copied in "
"the final object when generating them from templates. You must provide the "
"language codes separated by ';'"
msgstr ""
"Adja meg itt a nyelvet amelyen a sablon be fog töltődni a lokalizációs modul "
"telepítése után és az át lesz másolva a végső objektumba a sablonokból való "
"létrehozás után. A nyelvi kódot ';' kell elválasztani."
#. module: l10n_multilang
#: constraint:account.account:0
msgid "Error ! You can not create recursive accounts."
msgstr "Hiba! Nem hozhat létre rekurzív számlákat."
#. module: l10n_multilang
#: constraint:account.account:0
msgid ""
"Configuration Error! \n"
"You can not select an account type with a deferral method different of "
"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"! "
msgstr ""
#. module: l10n_multilang
#: sql_constraint:account.journal:0
msgid "The name of the journal must be unique per company !"
msgstr "A napló nevének egyedinek kell lennie mindegyik vállalatra!"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_analytic_account
msgid "Analytic Account"
msgstr "Analitikus/elemző könyvelés"
#. module: l10n_multilang
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
msgstr "A napló kódjának egyedinek kell lennie mindegyik vállalathoz!"
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
msgid "Fiscal Position"
msgstr "Költségvetési pozíció"
#. module: l10n_multilang
#: constraint:account.account:0
msgid ""
"Configuration Error! \n"
"You can not define children to an account with internal type different of "
"\"View\"! "
msgstr ""
"Beállítási hiba! \n"
"Nem tud al-számlát létrehozni egy számlához, melynek a belső \"Nézet\" "
"típusa különböző! "
#. module: l10n_multilang
#: constraint:account.analytic.account:0
msgid "Error! You can not create recursive analytic accounts."
msgstr "Hiba! Nem hozhat létre rekurzív gyűjtőkódokat."
#. module: l10n_multilang
#: model:ir.model,name:l10n_multilang.model_account_tax_code_template
msgid "Tax Code Template"
msgstr ""
#. module: l10n_multilang
#: field:account.chart.template,spoken_languages:0
msgid "Spoken Languages"
msgstr "Beszélt nyelvek"

View File

@ -159,7 +159,7 @@ class lunch_order(osv.Model):
def specific_function(cr, uid, ids, context=None):
return self.add_preference(cr, uid, ids, pref_id, context=context)
return specific_function
return super(lunch_order,self).__getattr__(self,attr)
return super(lunch_order, self).__getattr__(attr)
def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
"""

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
"PO-Revision-Date: 2013-02-12 17:52+0000\n"
"PO-Revision-Date: 2013-02-14 16:43+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-02-13 04:36+0000\n"
"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: mail
@ -906,12 +906,12 @@ msgstr "Alcsoportba rakott üzenetek"
#. module: mail
#: field:mail.alias,alias_user_id:0
msgid "Owner"
msgstr ""
msgstr "Tulajdonos"
#. module: mail
#: model:ir.model,name:mail.model_res_users
msgid "Users"
msgstr ""
msgstr "Felhasználók"
#. module: mail
#: model:ir.model,name:mail.model_mail_message
@ -920,25 +920,25 @@ msgstr ""
#: field:mail.notification,message_id:0
#: field:mail.wizard.invite,message:0
msgid "Message"
msgstr ""
msgstr "Üzenet"
#. module: mail
#: help:mail.followers,res_id:0
#: help:mail.wizard.invite,res_id:0
msgid "Id of the followed resource"
msgstr ""
msgstr "A követett forrás ID azonosítója"
#. module: mail
#: field:mail.compose.message,body:0
#: field:mail.message,body:0
msgid "Contents"
msgstr ""
msgstr "Tartalmak"
#. module: mail
#: model:ir.actions.act_window,name:mail.action_view_mail_alias
#: model:ir.ui.menu,name:mail.mail_alias_menu
msgid "Aliases"
msgstr ""
msgstr "Álnevek"
#. module: mail
#: help:mail.message.subtype,description:0
@ -946,40 +946,44 @@ msgid ""
"Description that will be added in the message posted for this subtype. If "
"void, the name will be added instead."
msgstr ""
"Leírás ami hozzá lesz adva az altípusnak elküldendő üzenethez. Ha üres, a "
"név lesz hozzáadva helyette."
#. module: mail
#: field:mail.compose.message,vote_user_ids:0
#: field:mail.message,vote_user_ids:0
msgid "Votes"
msgstr ""
msgstr "Szavazatok"
#. module: mail
#: view:mail.group:0
msgid "Group"
msgstr ""
msgstr "Csoport"
#. module: mail
#: help:mail.compose.message,starred:0
#: help:mail.message,starred:0
msgid "Current user has a starred notification linked to this message"
msgstr ""
"A jelenlegi felhasználónak van egy kicsillagozott értesítése mely hozzá van "
"rendelve az üzenethez."
#. module: mail
#: field:mail.group,public:0
msgid "Privacy"
msgstr ""
msgstr "Adatvédelem"
#. module: mail
#: view:mail.mail:0
msgid "Notification"
msgstr ""
msgstr "Értesítés"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/js/mail.js:585
#, python-format
msgid "Please complete partner's informations"
msgstr ""
msgstr "Kérem egészítse ki a partner információkat"
#. module: mail
#: view:mail.wizard.invite:0
@ -994,7 +998,7 @@ msgstr "A kijelölt elemek követői és"
#. module: mail
#: field:mail.alias,alias_force_thread_id:0
msgid "Record Thread ID"
msgstr ""
msgstr "Összefűzési azonosító ID elmentése"
#. module: mail
#: model:ir.ui.menu,name:mail.mail_group_root
@ -1013,12 +1017,21 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p>\n"
" Nem található üzenet és nem lett még elküldve üzenet.\n"
" </p><p>\n"
" Kattintson felül jobbra az ikonra egy üzenet "
"összeállításához. Ez az\n"
" üzenet lesz elküldve e-mailként, ha ez egy belső "
"kapcsolat.\n"
" </p>\n"
" "
#. module: mail
#: view:mail.mail:0
#: field:mail.mail,state:0
msgid "Status"
msgstr ""
msgstr "Állapot"
#. module: mail
#: view:mail.mail:0
@ -1029,13 +1042,13 @@ msgstr "Kimenő"
#. module: mail
#: selection:res.partner,notification_email_send:0
msgid "All feeds"
msgstr ""
msgstr "Összes betáplálás"
#. module: mail
#: help:mail.compose.message,record_name:0
#: help:mail.message,record_name:0
msgid "Name get of the related document."
msgstr ""
msgstr "A név az ide vonatkozó dokumentumról levéve."
#. module: mail
#: model:ir.actions.act_window,name:mail.action_view_notifications
@ -1046,12 +1059,12 @@ msgstr ""
#: field:mail.message,notification_ids:0
#: view:mail.notification:0
msgid "Notifications"
msgstr ""
msgstr "Értesítések"
#. module: mail
#: view:mail.alias:0
msgid "Search Alias"
msgstr ""
msgstr "Álnév keresés"
#. module: mail
#: help:mail.alias,alias_force_thread_id:0
@ -1060,6 +1073,9 @@ msgid ""
"attached, even if they did not reply to it. If set, this will disable the "
"creation of new records completely."
msgstr ""
"Az összefűzés (rekord) választható ID azonosítója, amely minden beérkezett "
"üzenethez hozzá lesz mellékleve, még akkor is ha nem válaszoltak rá. Ha "
"beállított, akkor teljesen ki lesz kapcsolva az új rekord létrehozása."
#. module: mail
#: help:mail.message.subtype,name:0
@ -1070,28 +1086,33 @@ msgid ""
"subtypes allow to precisely tune the notifications the user want to receive "
"on its wall."
msgstr ""
"Üzenet altípus sokkal pontosabb típust ad az üzenetekhez, főként a rendszer "
"értesítésekhez. Például, az értesítés kapcsolódhat új rekordhoz (Új), vagy "
"egy szakasz változás a műveletben (Szakasz változás). Üzenet altípusok "
"lehetővé teszik az értesítések pontos behangolását, melyeket a felhasználó "
"az üzenet falán látni szeretne."
#. module: mail
#: view:mail.mail:0
msgid "by"
msgstr ""
msgstr "által"
#. module: mail
#: model:mail.group,name:mail.group_best_sales_practices
msgid "Best Sales Practices"
msgstr ""
msgstr "Legjobb Értékesítési Praktikák"
#. module: mail
#: selection:mail.group,public:0
msgid "Selected Group Only"
msgstr ""
msgstr "Csak a kiválasztott csoport"
#. module: mail
#: field:mail.group,message_is_follower:0
#: field:mail.thread,message_is_follower:0
#: field:res.partner,message_is_follower:0
msgid "Is a Follower"
msgstr ""
msgstr "Ez egy követő"
#. module: mail
#: view:mail.alias:0
@ -1102,12 +1123,12 @@ msgstr "Felhasználó"
#. module: mail
#: view:mail.group:0
msgid "Groups"
msgstr ""
msgstr "Csoportok"
#. module: mail
#: view:mail.message:0
msgid "Messages Search"
msgstr ""
msgstr "Üzenetek keresése"
#. module: mail
#: field:mail.compose.message,date:0
@ -1144,19 +1165,19 @@ msgstr "Bejegyzés írás a követőimnek"
#. module: mail
#: model:ir.model,name:mail.model_res_groups
msgid "Access Groups"
msgstr ""
msgstr "Csoportok hozzáférése"
#. module: mail
#: field:mail.message.subtype,default:0
msgid "Default"
msgstr ""
msgstr "Alapértelmezett"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:260
#, python-format
msgid "show more message"
msgstr ""
msgstr "mutassa a többi üzenetet"
#. module: mail
#. openerp-web
@ -1168,25 +1189,27 @@ msgstr "Megjelölés feladatkét"
#. module: mail
#: help:mail.message.subtype,parent_id:0
msgid "Parent subtype, used for automatic subscription."
msgstr ""
msgstr "Szülő altípus, ami automatikus feliratkozáshoz használt."
#. module: mail
#: model:ir.model,name:mail.model_mail_wizard_invite
msgid "Invite wizard"
msgstr ""
msgstr "Meghívó varázsló"
#. module: mail
#: field:mail.group,message_summary:0
#: field:mail.thread,message_summary:0
#: field:res.partner,message_summary:0
msgid "Summary"
msgstr ""
msgstr "Összegzés"
#. module: mail
#: help:mail.message.subtype,res_model:0
msgid ""
"Model the subtype applies to. If False, this subtype applies to all models."
msgstr ""
"Az altípushoz alkalmazott minta. Ha téves, akkor ez az altípus lesz "
"használva az összes mintához."
#. module: mail
#: field:mail.compose.message,subtype_id:0
@ -1194,32 +1217,32 @@ msgstr ""
#: field:mail.message,subtype_id:0
#: view:mail.message.subtype:0
msgid "Subtype"
msgstr ""
msgstr "Altípus"
#. module: mail
#: view:mail.group:0
msgid "Group Form"
msgstr ""
msgstr "Csoport űrlap"
#. module: mail
#: field:mail.compose.message,starred:0
#: field:mail.message,starred:0
#: field:mail.notification,starred:0
msgid "Starred"
msgstr ""
msgstr "Csillagozott"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:262
#, python-format
msgid "more messages"
msgstr ""
msgstr "több üzenet"
#. module: mail
#: code:addons/mail/update.py:93
#, python-format
msgid "Error"
msgstr ""
msgstr "Hiba"
#. module: mail
#. openerp-web
@ -1233,6 +1256,7 @@ msgstr "Követés"
msgid ""
"Unfortunately this email alias is already used, please choose a unique one"
msgstr ""
"Sajnos ez az email álnév már használva van, kérem válasszon egy egyedit."
#. module: mail
#: help:mail.alias,alias_user_id:0
@ -1242,19 +1266,24 @@ msgid ""
"the sender (From) address, or will use the Administrator account if no "
"system user is found for that address."
msgstr ""
"A rekord tulajdonosa létrehozva amikor erre az álnévre e-mailek érkeznek. "
"Ha ez a mező nincs kialakítva akkor a rendszer megpróbálja megkeresni a "
"jogos tulajdonost a elküldési (űrlap) címről, vagy az adminisztrátor "
"felhasználót fogja használni ha nem talált rendszer felhasználót azzal a "
"címmel."
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail_followers.xml:52
#, python-format
msgid "And"
msgstr ""
msgstr "És"
#. module: mail
#: field:mail.compose.message,message_id:0
#: field:mail.message,message_id:0
msgid "Message-Id"
msgstr ""
msgstr "Üzenet-ID azonosító"
#. module: mail
#: help:mail.group,image:0
@ -1262,6 +1291,7 @@ msgid ""
"This field holds the image used as photo for the group, limited to "
"1024x1024px."
msgstr ""
"Ez a mező a képet tárolja amit a csoporthoz használ, limitálva 1024x1024px."
#. module: mail
#: field:mail.compose.message,attachment_ids:0
@ -1274,7 +1304,7 @@ msgstr "Mellékletek"
#: field:mail.compose.message,record_name:0
#: field:mail.message,record_name:0
msgid "Message Record Name"
msgstr ""
msgstr "Üzenet rekord név"
#. module: mail
#: field:mail.mail,email_cc:0
@ -1284,7 +1314,7 @@ msgstr "Másolat"
#. module: mail
#: help:mail.notification,starred:0
msgid "Starred message that goes into the todo mailbox"
msgstr ""
msgstr "Csillagos üzenet amely a teendők levélládába megy"
#. module: mail
#. openerp-web
@ -1292,24 +1322,25 @@ msgstr ""
#: view:mail.compose.message:0
#, python-format
msgid "Followers of"
msgstr ""
msgstr "Követők ehhez"
#. module: mail
#: help:mail.mail,auto_delete:0
msgid "Permanently delete this email after sending it, to save space"
msgstr ""
"Tartósan törli ezt az üzenetet az elküldés után, hely felszabadítása miatt"
#. module: mail
#: model:ir.actions.client,name:mail.action_mail_group_feeds
msgid "Discussion Group"
msgstr ""
msgstr "Megbeszélés csoport"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:224
#, python-format
msgid "Done"
msgstr ""
msgstr "Kész"
#. module: mail
#: model:mail.message.subtype,name:mail.mt_comment
@ -1326,7 +1357,7 @@ msgstr "Követ"
#. module: mail
#: field:mail.group,name:0
msgid "Name"
msgstr ""
msgstr "Név"
#. module: mail
#: model:mail.group,name:mail.group_all_employees
@ -1339,45 +1370,45 @@ msgstr "Teljes vállalat"
#: view:mail.compose.message:0
#, python-format
msgid "and"
msgstr ""
msgstr "és"
#. module: mail
#: help:mail.mail,body_html:0
msgid "Rich-text/HTML message"
msgstr ""
msgstr "Rich-text/HTML üzenet"
#. module: mail
#: view:mail.mail:0
msgid "Creation Month"
msgstr ""
msgstr "Létrehozás hónapja"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:272
#, python-format
msgid "Compose new Message"
msgstr ""
msgstr "Új üzenet létrehozása"
#. module: mail
#: field:mail.group,menu_id:0
msgid "Related Menu"
msgstr ""
msgstr "Kapcsolódó menü"
#. module: mail
#: view:mail.message:0
msgid "Content"
msgstr ""
msgstr "Tartalom"
#. module: mail
#: field:mail.mail,email_to:0
msgid "To"
msgstr ""
msgstr "Címzett"
#. module: mail
#: field:mail.compose.message,notified_partner_ids:0
#: field:mail.message,notified_partner_ids:0
msgid "Notified partners"
msgstr ""
msgstr "Értesített partnerek"
#. module: mail
#: help:mail.group,public:0
@ -1385,11 +1416,13 @@ msgid ""
"This group is visible by non members. Invisible groups can add "
"members through the invite button."
msgstr ""
"Ez a csoport azoknak is látható akik nem tagok. A nem látható csoportok "
"tagokat adhatnak a meghívó gombbal."
#. module: mail
#: model:mail.group,name:mail.group_board
msgid "Board meetings"
msgstr ""
msgstr "Tanácskozás"
#. module: mail
#: constraint:mail.alias:0
@ -1397,40 +1430,42 @@ msgid ""
"Invalid expression, it must be a literal python dictionary definition e.g. "
"\"{'field': 'value'}\""
msgstr ""
"Nem érvényes kifejezés, ennek python szótár kifejezésnek kell lennie pl.: "
"\"{'field': 'value'}\""
#. module: mail
#: field:mail.alias,alias_model_id:0
msgid "Aliased Model"
msgstr ""
msgstr "Minta álnév"
#. module: mail
#: help:mail.compose.message,message_id:0
#: help:mail.message,message_id:0
msgid "Message unique identifier"
msgstr ""
msgstr "Üzenet egyedi azonosító"
#. module: mail
#: field:mail.group,description:0
#: field:mail.message.subtype,description:0
msgid "Description"
msgstr ""
msgstr "Leírás"
#. module: mail
#: model:ir.model,name:mail.model_mail_followers
msgid "Document Followers"
msgstr ""
msgstr "Követők dokumentuma"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail_followers.xml:35
#, python-format
msgid "Remove this follower"
msgstr ""
msgstr "Követő eltávolítása"
#. module: mail
#: selection:res.partner,notification_email_send:0
msgid "Never"
msgstr ""
msgstr "Soha"
#. module: mail
#: field:mail.mail,mail_server_id:0
@ -1441,7 +1476,7 @@ msgstr "Kimenő levelező szerver"
#: code:addons/mail/mail_message.py:920
#, python-format
msgid "Partners email addresses not found"
msgstr ""
msgstr "A partnerek e-mail címei nem találhatóak"
#. module: mail
#: view:mail.mail:0
@ -1452,19 +1487,21 @@ msgstr "Elküldött"
#. module: mail
#: field:mail.mail,body_html:0
msgid "Rich-text Contents"
msgstr ""
msgstr "Rich-text tartalmak"
#. module: mail
#: help:mail.compose.message,to_read:0
#: help:mail.message,to_read:0
msgid "Current user has an unread notification linked to this message"
msgstr ""
"A jelenlegi felhasználónak van egy olvasatlan értesítése ehhez az üzenethez "
"csatolva"
#. module: mail
#: help:res.partner,notification_email_send:0
msgid ""
"Choose in which case you want to receive an email when you receive new feeds."
msgstr ""
msgstr "Válassza ki milyen esetekben kíván e-mail kapni az új bevitelekből."
#. module: mail
#: model:ir.actions.act_window,name:mail.action_view_groups
@ -1480,13 +1517,17 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p>\n"
" nincs üzenete ebben a csoportban.\n"
" </p>\n"
" "
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:195
#, python-format
msgid "Please, wait while the file is uploading."
msgstr ""
msgstr "Kérem várjon amíg a fájl feltöltődik."
#. module: mail
#: view:mail.group:0
@ -1496,6 +1537,9 @@ msgid ""
"installed\n"
" the portal module."
msgstr ""
"Ez a csoport mindenki számára látható,\n"
" az ügyfeleinek is, ha telepítette a\n"
" portal modult."
#. module: mail
#. openerp-web
@ -1509,17 +1553,17 @@ msgstr "Visszahelyezés a feladatokhoz"
#: code:addons/mail/static/src/xml/mail.xml:113
#, python-format
msgid "this document"
msgstr ""
msgstr "ez a dokumentum"
#. module: mail
#: field:mail.compose.message,filter_id:0
msgid "Filters"
msgstr ""
msgstr "Szűrők"
#. module: mail
#: field:res.partner,notification_email_send:0
msgid "Receive Feeds by Email"
msgstr ""
msgstr "Új hozzászólások e-mailen fogadva"
#. module: mail
#: help:base.config.settings,alias_domain:0
@ -1527,6 +1571,8 @@ msgid ""
"If you have setup a catch-all email domain redirected to the OpenERP server, "
"enter the domain name here."
msgstr ""
"Ha be állítja az összes e-mail fogadása domain átirányítás az openERP "
"szerverre, akkor írja ide a domain nevet."
#. module: mail
#: model:ir.actions.act_window,name:mail.action_view_mail_message
@ -1543,7 +1589,7 @@ msgstr "Üzenetek"
#: code:addons/mail/static/src/xml/mail.xml:126
#, python-format
msgid "others..."
msgstr ""
msgstr "mások..."
#. module: mail
#: model:ir.actions.client,name:mail.action_mail_star_feeds
@ -1557,12 +1603,12 @@ msgstr "Feladat"
#: field:mail.group,alias_id:0
#: field:res.users,alias_id:0
msgid "Alias"
msgstr ""
msgstr "Álnév"
#. module: mail
#: model:ir.model,name:mail.model_mail_mail
msgid "Outgoing Mails"
msgstr ""
msgstr "Elküldött levelek"
#. module: mail
#: help:mail.compose.message,notification_ids:0
@ -1571,6 +1617,8 @@ msgid ""
"Technical field holding the message notifications. Use notified_partner_ids "
"to access notified partners."
msgstr ""
"Technikai mező a értesítés üzenetek tárolásához. Használja a "
"notified_partner_ids az értesített partnerek eléréséhez."
#. module: mail
#: model:ir.ui.menu,name:mail.mail_feeds
@ -1582,12 +1630,12 @@ msgstr "Üzenetek"
#: view:mail.alias:0
#: field:mail.message.subtype,res_model:0
msgid "Model"
msgstr ""
msgstr "Modell"
#. module: mail
#: view:mail.message:0
msgid "Unread"
msgstr ""
msgstr "Olvasatlan"
#. module: mail
#: help:mail.followers,subtype_ids:0
@ -1595,23 +1643,25 @@ msgid ""
"Message subtypes followed, meaning subtypes that will be pushed onto the "
"user's Wall."
msgstr ""
"Üzenet altípus követve, azt jelenti, hogy az altípus ki lesz rakva a "
"felhasználó üzenőfalára."
#. module: mail
#: help:mail.group,message_ids:0
#: help:mail.thread,message_ids:0
#: help:res.partner,message_ids:0
msgid "Messages and communication history"
msgstr ""
msgstr "Üzenetek és kommunikáció történet"
#. module: mail
#: help:mail.mail,references:0
msgid "Message references, such as identifiers of previous messages"
msgstr ""
msgstr "Üzenet hivatkozások, mint előző üzenetek azonosítói"
#. module: mail
#: field:mail.compose.message,composition_mode:0
msgid "Composition mode"
msgstr ""
msgstr "Összeállítási mód"
#. module: mail
#: field:mail.compose.message,model:0
@ -1619,14 +1669,14 @@ msgstr ""
#: field:mail.message,model:0
#: field:mail.wizard.invite,res_model:0
msgid "Related Document Model"
msgstr ""
msgstr "Ide vonatkozó dokumentum modell"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:287
#, python-format
msgid "unlike"
msgstr ""
msgstr "nem valószínű"
#. module: mail
#: help:mail.compose.message,author_id:0
@ -1635,22 +1685,24 @@ msgid ""
"Author of the message. If not set, email_from may hold an email address that "
"did not match any partner."
msgstr ""
"Az üzenet szerzője. Ha nincs beállítva, az e-mail ettől, egy címet "
"tartalmaz ami nem mutat egyik partnerre sem."
#. module: mail
#: help:mail.mail,email_cc:0
msgid "Carbon copy message recipients"
msgstr ""
msgstr "Üzenet másolat címzettjei"
#. module: mail
#: field:mail.alias,alias_domain:0
msgid "Alias domain"
msgstr ""
msgstr "Álénév domain"
#. module: mail
#: code:addons/mail/update.py:93
#, python-format
msgid "Error during communication with the publisher warranty server."
msgstr ""
msgstr "Hiba a kiadó garancia szerverével történő kommunikációval."
#. module: mail
#: selection:mail.group,public:0
@ -1670,32 +1722,41 @@ msgid ""
" </p>\n"
" "
msgstr ""
"<p>\n"
" <b>Nincs teendő.</b>\n"
" </p><p>\n"
" Ha a Beérkezett üzeneteinél végez műveletet, "
"megjelölheti\n"
" mint <i>teendő</i>. Ebből a menüből, minden teendőjét "
"elvégezheti.\n"
" </p>\n"
" "
#. module: mail
#: selection:mail.mail,state:0
msgid "Delivery Failed"
msgstr ""
msgstr "Küldés sikertelen"
#. module: mail
#: field:mail.compose.message,partner_ids:0
msgid "Additional contacts"
msgstr ""
msgstr "További kapcsolatok"
#. module: mail
#: help:mail.compose.message,parent_id:0
#: help:mail.message,parent_id:0
msgid "Initial thread message."
msgstr ""
msgstr "Elsődleges összefűzött üzenet."
#. module: mail
#: model:mail.group,name:mail.group_hr_policies
msgid "HR Policies"
msgstr ""
msgstr "HR Emberi erőforrás menedzsment házirend"
#. module: mail
#: selection:res.partner,notification_email_send:0
msgid "Emails only"
msgstr ""
msgstr "Kizárólag e-mailek"
#. module: mail
#: model:ir.actions.client,name:mail.action_mail_inbox_feeds
@ -1708,35 +1769,35 @@ msgstr "Beérkezett üzenetek"
#: code:addons/mail/static/src/xml/mail.xml:58
#, python-format
msgid "File"
msgstr ""
msgstr "Fájl"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/js/many2many_tags_email.js:63
#, python-format
msgid "Please complete partner's informations and Email"
msgstr ""
msgstr "Kérem egészítse ki a partner információkat és e-mailjét"
#. module: mail
#: model:ir.actions.act_window,name:mail.action_view_message_subtype
#: model:ir.ui.menu,name:mail.menu_message_subtype
msgid "Subtypes"
msgstr ""
msgstr "Altípusok"
#. module: mail
#: model:ir.model,name:mail.model_mail_alias
msgid "Email Aliases"
msgstr ""
msgstr "e-amil álnevek"
#. module: mail
#: field:mail.group,image_small:0
msgid "Small-sized photo"
msgstr ""
msgstr "Kis-méretű fotó"
#. module: mail
#: help:mail.mail,reply_to:0
msgid "Preferred response address for the message"
msgstr ""
msgstr "Előnyben részesített válasz cím ehhez az üzenethez"
#~ msgid "Open Attachments"
#~ msgstr "Mellékletek megnyitása"

View File

@ -310,8 +310,8 @@ class mail_message(osv.Model):
partner_tree = dict((partner[0], partner) for partner in partners)
# 2. Attachments as SUPERUSER, because could receive msg and attachments for doc uid cannot see
attachments = ir_attachment_obj.read(cr, SUPERUSER_ID, list(attachment_ids), ['id', 'datas_fname'], context=context)
attachments_tree = dict((attachment['id'], {'id': attachment['id'], 'filename': attachment['datas_fname']}) for attachment in attachments)
attachments = ir_attachment_obj.read(cr, SUPERUSER_ID, list(attachment_ids), ['id', 'datas_fname', 'name'], context=context)
attachments_tree = dict((attachment['id'], {'id': attachment['id'], 'filename': attachment['datas_fname'], 'name': attachment['name']}) for attachment in attachments)
# 3. Update message dictionaries
for message_dict in messages:

View File

@ -774,7 +774,7 @@ class mail_thread(osv.AbstractModel):
msg_dict['author_id'] = author_ids[0]
else:
msg_dict['email_from'] = message.get('from')
partner_ids = self._message_find_partners(cr, uid, message, ['From', 'To', 'Cc'], context=context)
partner_ids = self._message_find_partners(cr, uid, message, ['To', 'Cc'], context=context)
msg_dict['partner_ids'] = [(4, partner_id) for partner_id in partner_ids]
if 'Date' in message:

View File

@ -104,8 +104,8 @@ openerp.mail = function (session) {
// returns the file type of a file based on its extension
// As it only looks at the extension it is quite approximative.
filetype: function(url){
url = url.filename || url;
var tokens = (url+'').split('.');
var url = url && url.filename || url;
var tokens = typeof url == 'string' ? url.split('.') : [];
if(tokens.length <= 1){
return 'unknown';
}

View File

@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-01-31 14:00+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-02-14 16:51+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: marketing
#: model:ir.model,name:marketing.model_marketing_config_settings
msgid "marketing.config.settings"
msgstr ""
msgstr "marketing.config.settings"
#. module: marketing
#: help:marketing.config.settings,module_marketing_campaign_crm_demo:0
@ -33,7 +33,7 @@ msgstr ""
#: model:ir.actions.act_window,name:marketing.action_marketing_configuration
#: view:marketing.config.settings:0
msgid "Configure Marketing"
msgstr ""
msgstr "Értékesítés beállítás"
#. module: marketing
#: view:crm.lead:0
@ -44,47 +44,47 @@ msgstr "Marketing"
#. module: marketing
#: field:marketing.config.settings,module_marketing_campaign:0
msgid "Marketing campaigns"
msgstr ""
msgstr "Értékesítési kampány"
#. module: marketing
#: view:marketing.config.settings:0
msgid "or"
msgstr ""
msgstr "vagy"
#. module: marketing
#: view:marketing.config.settings:0
msgid "Campaigns"
msgstr ""
msgstr "Kampányok"
#. module: marketing
#: model:res.groups,name:marketing.group_marketing_manager
msgid "Manager"
msgstr ""
msgstr "Igazgató"
#. module: marketing
#: model:res.groups,name:marketing.group_marketing_user
msgid "User"
msgstr ""
msgstr "Felhasználó"
#. module: marketing
#: view:marketing.config.settings:0
msgid "Campaigns Settings"
msgstr ""
msgstr "Kampány beállítások"
#. module: marketing
#: field:marketing.config.settings,module_crm_profiling:0
msgid "Track customer profile to focus your campaigns"
msgstr ""
msgstr "Vevő profil nyomonkövetése a kampányra összpontosítva"
#. module: marketing
#: view:marketing.config.settings:0
msgid "Cancel"
msgstr ""
msgstr "Mégsem"
#. module: marketing
#: view:marketing.config.settings:0
msgid "Apply"
msgstr ""
msgstr "Alkalmaz"
#. module: marketing
#: help:marketing.config.settings,module_marketing_campaign:0
@ -101,11 +101,13 @@ msgid ""
"Allows users to perform segmentation within partners.\n"
" This installs the module crm_profiling."
msgstr ""
"A felhasználóknak engedélyezi a partnerek kiválogatását.\n"
" Ez telepíti a crm_profiling modult."
#. module: marketing
#: field:marketing.config.settings,module_marketing_campaign_crm_demo:0
msgid "Demo data for marketing campaigns"
msgstr ""
msgstr "Demo adatok a merketing kampányhoz"
#~ msgid "Configure Your Marketing Application"
#~ msgstr "Marketing alkalmazásainak beállítása"

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-01-21 15:22+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n"
"PO-Revision-Date: 2013-02-13 12:33+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_8
@ -28,6 +28,14 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>Köszönjük érdeklődésedet és feliratkozásodat a műszaki "
"képzésre.</p>\n"
" Egyéb, további felmerülő kérdésekben állunk rendelkezésre. "
"Nagyon köszönjük együttműködésedet.</p>\n"
" <p>Ha további információra van szükség, küldj választ erre az "
"üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapata,</p>"
#. module: marketing_campaign_crm_demo
#: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report
@ -37,7 +45,7 @@ msgstr "Marketingkampány demojelentés"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_8
msgid "Thanks for subscribing to technical training"
msgstr ""
msgstr "Köszönjük a feliratkozást a műszaki képzésre"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_3
@ -49,6 +57,12 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>Köszönjük érdeklődésedet és feliratkozásodat az OpenERP "
"felfedező napra.</p>\n"
" <p>Ha további információra van szükség, küldj válasz választ "
"erre az üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapat,</p>"
#. module: marketing_campaign_crm_demo
#: report:crm.lead.demo:0
@ -58,7 +72,7 @@ msgstr "Vállalat :"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_4
msgid "Thanks for buying the OpenERP book"
msgstr ""
msgstr "Köszönjük, hogy megvásárolta az OpenERP könyvet"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_6
@ -71,16 +85,23 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>Van egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n"
" Az ezüst tagjainknak, mi fizetjük a műszaki oktatást 2013 "
"Júniusában.</p>\n"
" <p>Ha további információra van szükség, küldj válasz választ "
"erre az üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapat,</p>"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_1
msgid "Thanks for showing interest in OpenERP"
msgstr ""
msgstr "Köszönjük érdeklődését az OpenERP iránt"
#. module: marketing_campaign_crm_demo
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
msgid "Dummy Action"
msgstr ""
msgstr "Látszólagos művelet"
#. module: marketing_campaign_crm_demo
#: report:crm.lead.demo:0
@ -98,6 +119,13 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>an egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n"
" Ajánljuk, hogy iratkozzon fel az OpenERP felfedező napra 2013 "
"májusában.</p>\n"
" <p>Ha további információra van szükség, küldj válasz választ "
"erre az üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapat,</p>"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_5
@ -110,26 +138,33 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>an egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n"
" Az arany partnereknek, mi szervezzük az ingyenes oktatást 2013 "
"Júniusában.</p>\n"
" <p>Ha további információra van szükség, küldj válasz választ "
"erre az üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapat,</p>"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_2
msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010"
msgstr ""
msgstr "Javasolja a feliratkozást az OpenERP felfedező napra 2013 Májusában"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_3
msgid "Thanks for subscribing to the OpenERP Discovery Day"
msgstr ""
msgstr "Köszönjük, hogy feliratkozott az OpenERP felfedező napra"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_7
msgid "Propose gold partnership to silver partners"
msgstr ""
msgstr "Javasolja az arany partner tagságot az ezüst tagoknak"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_6
msgid "Propose paid training to Silver partners"
msgstr ""
msgstr "Javasolja a költségtérítéses oktatást az Ezüst partnereknek"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_4
@ -139,6 +174,12 @@ msgid ""
" If any further information required kindly revert back.\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>Köszönjük az OpenERP könyv utáni érdeklődését és a "
"vásárlását.</p>\n"
" Ha további információra van szüksége kérjük forduljon hozzánk "
"bizalommal.\n"
" <p>Tisztelettel,OpenERP csapata,</p>"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_7
@ -150,11 +191,17 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>Nagyon jó ajánlatunk van ami illeszkedhet az Ön igényeihez.\n"
" Az Ezüst partnereinknek, Arany tagságot ajánlunk.</p>\n"
" <p>Ha további információra van szükségük, kérjük válaszoljon "
"erre az üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapata,</p>"
#. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_5
msgid "Propose a free technical training to Gold partners"
msgstr ""
msgstr "Ajánljon ingyenes műszaki oktatást az Arany partnereknek"
#. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_1
@ -166,3 +213,8 @@ msgid ""
"reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>"
msgstr ""
"<p>Hello,</p>\n"
" <p>Köszönjük az OpenERP iránti őszinte érdeklődését.</p>\n"
" <p>Ha további információra van szükségük, kérjük válaszoljon "
"erre az üzenetre.</p>\n"
" <p>Tisztelettel,OpenERP csapata,</p>"

View File

@ -31,19 +31,18 @@
I'm Opening that Invoice which is created for "Seagate".
-
!python {model: res.partner}: |
from openerp import netsvc
from openerp.tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
membership_line_pool = self.pool.get('membership.membership_line')
membership_pool = self.pool.get('product.product')
from openerp.tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
membership_line_pool = self.pool.get('membership.membership_line')
membership_pool = self.pool.get('product.product')
membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_19'))])
membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids)
assert membership_lines, _('Membership is not registrated.')
membership_line = membership_lines[0]
invoice_pool.signal_invoice_open(cr, uid, [membership_line.account_invoice_id.id])
membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_19'))])
membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids)
assert membership_lines, _('Membership is not registrated.')
membership_line = membership_lines[0]
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.invoice', membership_line.account_invoice_id.id, 'invoice_open', cr)
- |
I'm checking "Current membership state" of "Seagate". It is an "Invoiced Member" or not.
-

View File

@ -27,7 +27,6 @@ from openerp.osv import fields, osv
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
from openerp.tools import float_compare
from openerp.tools.translate import _
from openerp import netsvc
from openerp import tools
#----------------------------------------------------------
@ -774,10 +773,8 @@ class mrp_production(osv.osv):
new_parent_ids.append(final_product.id)
for new_parent_id in new_parent_ids:
stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4,new_parent_id)]})
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
self.message_post(cr, uid, production_id, body=_("%s <b>Produced</b>") % self._description, context=context)
self.signal_button_produce_done(cr, uid, [production_id])
return True
def _costs_generate(self, cr, uid, production):
@ -845,7 +842,6 @@ class mrp_production(osv.osv):
return True
def _make_production_line_procurement(self, cr, uid, production_line, shipment_move_id, context=None):
wf_service = netsvc.LocalService("workflow")
procurement_order = self.pool.get('procurement.order')
production = production_line.production_id
location_id = production.location_src_id.id
@ -865,7 +861,7 @@ class mrp_production(osv.osv):
'move_id': shipment_move_id,
'company_id': production.company_id.id,
})
wf_service.trg_validate(uid, procurement_order._name, procurement_id, 'button_confirm', cr)
self.signal_button_confirm(cr, uid, [procurement_id])
return procurement_id
def _make_production_internal_shipment_line(self, cr, uid, production_line, shipment_id, parent_move_id, destination_location_id=False, context=None):
@ -978,7 +974,6 @@ class mrp_production(osv.osv):
@return: Newly generated Shipment Id.
"""
shipment_id = False
wf_service = netsvc.LocalService("workflow")
uncompute_ids = filter(lambda x:x, [not x.product_lines and x.id or False for x in self.browse(cr, uid, ids, context=context)])
self.action_compute(cr, uid, uncompute_ids, context=context)
for production in self.browse(cr, uid, ids, context=context):
@ -996,7 +991,7 @@ class mrp_production(osv.osv):
destination_location_id=source_location_id, context=context)
self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context)
wf_service.trg_validate(uid, 'stock.picking', shipment_id, 'button_confirm', cr)
self.pool.get('stock.picking').signal_button_confirm(cr, uid, [shipment_id])
production.write({'state':'confirmed'}, context=context)
return shipment_id

View File

@ -24,7 +24,6 @@ from dateutil.relativedelta import relativedelta
from openerp.osv import fields
from openerp.osv import osv
from openerp.tools.translate import _
from openerp import netsvc
class procurement_order(osv.osv):
_inherit = 'procurement.order'
@ -87,7 +86,6 @@ class procurement_order(osv.osv):
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
production_obj = self.pool.get('mrp.production')
move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
procurement_obj = self.pool.get('procurement.order')
for procurement in procurement_obj.browse(cr, uid, ids, context=context):
res_id = procurement.move_id.id
@ -112,7 +110,7 @@ class procurement_order(osv.osv):
self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id})
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
production_obj.signal_button_confirm(cr, uid, [produce_id])
if res_id:
move_obj.write(cr, uid, [res_id],
{'location_id': procurement.location_id.id})

View File

@ -21,7 +21,6 @@
from openerp.osv import fields
from openerp.osv import osv
from openerp import netsvc
class StockMove(osv.osv):
@ -45,7 +44,6 @@ class StockMove(osv.osv):
move_obj = self.pool.get('stock.move')
procurement_obj = self.pool.get('procurement.order')
product_obj = self.pool.get('product.product')
wf_service = netsvc.LocalService("workflow")
processed_ids = [move.id]
if move.product_id.supply_method == 'produce' and move.product_id.procure_method == 'make_to_order':
bis = bom_obj.search(cr, uid, [
@ -90,16 +88,17 @@ class StockMove(osv.osv):
'procure_method': prodobj.procure_method,
'move_id': mid,
})
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
procurement_obj.signal_button_confirm(cr, uid, [proc_id])
move_obj.write(cr, uid, [move.id], {
'location_dest_id': move.location_id.id, # dummy move for the kit
'auto_validate': True,
'picking_id': False,
'state': 'confirmed'
})
for m in procurement_obj.search(cr, uid, [('move_id','=',move.id)], context):
wf_service.trg_validate(uid, 'procurement.order', m, 'button_confirm', cr)
wf_service.trg_validate(uid, 'procurement.order', m, 'button_wait_done', cr)
procurement_ids = procurement_obj.search(cr, uid, [('move_id','=',move.id)], context)
procurement_obj.signal_button_confirm(cr, uid, procurement_ids)
procurement_obj.signal_button_wait_done(cr, uid, procurement_ids)
return processed_ids
def action_consume(self, cr, uid, ids, product_qty, location_id=False, context=None):
@ -110,7 +109,6 @@ class StockMove(osv.osv):
"""
res = []
production_obj = self.pool.get('mrp.production')
wf_service = netsvc.LocalService("workflow")
for move in self.browse(cr, uid, ids):
move.action_confirm(context)
new_moves = super(StockMove, self).action_consume(cr, uid, [move.id], product_qty, location_id, context=context)
@ -118,7 +116,7 @@ class StockMove(osv.osv):
for prod in production_obj.browse(cr, uid, production_ids, context=context):
if prod.state == 'confirmed':
production_obj.force_production(cr, uid, [prod.id])
wf_service.trg_validate(uid, 'mrp.production', prod.id, 'button_produce', cr)
production_obj.signal_button_produce(cr, uid, production_ids)
for new_move in new_moves:
if new_move == move.id:
#This move is already there in move lines of production order
@ -135,14 +133,13 @@ class StockMove(osv.osv):
"""
res = []
production_obj = self.pool.get('mrp.production')
wf_service = netsvc.LocalService("workflow")
for move in self.browse(cr, uid, ids, context=context):
new_moves = super(StockMove, self).action_scrap(cr, uid, [move.id], product_qty, location_id, context=context)
#If we are not scrapping our whole move, tracking and lot references must not be removed
#self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False})
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
for prod_id in production_ids:
wf_service.trg_validate(uid, 'mrp.production', prod_id, 'button_produce', cr)
production_obj.signal_button_produce(cr, uid, [prod_id])
for new_move in new_moves:
production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]})
res.append(new_move)

View File

@ -118,16 +118,15 @@ class mrp_production_workcenter_line(osv.osv):
@param action: Action to perform.
@return: Nothing
"""
wf_service = netsvc.LocalService("workflow")
prod_obj_pool = self.pool.get('mrp.production')
oper_obj = self.browse(cr, uid, ids)[0]
prod_obj = oper_obj.production_id
if action == 'start':
if prod_obj.state =='confirmed':
prod_obj_pool.force_production(cr, uid, [prod_obj.id])
wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr)
prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id])
elif prod_obj.state =='ready':
wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr)
prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id])
elif prod_obj.state =='in_production':
return
else:
@ -143,7 +142,7 @@ class mrp_production_workcenter_line(osv.osv):
for production in prod_obj_pool.browse(cr, uid, [prod_obj.id], context= None):
if production.move_lines or production.move_created_ids:
prod_obj_pool.action_produce(cr,uid, production.id, production.product_qty, 'consume_produce', context = None)
wf_service.trg_validate(uid, 'mrp.production', oper_obj.production_id.id, 'button_produce_done', cr)
prod_obj_pool.signal_button_produce_done(cr, uid, [oper_obj.production_id.id])
return
def write(self, cr, uid, ids, vals, context=None, update=True):
@ -228,23 +227,21 @@ class mrp_production(osv.osv):
@return: Super method
"""
obj = self.browse(cr, uid, ids)[0]
wf_service = netsvc.LocalService("workflow")
workcenter_pool = self.pool.get('mrp.production.workcenter.line')
for workcenter_line in obj.workcenter_lines:
if workcenter_line.state == 'draft':
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_start_working', cr)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_done', cr)
workcenter_pool.signal_button_start_working(cr, uid, [workcenter_line.id])
workcenter_pool.signal_button_done(cr, uid, [workcenter_line.id])
return super(mrp_production,self).action_production_end(cr, uid, ids)
def action_in_production(self, cr, uid, ids):
""" Changes state to In Production and writes starting date.
@return: True
"""
obj = self.browse(cr, uid, ids)[0]
workcenter_pool = self.pool.get('mrp.production.workcenter.line')
wf_service = netsvc.LocalService("workflow")
for prod in self.browse(cr, uid, ids):
if prod.workcenter_lines:
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', prod.workcenter_lines[0].id, 'button_start_working', cr)
workcenter_pool.signal_button_start_working(cr, uid, [prod.workcenter_lines[0].id])
return super(mrp_production,self).action_in_production(cr, uid, ids)
def action_cancel(self, cr, uid, ids, context=None):
@ -252,9 +249,8 @@ class mrp_production(osv.osv):
@return: Super method
"""
obj = self.browse(cr, uid, ids,context=context)[0]
wf_service = netsvc.LocalService("workflow")
for workcenter_line in obj.workcenter_lines:
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_cancel', cr)
workcenter_pool.signal_button_cancel(cr, uid, [workcenter_line.id])
return super(mrp_production,self).action_cancel(cr,uid,ids,context=context)
def _compute_planned_workcenter(self, cr, uid, ids, context=None, mini=False):
@ -503,35 +499,34 @@ class mrp_operations_operation(osv.osv):
return super(mrp_operations_operation, self).write(cr, uid, ids, vals, context=context)
def create(self, cr, uid, vals, context=None):
wf_service = netsvc.LocalService('workflow')
workcenter_pool = self.pool.get('mrp.production.workcenter.line')
code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])])
code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0]
wc_op_id=self.pool.get('mrp.production.workcenter.line').search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])])
wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])])
if code.start_stop in ('start','done','pause','cancel','resume'):
if not wc_op_id:
production_obj=self.pool.get('mrp.production').browse(cr, uid, vals['production_id'], context=context)
wc_op_id.append(self.pool.get('mrp.production.workcenter.line').create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']}))
wc_op_id.append(workcenter_pool.create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']}))
if code.start_stop=='start':
self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_start_working', cr)
workcenter_pool.action_start_working(cr,uid,wc_op_id)
workcenter_pool.signal_button_start_working(cr, uid, [wc_op_id[0]])
if code.start_stop=='done':
self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_done', cr)
workcenter_pool.action_done(cr,uid,wc_op_id)
workcenter_pool.signal_button_done(cr, uid, [wc_op_id[0]])
self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finished':datetime.now().strftime('%Y-%m-%d %H:%M:%S')})
if code.start_stop=='pause':
self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_pause', cr)
workcenter_pool.action_pause(cr,uid,wc_op_id)
workcenter_pool.signal_button_pause(cr, uid, [wc_op_id[0]])
if code.start_stop=='resume':
self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_resume', cr)
workcenter_pool.action_resume(cr,uid,wc_op_id)
workcenter_pool.signal_button_resume(cr, uid, [wc_op_id[0]])
if code.start_stop=='cancel':
self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_cancel', cr)
workcenter_pool.action_cancel(cr,uid,wc_op_id)
workcenter_pool.signal_button_cancel(cr, uid, [wc_op_id[0]])
if not self.check_operation(cr, uid, vals):
return
@ -549,10 +544,9 @@ class mrp_operations_operation(osv.osv):
return super(mrp_operations_operation, self).create(cr, uid, vals, context=context)
def initialize_workflow_instance(self, cr, uid, context=None):
wf_service = netsvc.LocalService("workflow")
line_ids = self.pool.get('mrp.production.workcenter.line').search(cr, uid, [], context=context)
for line_id in line_ids:
wf_service.trg_create(uid, 'mrp.production.workcenter.line', line_id, cr)
mrp_production_workcenter_line = self.pool.get('mrp.production.workcenter.line')
line_ids = mrp_production_workcenter_line.search(cr, uid, [], context=context)
mrp_production_workcenter_line.create_workflow(cr, uid, line_ids)
return True
_columns={

View File

@ -39,62 +39,48 @@
Production start on first work center, so I start work operation on first work center.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id])
-
Now I pause first work operation due to technical fault of work center.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_pause', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_pause(cr, uid, [order.workcenter_lines[0].id])
-
I resume first work operation.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_resume', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_resume(cr, uid, [order.workcenter_lines[0].id])
-
I cancel first work operation.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_cancel', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_cancel(cr, uid, [order.workcenter_lines[0].id])
-
I reset first work operation and start after resolving techninal fault of work center.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_draft', cr)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_draft(cr, uid, [order.workcenter_lines[0].id])
self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id])
-
I close first work operation as this work center completed its process.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_done', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [order.workcenter_lines[0].id])
-
Now I close other operations one by one which are in start state.
-
!python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow")
for work_line in order.workcenter_lines[1:]:
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_start_working', cr)
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_done', cr)
self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [work_line.id])
self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [work_line.id])
-
I check that the production order is now done.
@ -106,8 +92,7 @@
I print a Barcode Report of Operation line.
-
!python {model: mrp_operations.operation.code}: |
import os
from openerp import netsvc, tools
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.mrp.code.barcode').create(cr, uid, [ref('mrp_operations.mrp_op_1'),ref('mrp_operations.mrp_op_2'),ref('mrp_operations.mrp_op_3'),ref('mrp_operations.mrp_op_4'),ref('mrp_operations.mrp_op_5')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-barcode_report.'+format), 'wb+').write(data)
@ -116,8 +101,7 @@
I print Workcenter's Barcode Report.
-
!python {model: mrp.workcenter}: |
import os
from openerp import netsvc, tools
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.mrp.wc.barcode').create(cr, uid, [ref('mrp.mrp_workcenter_0'),ref('mrp.mrp_workcenter_1')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-workcenter_barcode_report.'+format), 'wb+').write(data)

View File

@ -20,7 +20,6 @@
##############################################################################
from openerp.osv import fields,osv
from openerp import netsvc
from datetime import datetime
from dateutil.relativedelta import relativedelta
from openerp.tools.translate import _
@ -314,9 +313,7 @@ class mrp_repair(osv.osv):
for repair in self.browse(cr, uid, ids):
mrp_line_obj.write(cr, uid, [l.id for l in repair.operations], {'state': 'draft'})
self.write(cr, uid, ids, {'state':'draft'})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_create(uid, 'mrp.repair', id, cr)
self.create_workflow(cr, uid, ids)
return True
def action_confirm(self, cr, uid, ids, *args):
@ -505,7 +502,6 @@ class mrp_repair(osv.osv):
"""
res = {}
move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
repair_line_obj = self.pool.get('mrp.repair.line')
seq_obj = self.pool.get('ir.sequence')
pick_obj = self.pool.get('stock.picking')
@ -548,7 +544,7 @@ class mrp_repair(osv.osv):
'tracking_id': False,
'state': 'assigned',
})
wf_service.trg_validate(uid, 'stock.picking', picking, 'button_confirm', cr)
pick_obj.signal_button_confirm(cr, uid, [picking])
self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking})
res[repair.id] = picking
else:

View File

@ -19,7 +19,6 @@
#
##############################################################################
from openerp import netsvc
from openerp.osv import fields, osv
class make_invoice(osv.osv_memory):
@ -50,9 +49,7 @@ class make_invoice(osv.osv_memory):
# We have to trigger the workflow of the given repairs, otherwise they remain 'to be invoiced'.
# Note that the signal 'action_invoice_create' will trigger another call to the method 'action_invoice_create',
# but that second call will not do anything, since the repairs are already invoiced.
wf_service = netsvc.LocalService("workflow")
for repair_id in context['active_ids']:
wf_service.trg_validate(uid, 'mrp.repair', repair_id, 'action_invoice_create', cr)
order_obj.signal_action_invoice_create(cr, uid, context['active_ids'])
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
form_id = form_res and form_res[1] or False

View File

@ -27,7 +27,7 @@ import pdb
import time
import openerp
from openerp import netsvc, tools
from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
@ -364,7 +364,7 @@ class pos_session(osv.osv):
ids = [ids]
this_record = self.browse(cr, uid, ids[0], context=context)
this_record._workflow_signal('open')
this_record.signal_workflow('open')
context.update(active_id=this_record.id)
@ -442,14 +442,14 @@ class pos_session(osv.osv):
}
def _confirm_orders(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
account_move_obj = self.pool.get('account.move')
pos_order_obj = self.pool.get('pos.order')
for session in self.browse(cr, uid, ids, context=context):
order_ids = [order.id for order in session.order_ids if order.state == 'paid']
move_id = self.pool.get('account.move').create(cr, uid, {'ref' : session.name, 'journal_id' : session.config_id.journal_id.id, }, context=context)
move_id = account_move_obj.create(cr, uid, {'ref' : session.name, 'journal_id' : session.config_id.journal_id.id, }, context=context)
self.pool.get('pos.order')._create_account_move_line(cr, uid, order_ids, session, move_id, context=context)
pos_order_obj._create_account_move_line(cr, uid, order_ids, session, move_id, context=context)
for order in session.order_ids:
if order.state not in ('paid', 'invoiced'):
@ -457,7 +457,7 @@ class pos_session(osv.osv):
_('Error!'),
_("You cannot confirm all orders of this session, because they have not the 'paid' status"))
else:
wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
pos_order_obj.signal_done(cr, uid, [order.id])
return True
@ -519,8 +519,7 @@ class pos_order(osv.osv):
'journal': cash_journal.id,
}, context=context)
order_ids.append(order_id)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
self.signal_paid(cr, uid, [order_id])
return order_ids
def unlink(self, cr, uid, ids, context=None):
@ -695,9 +694,8 @@ class pos_order(osv.osv):
}, context=context)
if line.qty < 0:
location_id, output_id = output_id, location_id
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
picking_obj.signal_button_confirm(cr, uid, [picking_id])
picking_obj.force_assign(cr, uid, [picking_id], context)
return True
@ -707,7 +705,7 @@ class pos_order(osv.osv):
"""
stock_picking_obj = self.pool.get('stock.picking')
for order in self.browse(cr, uid, ids, context=context):
wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr)
stock_picking_obj.signal_button_cancel(cr, uid, [order.picking_id.id])
if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel':
raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.'))
self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
@ -803,7 +801,6 @@ class pos_order(osv.osv):
return self.write(cr, uid, ids, {'state':'invoiced'}, context=context)
def action_invoice(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
inv_ref = self.pool.get('account.invoice')
inv_line_ref = self.pool.get('account.invoice.line')
product_obj = self.pool.get('product.product')
@ -856,7 +853,7 @@ class pos_order(osv.osv):
inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.product_id.taxes_id] )]
inv_line_ref.create(cr, uid, inv_line, context=context)
inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr)
self.signal_invoice(cr, uid, [order.id])
if not inv_ids: return {}

View File

@ -19,7 +19,6 @@
#
##############################################################################
from openerp import netsvc
from openerp.osv import osv
@ -28,7 +27,6 @@ class pos_confirm(osv.osv_memory):
_description = 'Post POS Journal Entries'
def action_confirm(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
order_obj = self.pool.get('pos.order')
ids = order_obj.search(cr, uid, [('state','=','paid')], context=context)
for order in order_obj.browse(cr, uid, ids, context=context):
@ -38,7 +36,7 @@ class pos_confirm(osv.osv_memory):
todo = False
break
if todo:
wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
order_obj.signal_done(cr, uid, [order.id])
# Check if there is orders to reconcile their invoices
ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context)

View File

@ -23,7 +23,6 @@ import time
import pos_box_entries
from openerp import netsvc
from openerp.osv import osv, fields
from openerp.tools.translate import _
@ -67,8 +66,7 @@ class pos_make_payment(osv.osv_memory):
order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]):
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'pos.order', active_id, 'paid', cr)
order_obj.signal_paid(cr, uid, [active_id])
return {'type' : 'ir.actions.act_window_close' }
##self.print_report(cr, uid, ids, context=context)

View File

@ -19,7 +19,6 @@
#
##############################################################################
from openerp import netsvc
from openerp.osv import osv,fields
from openerp.tools.translate import _
import time
@ -104,7 +103,6 @@ class pos_return(osv.osv_memory):
property_obj= self.pool.get("ir.property")
uom_obj =self. pool.get('product.uom')
statementl_obj = self.pool.get('account.bank.statement.line')
wf_service = netsvc.LocalService("workflow")
#Todo :Need to clean the code
if active_id:
data = self.browse(cr, uid, ids, context=context)[0]
@ -157,7 +155,7 @@ class pos_return(osv.osv_memory):
'amount': -amount,
})
order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'})
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
picking_obj.signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
act = {
'domain': "[('id', 'in', ["+str(new_order)+"])]",
@ -200,7 +198,6 @@ class add_product(osv.osv_memory):
date_cur=time.strftime('%Y-%m-%d')
uom_obj = self.pool.get('product.uom')
prod_obj=self.pool.get('product.product')
wf_service = netsvc.LocalService("workflow")
order_obj.add_product(cr, uid, active_id, data['product_id'], data['quantity'], context=context)
for order_id in order_obj.browse(cr, uid, [active_id], context=context):
@ -232,7 +229,7 @@ class add_product(osv.osv_memory):
'date':date_cur
})
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
picking_obj.signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
order_obj.write(cr,uid,active_id,{'picking_id':new_picking})
@ -265,7 +262,6 @@ class add_product(osv.osv_memory):
if return_id:
data = return_boj.read(cr,uid,return_id,[])[0]
wf_service = netsvc.LocalService("workflow")
self_data = self.browse(cr, uid, ids, context=context)[0]
order_obj.add_product(cr, uid, active_ids[0], self_data.product_id.id, self_data.quantity, context=context)
@ -306,7 +302,7 @@ class add_product(osv.osv_memory):
'name':'%s (return)' % order_id.name,
'date':date_cur,
})
wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr)
picking_obj.signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
obj=order_obj.browse(cr,uid, active_ids[0])
context.update({'return':'return'})

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python
from openerp import netsvc
from openerp.osv import osv, fields
from openerp.tools.translate import _
@ -37,9 +36,8 @@ class pos_session_opening(osv.osv_memory):
}
def open_existing_session_cb_close(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
wizard = self.browse(cr, uid, ids[0], context=context)
wf_service.trg_validate(uid, 'pos.session', wizard.pos_session_id.id, 'cashbox_control', cr)
self.pool.get('pos.session').signal_cashbox_control(cr, uid, [wizard.pos_session_id.id])
return self.open_session_cb(cr, uid, ids, context)
def open_session_cb(self, cr, uid, ids, context=None):

View File

@ -19,10 +19,12 @@
#
##############################################################################
from operator import attrgetter
import time
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp import netsvc
import time
import openerp.addons.decimal_precision as dp
# Procurement
@ -42,7 +44,6 @@ class mrp_property_group(osv.osv):
'name': fields.char('Property Group', size=64, required=True),
'description': fields.text('Description'),
}
mrp_property_group()
class mrp_property(osv.osv):
"""
@ -59,7 +60,6 @@ class mrp_property(osv.osv):
_defaults = {
'composition': lambda *a: 'min',
}
mrp_property()
class StockMove(osv.osv):
_inherit = 'stock.move'
@ -72,7 +72,6 @@ class StockMove(osv.osv):
default['procurements'] = []
return super(StockMove, self).copy(cr, uid, id, default, context=context)
StockMove()
class procurement_order(osv.osv):
"""
@ -103,7 +102,7 @@ class procurement_order(osv.osv):
readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \
" a make to order method."),
'note': fields.text('Note'),
'message': fields.char('Latest error', help="Exception occurred while computing procurement orders."),
'message': fields.text('Latest error', help="Exception occurred while computing procurement orders."),
'state': fields.selection([
('draft','Draft'),
('cancel','Cancelled'),
@ -374,14 +373,13 @@ class procurement_order(osv.osv):
self.message_post(cr, uid, [procurement.id], body=message, context=context)
return ok
def _workflow_trigger(self, cr, uid, ids, trigger, context=None):
""" Don't trigger workflow for the element specified in trigger
"""
wkf_op_key = 'workflow.%s.%s' % (trigger, self._name)
def step_workflow(self, cr, uid, ids, context=None):
""" Don't trigger workflow for the element specified in trigger """
wkf_op_key = 'workflow.trg_write.%s' % self._name
if context and not context.get(wkf_op_key, True):
# make sure we don't have a trigger loop while processing triggers
return
return super(procurement_order,self)._workflow_trigger(cr, uid, ids, trigger, context=context)
return super(procurement_order, self).step_workflow(cr, uid, ids, context=context)
def action_produce_assign_service(self, cr, uid, ids, context=None):
""" Changes procurement state to Running.
@ -468,15 +466,12 @@ class procurement_order(osv.osv):
class StockPicking(osv.osv):
_inherit = 'stock.picking'
def test_finished(self, cursor, user, ids):
wf_service = netsvc.LocalService("workflow")
res = super(StockPicking, self).test_finished(cursor, user, ids)
for picking in self.browse(cursor, user, ids):
def test_finished(self, cr, uid, ids):
res = super(StockPicking, self).test_finished(cr, uid, ids)
for picking in self.browse(cr, uid, ids):
for move in picking.move_lines:
if move.state == 'done' and move.procurements:
for procurement in move.procurements:
wf_service.trg_validate(user, 'procurement.order',
procurement.id, 'button_check', cursor)
self.pool.get('procurement.order').signal_button_check(cr, uid, map(attrgetter('id'), move.procurements))
return res
class stock_warehouse_orderpoint(osv.osv):

View File

@ -57,13 +57,11 @@ class procurement_order(osv.osv):
try:
if use_new_cursor:
cr = pooler.get_db(use_new_cursor).cursor()
wf_service = netsvc.LocalService("workflow")
procurement_obj = self.pool.get('procurement.order')
if not ids:
ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')], order="date_planned")
for id in ids:
wf_service.trg_validate(uid, 'procurement.order', id, 'button_restart', cr)
self.signal_button_restart(cr, uid, ids)
if use_new_cursor:
cr.commit()
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
@ -78,7 +76,7 @@ class procurement_order(osv.osv):
ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_order')], offset=offset, limit=500, order='priority, date_planned', context=context)
for proc in procurement_obj.browse(cr, uid, ids, context=context):
if maxdate >= proc.date_planned:
wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr)
self.signal_button_check(cr, uid, [proc.id])
else:
offset += 1
report_later += 1
@ -100,7 +98,7 @@ class procurement_order(osv.osv):
ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_stock')], offset=offset)
for proc in procurement_obj.browse(cr, uid, ids):
if maxdate >= proc.date_planned:
wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr)
self.signal_button_check(cr, uid, [proc.id])
report_ids.append(proc.id)
else:
report_later += 1
@ -155,7 +153,6 @@ class procurement_order(osv.osv):
product_obj = self.pool.get('product.product')
proc_obj = self.pool.get('procurement.order')
warehouse_obj = self.pool.get('stock.warehouse')
wf_service = netsvc.LocalService("workflow")
warehouse_ids = warehouse_obj.search(cr, uid, [], context=context)
products_ids = product_obj.search(cr, uid, [('purchase_ok', '=', True)], order='id', context=context)
@ -178,8 +175,8 @@ class procurement_order(osv.osv):
proc_id = proc_obj.create(cr, uid,
self._prepare_automatic_op_procurement(cr, uid, product, warehouse, location_id, context=context),
context=context)
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)
self.signal_button_confirm(cr, uid, [proc_id])
self.signal_button_check(cr, uid, [proc_id])
return True
def _get_orderpoint_date_planned(self, cr, uid, orderpoint, start_date, context=None):
@ -225,7 +222,6 @@ class procurement_order(osv.osv):
orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
procurement_obj = self.pool.get('procurement.order')
wf_service = netsvc.LocalService("workflow")
offset = 0
ids = [1]
if automatic:
@ -254,7 +250,7 @@ class procurement_order(osv.osv):
to_generate = qty
for proc_data in procure_datas:
if to_generate >= proc_data['product_qty']:
wf_service.trg_validate(uid, 'procurement.order', proc_data['id'], 'button_confirm', cr)
self.signal_button_confirm(cr, uid, [proc_data['id']])
procurement_obj.write(cr, uid, [proc_data['id']], {'origin': op.name}, context=context)
to_generate -= proc_data['product_qty']
if not to_generate:
@ -265,10 +261,8 @@ class procurement_order(osv.osv):
proc_id = procurement_obj.create(cr, uid,
self._prepare_orderpoint_procurement(cr, uid, op, qty, context=context),
context=context)
wf_service.trg_validate(uid, 'procurement.order', proc_id,
'button_confirm', cr)
wf_service.trg_validate(uid, 'procurement.order', proc_id,
'button_check', cr)
self.signal_button_confirm(cr, uid, [proc_id])
self.signal_button_check(cr, uid, [proc_id])
orderpoint_obj.write(cr, uid, [op.id],
{'procurement_id': proc_id}, context=context)
offset += len(ids)
@ -279,6 +273,4 @@ class procurement_order(osv.osv):
cr.close()
return {}
procurement_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,7 +19,6 @@
#
##############################################################################
from openerp import netsvc
from openerp.osv import fields, osv
@ -64,7 +63,6 @@ class make_procurement(osv.osv_memory):
user = self.pool.get('res.users').browse(cr, uid, uid, context=context).login
wh_obj = self.pool.get('stock.warehouse')
procurement_obj = self.pool.get('procurement.order')
wf_service = netsvc.LocalService("workflow")
data_obj = self.pool.get('ir.model.data')
for proc in self.browse(cr, uid, ids, context=context):
@ -78,9 +76,7 @@ class make_procurement(osv.osv_memory):
'location_id': wh.lot_stock_id.id,
'procure_method':'make_to_order',
})
wf_service.trg_validate(uid, 'procurement.order', procure_id, 'button_confirm', cr)
procurement_obj.signal_button_confirm(cr, uid, [procure_id])
id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view')
id3 = data_obj._get_id(cr, uid, 'procurement', 'procurement_form_view')

View File

@ -22,9 +22,9 @@
import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
from operator import attrgetter
from openerp.osv import fields, osv
from openerp import netsvc
from openerp import pooler
from openerp.tools.translate import _
import openerp.addons.decimal_precision as dp
@ -260,9 +260,7 @@ class purchase_order(osv.osv):
raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.'))
# automatically sending subflow.delete upon deletion
wf_service = netsvc.LocalService("workflow")
for id in unlink_ids:
wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr)
self.signal_purchase_cancel(cr, uid, unlink_ids)
return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context)
@ -439,8 +437,7 @@ class purchase_order(osv.osv):
This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'purchase.order', ids[0], 'send_rfq', cr)
self.signal_send_rfq(cr, uid, ids)
datas = {
'model': 'purchase.order',
'ids': ids,
@ -486,11 +483,10 @@ class purchase_order(osv.osv):
if not len(ids):
return False
self.write(cr, uid, ids, {'state':'draft','shipped':0})
wf_service = netsvc.LocalService("workflow")
for p_id in ids:
# Deleting the existing instance of workflow for PO
wf_service.trg_delete(uid, 'purchase.order', p_id, cr)
wf_service.trg_create(uid, 'purchase.order', p_id, cr)
self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls?
self.create_workflow(cr, uid, [p_id])
return True
def action_invoice_create(self, cr, uid, ids, context=None):
@ -572,26 +568,24 @@ class purchase_order(osv.osv):
return False
def action_cancel(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
for purchase in self.browse(cr, uid, ids, context=context):
for pick in purchase.picking_ids:
if pick.state not in ('draft','cancel'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('First cancel all receptions related to this purchase order.'))
for pick in purchase.picking_ids:
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_cancel', cr)
self.pool.get('stock.picking') \
.signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids))
for inv in purchase.invoice_ids:
if inv and inv.state not in ('cancel','draft'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('You must first cancel all receptions related to this purchase order.'))
if inv:
wf_service.trg_validate(uid, 'account.invoice', inv.id, 'invoice_cancel', cr)
self.pool.get('account.invoice') \
.signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids))
self.write(cr,uid,ids,{'state':'cancel'})
for (id, name) in self.name_get(cr, uid, ids):
wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr)
self.signal_purchase_cancel(cr, uid, ids)
return True
def _prepare_order_picking(self, cr, uid, order, context=None):
@ -649,11 +643,11 @@ class purchase_order(osv.osv):
will be added. A new picking will be created if omitted.
:return: list of IDs of pickings used/created for the given order lines (usually just one)
"""
stock_picking = self.pool.get('stock.picking')
if not picking_id:
picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context))
picking_id = stock_picking.create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context))
todo_moves = []
stock_move = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
for order_line in order_lines:
if not order_line.product_id:
continue
@ -664,7 +658,7 @@ class purchase_order(osv.osv):
todo_moves.append(move)
stock_move.action_confirm(cr, uid, todo_moves)
stock_move.force_assign(cr, uid, todo_moves)
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
stock_picking.signal_button_confirm(cr, uid, [picking_id])
return [picking_id]
def action_picking_create(self, cr, uid, ids, context=None):
@ -716,7 +710,6 @@ class purchase_order(osv.osv):
"""
#TOFIX: merged order line should be unlink
wf_service = netsvc.LocalService("workflow")
def make_key(br, fields):
list_key = []
for field in fields:
@ -803,8 +796,8 @@ class purchase_order(osv.osv):
# make triggers pointing to the old orders point to the new order
for old_id in old_ids:
wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr)
wf_service.trg_validate(uid, 'purchase.order', old_id, 'purchase_cancel', cr)
self.redirect_workflow(cr, uid, [(old_id, neworder_id)])
self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls?
return orders_info
@ -1171,8 +1164,7 @@ class mail_mail(osv.Model):
def _postprocess_sent_message(self, cr, uid, mail, context=None):
if mail.model == 'purchase.order':
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'purchase.order', mail.res_id, 'send_rfq', cr)
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id])
return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context)
@ -1194,8 +1186,7 @@ class mail_compose_message(osv.Model):
context = context or {}
if context.get('default_model') == 'purchase.order' and context.get('default_res_id'):
context = dict(context, mail_post_autofollow=True)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'purchase.order', context['default_res_id'], 'send_rfq', cr)
self.pool.get('purchase.order').signal_send_rfq(cr, uid, [context['default_res_id']])
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
class account_invoice(osv.Model):

View File

@ -59,11 +59,8 @@
I Validate Invoice of Purchase Order.
-
!python {model: purchase.order}: |
from openerp import netsvc
invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids]
wf_service = netsvc.LocalService("workflow")
for invoice in invoice_ids:
wf_service.trg_validate(uid, 'account.invoice', invoice, 'invoice_open', cr)
self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids)
-
I check that purchase order is invoiced.
-

View File

@ -22,7 +22,6 @@
from datetime import datetime
from dateutil.relativedelta import relativedelta
import time
from openerp import netsvc
from openerp.osv import fields,osv
from openerp.tools.translate import _
@ -211,8 +210,7 @@ class purchase_order(osv.osv):
proc_ids = proc_obj.search(cr, uid, [('purchase_id', '=', order.id)])
if proc_ids and po.state=='confirmed':
proc_obj.write(cr, uid, proc_ids, {'purchase_id': po.id})
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'purchase.order', order.id, 'purchase_cancel', cr)
self.signal_purchase_cancel(cr, uid, [order.id])
po.requisition_id.tender_done(context=context)
return res

View File

@ -69,10 +69,8 @@
I confirmed RFQ which has best price.
-
!python {model: purchase.order}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
purchase = self.browse(cr, uid, ref('rfq2'), context=context)
wf_service.trg_validate(uid, 'purchase.order', purchase.id, 'purchase_confirm', cr)
self.signal_purchase_confirm(cr, uid, [purchase.id])
-
I check status of requisition after confirmed best RFQ.

View File

@ -418,8 +418,7 @@ class sale_order(osv.osv):
This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr)
self.signal_quotation_sent(cr, uid, ids)
datas = {
'model': 'sale.order',
'ids': ids,
@ -432,12 +431,10 @@ class sale_order(osv.osv):
view of one of the newly created invoices
"""
mod_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
# create invoices through the sales orders' workflow
inv_ids0 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids)
for id in ids:
wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
self.signal_manual_invoice(cr, uid, ids)
inv_ids1 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids)
# determine newly created invoices
new_inv_ids = list(inv_ids1 - inv_ids0)
@ -555,10 +552,10 @@ class sale_order(osv.osv):
return True
def action_cancel(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
sale_order_line_obj = self.pool.get('sale.order.line')
account_invoice_obj = self.pool.get('account.invoice')
for sale in self.browse(cr, uid, ids, context=context):
for inv in sale.invoice_ids:
if inv.state not in ('draft', 'cancel'):
@ -566,8 +563,7 @@ class sale_order(osv.osv):
_('Cannot cancel this sales order!'),
_('First cancel all invoices attached to this sales order.'))
for r in self.read(cr, uid, ids, ['invoice_ids']):
for inv in r['invoice_ids']:
wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
account_invoice_obj.signal_invoice_cancel(cr, uid, r['invoice_ids'])
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
{'state': 'cancel'})
self.write(cr, uid, ids, {'state': 'cancel'})
@ -575,8 +571,7 @@ class sale_order(osv.osv):
def action_button_confirm(self, cr, uid, ids, context=None):
assert len(ids) == 1, 'This option should only be used for a single id at a time.'
wf_service = netsvc.LocalService('workflow')
wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr)
self.signal_order_confirm(cr, uid, ids)
# redisplay the record as a sales order
view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form')
@ -880,7 +875,7 @@ class sale_order_line(osv.osv):
date_order = time.strftime(DEFAULT_SERVER_DATE_FORMAT)
result = {}
warning_msgs = {}
warning_msgs = ''
product_obj = product_obj.browse(cr, uid, product, context=context_partner)
uom2 = False
@ -991,8 +986,7 @@ class mail_compose_message(osv.Model):
context = context or {}
if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'):
context = dict(context, mail_post_autofollow=True)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'sale.order', context['default_res_id'], 'quotation_sent', cr)
self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']])
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
class account_invoice(osv.Model):

View File

@ -51,11 +51,10 @@
I cancel all the invoices.
-
!python {model: sale.order}: |
from openerp import netsvc
invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids
wf_service = netsvc.LocalService("workflow")
account_invoice_obj = self.pool.get('account.invoice')
for invoice in invoice_ids:
wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_cancel', cr)
account_invoice_obj.signal_invoice_cancel(cr, uid, [invoice.id])
-
I check order status in "Invoice Exception" and related invoice is in cancel state.
-

View File

@ -41,11 +41,10 @@
I open the Invoice.
-
!python {model: sale.order}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
so = self.browse(cr, uid, ref("sale_order_2"))
account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids:
wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr)
account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id])
-
I pay the invoice.
-

View File

@ -80,7 +80,6 @@ class sale_order_line_make_invoice(osv.osv_memory):
sales_order_line_obj = self.pool.get('sale.order.line')
sales_order_obj = self.pool.get('sale.order')
wf_service = netsvc.LocalService('workflow')
for line in sales_order_line_obj.browse(cr, uid, context.get('active_ids', []), context=context):
if (not line.invoiced) and (line.state not in ('draft', 'cancel')):
if not line.order_id.id in invoices:
@ -104,7 +103,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
flag = False
break
if flag:
wf_service.trg_validate(uid, 'sale.order', line.order_id.id, 'manual_invoice', cr)
sales_order_obj.signal_manual_invoice(cr, uid, [line.order_id.id])
sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'})
if not invoices:

View File

@ -52,10 +52,8 @@ class sale_make_invoice(osv.osv_memory):
context = {}
data = self.read(cr, uid, ids)[0]
order_obj.action_invoice_create(cr, uid, context.get(('active_ids'), []), data['grouped'], date_inv = data['invoice_date'])
wf_service = netsvc.LocalService("workflow")
for id in context.get(('active_ids'), []):
wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
order_obj.signal_manual_invoice(cr, uid, context.get(('active_ids'), []))
for o in order_obj.browse(cr, uid, context.get(('active_ids'), []), context=context):
for i in o.invoice_ids:
newinv.append(i.id)

View File

@ -103,11 +103,8 @@
!python {model: procurement.order}: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
proc_ids = self.search(cr, uid, [('origin','=',so.name)])
for proc in proc_ids:
wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr)
self.signal_button_check(cr, uid, proc_ids)
-
I verify that a procurement state is "running"
-

View File

@ -23,7 +23,6 @@ from datetime import datetime, timedelta
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare
from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
from openerp import netsvc
from openerp.tools.translate import _
class sale_shop(osv.osv):
@ -194,11 +193,11 @@ class sale_order(osv.osv):
return res
def action_cancel(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
sale_order_line_obj = self.pool.get('sale.order.line')
proc_obj = self.pool.get('procurement.order')
stock_obj = self.pool.get('stock.picking')
for sale in self.browse(cr, uid, ids, context=context):
for pick in sale.picking_ids:
if pick.state not in ('draft', 'cancel'):
@ -209,11 +208,9 @@ class sale_order(osv.osv):
for mov in pick.move_lines:
proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)])
if proc_ids:
for proc in proc_ids:
wf_service.trg_validate(uid, 'procurement.order', proc, 'button_check', cr)
proc_obj.signal_button_check(cr, uid, proc_ids)
for r in self.read(cr, uid, ids, ['picking_ids']):
for pick in r['picking_ids']:
wf_service.trg_validate(uid, 'stock.picking', pick, 'button_cancel', cr)
stock_obj.signal_button_cancel(cr, uid, r['picking_ids'])
return super(sale_order, self).action_cancel(cr, uid, ids, context=context)
def action_wait(self, cr, uid, ids, context=None):
@ -396,11 +393,9 @@ class sale_order(osv.osv):
line.write({'procurement_id': proc_id})
self.ship_recreate(cr, uid, order, line, move_id, proc_id)
wf_service = netsvc.LocalService("workflow")
if picking_id:
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
for proc_id in proc_ids:
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
picking_obj.signal_button_confirm(cr, uid, [picking_id])
procurement_obj.signal_button_confirm(cr, uid, proc_ids)
val = {}
if order.state == 'shipping_except':

View File

@ -17,11 +17,9 @@
Now I cancel latest shipment.
-
!python {model: stock.picking}: |
from openerp import netsvc
delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))])
last_delivery_order_id = delivery_orders[0]
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', last_delivery_order_id, 'button_cancel', cr)
self.pool.get('stock.picking').signal_button_cancel(cr, uid, [last_delivery_order_id])
-
I run the scheduler.
-
@ -50,11 +48,9 @@
To cancel the sale order from Invoice Exception, I have to cancel the invoice of sale order.
-
!python {model: sale.order}: |
from openerp import netsvc
invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids
wf_service = netsvc.LocalService("workflow")
first_invoice_id = invoice_ids[0]
wf_service.trg_validate(uid, 'account.invoice', first_invoice_id.id, 'invoice_cancel', cr)
self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, [first_invoice_id.id])
-
I check order status in "Invoice Exception" and related invoice is in cancel state.
-

View File

@ -132,11 +132,10 @@
I open the Invoice.
-
!python {model: sale.order}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
so = self.browse(cr, uid, ref("sale.sale_order_6"))
account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids:
wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr)
account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id])
-
I pay the invoice
-

View File

@ -759,10 +759,9 @@ class stock_picking(osv.osv):
""" Changes state of picking to available if all moves are confirmed.
@return: True
"""
wf_service = netsvc.LocalService("workflow")
for pick in self.browse(cr, uid, ids):
if pick.state == 'draft':
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_confirm', cr)
self.signal_button_confirm(cr, uid, [pick.id])
move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed']
if not move_ids:
raise osv.except_osv(_('Warning!'),_('Not enough stock, unable to reserve the products.'))
@ -784,12 +783,10 @@ class stock_picking(osv.osv):
""" Confirms picking directly from draft state.
@return: True
"""
wf_service = netsvc.LocalService("workflow")
for pick in self.browse(cr, uid, ids):
if not pick.move_lines:
raise osv.except_osv(_('Error!'),_('You cannot process picking without stock moves.'))
wf_service.trg_validate(uid, 'stock.picking', pick.id,
'button_confirm', cr)
self.signal_button_confirm(cr, uid, [pick.id])
return True
def draft_validate(self, cr, uid, ids, context=None):
@ -1345,18 +1342,18 @@ class stock_picking(osv.osv):
# At first we confirm the new picking (if necessary)
if new_picking:
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
self.signal_button_confirm(cr, uid, [new_picking])
# Then we finish the good picking
self.write(cr, uid, [pick.id], {'backorder_id': new_picking})
self.action_move(cr, uid, [new_picking], context=context)
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr)
self.signal_button_done(cr, uid, [new_picking])
wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
delivered_pack_id = new_picking
back_order_name = self.browse(cr, uid, delivered_pack_id, context=context).name
self.message_post(cr, uid, ids, body=_("Back order <em>%s</em> has been <b>created</b>.") % (back_order_name), context=context)
else:
self.action_move(cr, uid, [pick.id], context=context)
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
self.signal_button_done(cr, uid, [pick.id])
delivered_pack_id = pick.id
delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context)
@ -2037,7 +2034,6 @@ class stock_move(osv.osv):
res_obj = self.pool.get('res.company')
location_obj = self.pool.get('stock.location')
move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
new_moves = []
if context is None:
context = {}
@ -2073,7 +2069,7 @@ class stock_move(osv.osv):
})
new_moves.append(self.browse(cr, uid, [new_id])[0])
if pickid:
wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr)
self.signal_button_confirm(cr, uid, [pickid])
if new_moves:
new_moves += self.create_chained_picking(cr, uid, new_moves, context)
return new_moves
@ -2195,6 +2191,7 @@ class stock_move(osv.osv):
return True
if context is None:
context = {}
wf_service = netsvc.LocalService("workflow")
pickings = set()
for move in self.browse(cr, uid, ids, context=context):
if move.state in ('confirmed', 'waiting', 'assigned', 'draft'):
@ -2203,7 +2200,6 @@ class stock_move(osv.osv):
if move.move_dest_id and move.move_dest_id.state == 'waiting':
self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'})
if context.get('call_unlink',False) and move.move_dest_id.picking_id:
wf_service = netsvc.LocalService("workflow")
wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr)
self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False})
if not context.get('call_unlink',False):
@ -2211,7 +2207,6 @@ class stock_move(osv.osv):
if all(move.state == 'cancel' for move in pick.move_lines):
self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'stock.move', id, cr)
return True
@ -2633,7 +2628,6 @@ class stock_move(osv.osv):
product_obj = self.pool.get('product.product')
currency_obj = self.pool.get('res.currency')
uom_obj = self.pool.get('product.uom')
wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
@ -2734,7 +2728,7 @@ class stock_move(osv.osv):
res = cr.fetchall()
if len(res) == len(move.picking_id.move_lines):
picking_obj.action_move(cr, uid, [move.picking_id.id])
wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr)
picking_obj.signal_button_done(cr, uid, [move.picking_id.id])
return [move.id for move in complete]
@ -2953,15 +2947,25 @@ class stock_picking_in(osv.osv):
#override in order to redirect the check of acces rules on the stock.picking object
return self.pool.get('stock.picking').check_access_rule(cr, uid, ids, operation, context=context)
def _workflow_trigger(self, cr, uid, ids, trigger, context=None):
#override in order to trigger the workflow of stock.picking at the end of create, write and unlink operation
#instead of it's own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_trigger(cr, uid, ids, trigger, context=context)
def create_workflow(self, cr, uid, ids, context=None):
# overridden in order to trigger the workflow of stock.picking at the end of create,
# write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').create_workflow(cr, uid, ids, context=context)
def _workflow_signal(self, cr, uid, ids, signal, context=None):
#override in order to fire the workflow signal on given stock.picking workflow instance
#instead of it's own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_signal(cr, uid, ids, signal, context=context)
def delete_workflow(self, cr, uid, ids, context=None):
# overridden in order to trigger the workflow of stock.picking at the end of create,
# write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').delete_workflow(cr, uid, ids, context=context)
def step_workflow(self, cr, uid, ids, context=None):
# overridden in order to trigger the workflow of stock.picking at the end of create,
# write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').step_workflow(cr, uid, ids, context=context)
def signal_workflow(self, cr, uid, ids, signal, context=None):
# overridden in order to fire the workflow signal on given stock.picking workflow instance
# instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').signal_workflow(cr, uid, ids, signal, context=context)
_columns = {
'backorder_id': fields.many2one('stock.picking.in', 'Back Order of', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="If this shipment was split, then this field links to the shipment which contains the already processed part.", select=True),
@ -2998,15 +3002,25 @@ class stock_picking_out(osv.osv):
#override in order to redirect the check of acces rules on the stock.picking object
return self.pool.get('stock.picking').check_access_rule(cr, uid, ids, operation, context=context)
def _workflow_trigger(self, cr, uid, ids, trigger, context=None):
#override in order to trigger the workflow of stock.picking at the end of create, write and unlink operation
#instead of it's own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_trigger(cr, uid, ids, trigger, context=context)
def create_workflow(self, cr, uid, ids, context=None):
# overridden in order to trigger the workflow of stock.picking at the end of create,
# write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').create_workflow(cr, uid, ids, context=context)
def _workflow_signal(self, cr, uid, ids, signal, context=None):
#override in order to fire the workflow signal on given stock.picking workflow instance
#instead of it's own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_signal(cr, uid, ids, signal, context=context)
def delete_workflow(self, cr, uid, ids, context=None):
# overridden in order to trigger the workflow of stock.picking at the end of create,
# write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').delete_workflow(cr, uid, ids, context=context)
def step_workflow(self, cr, uid, ids, context=None):
# overridden in order to trigger the workflow of stock.picking at the end of create,
# write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').step_workflow(cr, uid, ids, context=context)
def signal_workflow(self, cr, uid, ids, signal, context=None):
# overridden in order to fire the workflow signal on given stock.picking workflow instance
# instead of its own workflow (which is not existing)
return self.pool.get('stock.picking').signal_workflow(cr, uid, ids, signal, context=context)
_columns = {
'backorder_id': fields.many2one('stock.picking.out', 'Back Order of', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="If this shipment was split, then this field links to the shipment which contains the already processed part.", select=True),

View File

@ -151,7 +151,6 @@ class stock_return_picking(osv.osv_memory):
data_obj = self.pool.get('stock.return.picking.memory')
act_obj = self.pool.get('ir.actions.act_window')
model_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
pick = pick_obj.browse(cr, uid, record_id, context=context)
data = self.read(cr, uid, ids[0], context=context)
date_cur = time.strftime('%Y-%m-%d %H:%M:%S')
@ -206,7 +205,7 @@ class stock_return_picking(osv.osv_memory):
if set_invoice_state_to_none:
pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'}, context=context)
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
pick_obj.signal_button_confirm(cr, uid, [new_picking])
pick_obj.force_assign(cr, uid, [new_picking], context)
# Update view id in context, lp:702939
model_list = {

View File

@ -49,7 +49,6 @@ class procurement_order(osv.osv):
proc_obj = self.pool.get('procurement.order')
move_obj = self.pool.get('stock.move')
picking_obj=self.pool.get('stock.picking')
wf_service = netsvc.LocalService("workflow")
for proc in proc_obj.browse(cr, uid, ids, context=context):
line = None
for line in proc.product_id.flow_pull_ids:
@ -109,9 +108,8 @@ class procurement_order(osv.osv):
'procure_method': line.procure_method,
'move_id': move_id,
})
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
self.signal_button_confirm(cr, uid, [proc_id])
if proc.move_id:
move_obj.write(cr, uid, [proc.move_id.id],
{'location_id':proc.location_id.id})
@ -119,9 +117,8 @@ class procurement_order(osv.osv):
self.write(cr, uid, [proc.id], {'state':'running', 'message': msg})
self.message_post(cr, uid, [proc.id], body=msg, context=context)
# trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed)
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)
self.signal_button_check(cr, uid, [proc_id]) # TODO is it necessary to interleave the calls?
return False
procurement_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -21,6 +21,7 @@
import base64
import urllib2
from urlparse import urlparse, urlunparse
import openerp
from openerp.osv import fields, osv
@ -30,11 +31,12 @@ class Binary(openerp.addons.web.http.Controller):
@openerp.addons.web.http.jsonrequest
def url2binary(self, req, url):
if not url.startswith("http"):
raise Exception("Not allowed to load a file using this protocol")
if url.count("?") > 0 or url.count("&") > 0 or url.count("=") > 0:
raise Exception("Not allowed to use GET parameters")
"""Used exclusively to load images from LinkedIn profiles, must not be used for anything else."""
req.session.assert_valid(force=True)
_scheme, _netloc, path, params, query, fragment = urlparse(url)
# media.linkedin.com is the master domain for LinkedIn media (replicated to CDNs),
# so forcing it should always work and prevents abusing this method to load arbitrary URLs
url = urlunparse(('http', 'media.linkedin.com', path, params, query, fragment))
bfile = urllib2.urlopen(url)
return base64.b64encode(bfile.read())