[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" _description = "Account Report"
def _get_level(self, cr, uid, ids, field_name, arg, context=None): 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 = {} res = {}
for report in self.browse(cr, uid, ids, context=context): for report in self.browse(cr, uid, ids, context=context):
level = 0 level = 0
@ -48,6 +50,8 @@ class account_financial_report(osv.osv):
return res return res
def _get_children_by_order(self, cr, uid, ids, context=None): 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 = [] res = []
for id in ids: for id in ids:
res.append(id) res.append(id)
@ -56,6 +60,12 @@ class account_financial_report(osv.osv):
return res return res
def _get_balance(self, cr, uid, ids, field_names, args, context=None): 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') account_obj = self.pool.get('account.account')
res = {} res = {}
for report in self.browse(cr, uid, ids, context=context): for report in self.browse(cr, uid, ids, context=context):

View File

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

View File

@ -151,12 +151,12 @@ class account_config_settings(osv.osv_memory):
self.write(cr, uid, [id], vals, context) self.write(cr, uid, [id], vals, context)
return id 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 # update related fields
values = {} values = {}
values['currency_id'] = False values['currency_id'] = False
if company_id: 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) 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, 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')), [('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"/> <label for="company_id" string="Select Company"/>
<field name="company_id" <field name="company_id"
widget="selection" widget="selection"
on_change="onchange_company_id(company_id)" on_change="onchange_company_id(company_id, context)"
class="oe_inline"/> class="oe_inline"/>
</div> </div>
<div> <div>

View File

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

View File

@ -21,7 +21,6 @@
from openerp.osv import osv from openerp.osv import osv
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp import netsvc
from openerp import pooler from openerp import pooler
class account_invoice_confirm(osv.osv_memory): class account_invoice_confirm(osv.osv_memory):
@ -33,16 +32,16 @@ class account_invoice_confirm(osv.osv_memory):
_description = "Confirm the selected invoices" _description = "Confirm the selected invoices"
def invoice_confirm(self, cr, uid, ids, context=None): def invoice_confirm(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService('workflow')
if context is None: if context is None:
context = {} context = {}
pool_obj = pooler.get_pool(cr.dbname) 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: for record in data_inv:
if record['state'] not in ('draft','proforma','proforma2'): 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.")) 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'} return {'type': 'ir.actions.act_window_close'}
account_invoice_confirm() account_invoice_confirm()
@ -59,14 +58,13 @@ class account_invoice_cancel(osv.osv_memory):
def invoice_cancel(self, cr, uid, ids, context=None): def invoice_cancel(self, cr, uid, ids, context=None):
if context is None: if context is None:
context = {} context = {}
wf_service = netsvc.LocalService('workflow')
pool_obj = pooler.get_pool(cr.dbname) 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: for record in data_inv:
if record['state'] in ('cancel','paid'): 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.")) 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'} return {'type': 'ir.actions.act_window_close'}
account_invoice_cancel() 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) data_inv = obj_invoice.browse(cr, uid, context['active_ids'][0], context=context)
if data_inv.reconciled: if data_inv.reconciled:
raise osv.except_osv(_('Warning!'), _('Invoice is already reconciled.')) raise osv.except_osv(_('Warning!'), _('Invoice is already reconciled.'))
wf_service = netsvc.LocalService("workflow") obj_invoice.signal_open_test(cr, uid, context['active_ids'][0])
wf_service.trg_validate(uid, 'account.invoice', context['active_ids'][0], 'open_test', cr)
return {'type': 'ir.actions.act_window_close'} return {'type': 'ir.actions.act_window_close'}
account_state_open() account_state_open()

View File

@ -331,6 +331,9 @@ class account_asset_asset(osv.osv):
depreciation_obj = self.pool.get('account.asset.depreciation.line') depreciation_obj = self.pool.get('account.asset.depreciation.line')
period = period_obj.browse(cr, uid, period_id, context=context) 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) 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) return depreciation_obj.create_move(cr, uid, depreciation_ids, context=context)
def create(self, cr, uid, vals, context=None): def create(self, cr, uid, vals, context=None):
@ -388,7 +391,7 @@ class account_asset_depreciation_line(osv.osv):
created_move_ids = [] created_move_ids = []
asset_ids = [] asset_ids = []
for line in self.browse(cr, uid, ids, context=context): 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) period_ids = period_obj.find(cr, uid, depreciation_date, context=context)
company_currency = line.asset_id.company_id.currency_id.id company_currency = line.asset_id.company_id.currency_id.id
current_currency = line.asset_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 from report import account_followup_print
assert len(ids) == 1 assert len(ids) == 1
if context is None:
context = {}
partner = self.browse(cr, uid, ids[0], context=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 = '' followup_table = ''
if partner.unreconciled_aml_ids: if partner.unreconciled_aml_ids:
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id 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 += ''' followup_table += '''
<table border="2" width=100%%> <table border="2" width=100%%>
<tr> <tr>
<td>Invoice date</td> <td>''' + _("Invoice Date") + '''</td>
<td>Reference</td> <td>''' + _("Description") + '''</td>
<td>Due date</td> <td>''' + _("Reference") + '''</td>
<td>Amount (%s)</td> <td>''' + _("Due Date") + '''</td>
<td>Lit.</td> <td>''' + _("Amount") + " (%s)" % (currency.symbol) + '''</td>
<td>''' + _("Lit.") + '''</td>
</tr> </tr>
''' % (currency.symbol) '''
total = 0 total = 0
for aml in currency_dict['line']: for aml in currency_dict['line']:
block = aml['blocked'] and 'X' or ' ' block = aml['blocked'] and 'X' or ' '
@ -268,13 +274,28 @@ class res_partner(osv.osv):
if date <= current_date and aml['balance'] > 0: if date <= current_date and aml['balance'] > 0:
strbegin = "<TD><B>" strbegin = "<TD><B>"
strend = "</B></TD>" 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) total = rml_parse.formatLang(total, dp='Account', currency_obj=currency)
followup_table += '''<tr> </tr> followup_table += '''<tr> </tr>
</table> </table>
<center>Amount due: %s </center>''' % (total) <center>''' + _("Amount due") + ''' : %s </center>''' % (total)
return followup_table 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): 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) 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" _inherit = "res.partner"
_columns = { _columns = {
'payment_responsible_id':fields.many2one('res.users', ondelete='set null', string='Follow-up Responsible', '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."), 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"), track_visibility="onchange"),
'payment_note':fields.text('Customer Payment Promise', help="Payment Note", track_visibility="onchange"),
'payment_next_action':fields.text('Next Action', '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', 'payment_next_action_date':fields.date('Next Action Date',
help="This is when the manual follow-up is needed. " \ 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), '&', 'unreconciled_aml_ids':fields.one2many('account.move.line', 'partner_id', domain=['&', ('reconcile_id', '=', False), '&',
('account_id.active','=', True), '&', ('account_id.type', '=', 'receivable'), ('state', '!=', 'draft')]), ('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", '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"/> <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/> <separator/>
<filter string="No Responsible" domain="[('payment_responsible_id', '=', False)]"/> <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>
<group expand="1" string="Group By..."> <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> </group>
</search> </search>
</field> </field>
@ -132,6 +132,18 @@
<!-- Menus about followup of customers --> <!-- Menus about followup of customers -->
<menuitem id="account_followup_s" action="action_customer_followup" <menuitem id="account_followup_s" action="action_customer_followup"
parent="menu_finance_followup" name="Do Manual Follow-Ups" sequence="3"/> 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> </data>
</openerp> </openerp>

View File

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

View File

@ -26,6 +26,8 @@ from openerp import tools
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp import SUPERUSER_ID
class account_followup_stat_by_partner(osv.osv): class account_followup_stat_by_partner(osv.osv):
_name = "account_followup.stat.by.partner" _name = "account_followup.stat.by.partner"
_description = "Follow-up Statistics 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'), 'email_body': fields.text('Email Body'),
'summary': fields.text('Summary', readonly=True), 'summary': fields.text('Summary', readonly=True),
'test_print': fields.boolean('Test Print', '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): 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: if not part.unreconciled_aml_ids:
partners_to_clear.append(part.id) partners_to_clear.append(part.id)
self.pool.get('res.partner').action_done(cr, uid, partners_to_clear, context=context) 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): def do_process(self, cr, uid, ids, context=None):
if context is None: if context is None:
@ -313,6 +315,13 @@ class account_followup_print(osv.osv_memory):
if stat_line_id not in partner_list: if stat_line_id not in partner_list:
partner_list.append(stat_line_id) partner_list.append(stat_line_id)
to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': 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} return {'partner_ids': partner_list, 'to_update': to_update}
account_followup_print() account_followup_print()

View File

@ -23,7 +23,6 @@ import logging
import time import time
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp import netsvc
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
@ -120,9 +119,7 @@ class payment_order(osv.osv):
def set_to_draft(self, cr, uid, ids, *args): def set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'}) self.write(cr, uid, ids, {'state': 'draft'})
wf_service = netsvc.LocalService("workflow") self.create_workflow(cr, uid, ids)
for id in ids:
wf_service.trg_create(uid, 'payment.order', id, cr)
return True return True
def action_open(self, cr, uid, ids, *args): def action_open(self, cr, uid, ids, *args):
@ -135,9 +132,8 @@ class payment_order(osv.osv):
return True return True
def set_done(self, cr, uid, ids, *args): 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')}) 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 return True
def copy(self, cr, uid, id, default=None, context=None): def copy(self, cr, uid, id, default=None, context=None):

View File

@ -22,7 +22,6 @@
import time import time
from lxml import etree from lxml import etree
from openerp import netsvc
from openerp.osv import fields, osv from openerp.osv import fields, osv
import openerp.addons.decimal_precision as dp import openerp.addons.decimal_precision as dp
from openerp.tools.translate import _ from openerp.tools.translate import _
@ -50,13 +49,25 @@ class account_config_settings(osv.osv_memory):
'company_id', 'income_currency_exchange_account_id', 'company_id', 'income_currency_exchange_account_id',
type='many2one', type='many2one',
relation='account.account', relation='account.account',
string="Gain Exchange Rate Account"), string="Gain Exchange Rate Account",
domain="[('type', '=', 'other')]"),
'expense_currency_exchange_account_id': fields.related( 'expense_currency_exchange_account_id': fields.related(
'company_id', 'expense_currency_exchange_account_id', 'company_id', 'expense_currency_exchange_account_id',
type="many2one", type="many2one",
relation='account.account', 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): class account_voucher(osv.osv):
def _check_paid(self, cr, uid, ids, name, args, context=None): def _check_paid(self, cr, uid, ids, name, args, context=None):
@ -820,10 +831,7 @@ class account_voucher(osv.osv):
return vals return vals
def button_proforma_voucher(self, cr, uid, ids, context=None): def button_proforma_voucher(self, cr, uid, ids, context=None):
context = context or {} self.signal_proforma_voucher(cr, uid, ids)
wf_service = netsvc.LocalService("workflow")
for vid in ids:
wf_service.trg_validate(uid, 'account.voucher', vid, 'proforma_voucher', cr)
return {'type': 'ir.actions.act_window_close'} return {'type': 'ir.actions.act_window_close'}
def proforma_voucher(self, cr, uid, ids, context=None): def proforma_voucher(self, cr, uid, ids, context=None):
@ -831,9 +839,7 @@ class account_voucher(osv.osv):
return True return True
def action_cancel_draft(self, cr, uid, ids, context=None): def action_cancel_draft(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow") self.create_workflow(cr, uid, ids)
for voucher_id in ids:
wf_service.trg_create(uid, 'account.voucher', voucher_id, cr)
self.write(cr, uid, ids, {'state':'draft'}) self.write(cr, uid, ids, {'state':'draft'})
return True 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): 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') voucher_obj = self.pool.get('account.voucher')
wf_service = netsvc.LocalService("workflow")
move_line_obj = self.pool.get('account.move.line') move_line_obj = self.pool.get('account.move.line')
bank_st_line_obj = self.pool.get('account.bank.statement.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) 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) voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context)
if st_line.voucher_id.state == 'cancel': if st_line.voucher_id.state == 'cancel':
voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context) 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) v = voucher_obj.browse(cr, uid, st_line.voucher_id.id, context=context)
bank_st_line_obj.write(cr, uid, [st_line_id], { 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$> I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$>
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case1')) voucher_id = self.browse(cr, uid, ref('account_voucher_1_case1'))
data = [] data = []
@ -183,10 +181,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my first voucher is valid 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$ I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case1')) voucher_id = self.browse(cr, uid, ref('account_voucher_2_case1'))
data = [] data = []
@ -281,10 +275,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my second voucher is valid 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$ I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2_suppl')) voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2_suppl'))
data = [] data = []
@ -162,10 +160,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) 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") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my voucher is valid 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$> I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2_suppl')) voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2_suppl'))
data = [] data = []
@ -268,10 +262,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) 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") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that my voucher state is posted I check that my voucher state is posted
- -

View File

@ -182,8 +182,7 @@
!python {model: account.voucher}: | !python {model: account.voucher}: |
from openerp import netsvc 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'))]) 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") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my voucher is valid I check that the move of my voucher is valid
- -
@ -258,8 +257,7 @@
!python {model: account.voucher}: | !python {model: account.voucher}: |
from openerp import netsvc 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'))]) 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") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that my voucher state is posted 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$> I fill amounts 130 for the invoice of 200$ and 70 for the invoice of 100$>
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2b')) voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2b'))
data = [] data = []
@ -180,10 +178,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) 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") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my voucher is valid I check that the move of my voucher is valid
- -
@ -247,8 +243,6 @@
and I fully reconcil the 2 previous invoices and I fully reconcil the 2 previous invoices
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2b')) voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2b'))
data = [] data = []
@ -271,10 +265,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) 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") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that my voucher state is posted 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€ I fill amounts 100 for the invoice of 150€ and 20 for the invoice of 80€
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case3')) voucher_id = self.browse(cr, uid, ref('account_voucher_1_case3'))
data = [] data = []
@ -142,10 +140,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my first voucher is valid 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€ I fill amounts 50 for the invoice of 150€ and 70 for the invoice of 80€
- -
!python {model: account.voucher}: | !python {model: account.voucher}: |
import time
from openerp import netsvc
vals = {} vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case3')) voucher_id = self.browse(cr, uid, ref('account_voucher_2_case3'))
data = [] data = []
@ -233,10 +227,8 @@
I confirm the voucher I confirm the voucher
- -
!python {model: account.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'))]) voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_19'))])
wf_service = netsvc.LocalService("workflow") self.signal_proforma_voucher(cr, uid, voucher)
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
- -
I check that the move of my second voucher is valid I check that the move of my second voucher is valid
- -

View File

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

View File

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

View File

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

View File

@ -307,8 +307,9 @@
</group> </group>
<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="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="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="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="account_id" <field name="account_id"

View File

@ -1,75 +1,28 @@
# Russian translation for openobject-addons # 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. # This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. # FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: openobject-addons\n" "Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-03 16:03+0000\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-07 08:15+0000\n" "PO-Revision-Date: 2013-02-13 09:46+0000\n"
"Last-Translator: Denis Karataev <dskarataev@gmail.com>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n" "Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-08 04:59+0000\n" "X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n"
"X-Generator: Launchpad (build 16341)\n" "X-Generator: Launchpad (build 16491)\n"
#. module: base_crypt #. module: auth_crypt
#: model:ir.model,name:base_crypt.model_res_users #: field:res.users,password_crypt:0
msgid "Encrypted Password"
msgstr "Зашифрованный пароль"
#. module: auth_crypt
#: model:ir.model,name:auth_crypt.model_res_users
msgid "Users" msgid "Users"
msgstr "Пользователи" 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 logging
import simplejson import simplejson
import werkzeug.utils
from werkzeug.exceptions import BadRequest from werkzeug.exceptions import BadRequest
import openerp
from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID
import openerp.addons.web.http as oeweb import openerp.addons.web.http as oeweb
from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect 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 # auth_signup is not installed
_logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,)) _logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,))
url = "/#action=login&oauth_error=1" 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: except Exception, e:
# signup error # signup error
_logger.exception("OAuth2: %s" % str(e)) _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) login = super(res_users, self)._auth_oauth_signin(cr, uid, provider, validation, params, context=context)
except openerp.exceptions.AccessDenied: except openerp.exceptions.AccessDenied:
if context and context.get('no_user_creation'):
return None
state = simplejson.loads(params['state']) state = simplejson.loads(params['state'])
token = state.get('t') token = state.get('t')
oauth_uid = validation['user_id'] oauth_uid = validation['user_id']

View File

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

View File

@ -567,7 +567,8 @@ class crm_lead(base_stage, format_address, osv.osv):
for opportunity in opportunities: for opportunity in opportunities:
subject.append(opportunity.name) subject.append(opportunity.name)
title = "%s : %s" % (opportunity.type == 'opportunity' and _('Merged opportunity') or _('Merged lead'), 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 # Chatter message's subject
subject = subject[0] + ": " + ", ".join(subject[1:]) 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) opportunities = self.browse(cr, uid, ids, context=context)
sequenced_opps = [] sequenced_opps = []
for opportunity in opportunities: 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) sequenced_opps.sort(key=lambda tup: tup[0], reverse=True)
opportunities = [opportunity for sequence, opportunity in sequenced_opps] opportunities = [opportunity for sequence, opportunity in sequenced_opps]
ids = [opportunity.id for opportunity in opportunities] ids = [opportunity.id for opportunity in opportunities]
@ -636,7 +640,8 @@ class crm_lead(base_stage, format_address, osv.osv):
tail_opportunities = opportunities_rest 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 # Merge messages and attachements into the first opportunity
self._merge_opportunity_history(cr, uid, highest.id, tail_opportunities, context=context) 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) 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']: 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) 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 # Write merged data into first opportunity
self.write(cr, uid, [highest.id], merged_data, context=context) self.write(cr, uid, [highest.id], merged_data, context=context)
# Delete tail opportunities # Delete tail opportunities

View File

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

View File

@ -58,11 +58,11 @@ class crm_lead2opportunity_partner(osv.osv_memory):
if partner_id: if partner_id:
# Search for opportunities that have the same partner and that arent done or cancelled # 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: for id in ids:
tomerge.add(id) tomerge.add(id)
if email: 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: for id in ids:
tomerge.add(id) tomerge.add(id)

View File

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

View File

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

View File

@ -62,5 +62,66 @@
</field> </field>
</record> </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> </data>
</openerp> </openerp>

View File

@ -1,4 +1,5 @@
import simplejson import simplejson
import urllib
import openerp.addons.web.http as openerpweb import openerp.addons.web.http as openerpweb
import openerp.addons.web.controllers.main as webmain import openerp.addons.web.controllers.main as webmain
@ -14,11 +15,15 @@ class EDI(openerpweb.Controller):
modules_json = simplejson.dumps(modules) 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')) 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')) 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 % { return webmain.html_template % {
'js': js, 'js': js,
'css': css, 'css': css,
'modules': modules_json, 'modules': modules_json,
'init': 's.edi.edi_import("%s");' % url, 'init': 's.edi.edi_import("%s");' % safe_url,
} }
@openerpweb.jsonrequest @openerpweb.jsonrequest

View File

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

View File

@ -24,10 +24,9 @@
import datetime import datetime
import time import time
from itertools import groupby from itertools import groupby
from operator import itemgetter from operator import attrgetter, itemgetter
import math import math
from openerp import netsvc
from openerp import tools from openerp import tools
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
@ -304,10 +303,8 @@ class hr_holidays(osv.osv):
'manager_id': False, 'manager_id': False,
'manager_id2': False, 'manager_id2': False,
}) })
wf_service = netsvc.LocalService("workflow") self.delete_workflow(cr, uid, ids)
for id in ids: self.create_workflow(cr, uid, ids)
wf_service.trg_delete(uid, 'hr.holidays', id, cr)
wf_service.trg_create(uid, 'hr.holidays', id, cr)
to_unlink = [] to_unlink = []
for record in self.browse(cr, uid, ids, context=context): for record in self.browse(cr, uid, ids, context=context):
for record2 in record.linked_request_ids: for record2 in record.linked_request_ids:
@ -370,11 +367,11 @@ class hr_holidays(osv.osv):
'employee_id': emp.id 'employee_id': emp.id
} }
leave_ids.append(self.create(cr, uid, vals, context=None)) leave_ids.append(self.create(cr, uid, vals, context=None))
wf_service = netsvc.LocalService("workflow")
for leave_id in leave_ids: for leave_id in leave_ids:
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr) # TODO is it necessary to interleave the calls?
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr) self.signal_confirm(cr, uid, [leave_id])
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr) self.signal_validate(cr, uid, [leave_id])
self.signal_second_validate(cr, uid, [leave_id])
return True return True
def holidays_confirm(self, cr, uid, ids, context=None): 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]) meeting_obj.unlink(cr, uid, [record.meeting_id.id])
# If a category that created several holidays, cancel all related # If a category that created several holidays, cancel all related
wf_service = netsvc.LocalService("workflow") self.signal_refuse(cr, uid, map(attrgetter('id'), record.linked_request_ids or []))
for request in record.linked_request_ids or []:
wf_service.trg_validate(uid, 'hr.holidays', request.id, 'refuse', cr)
self._remove_resource_leave(cr, uid, ids, context=context) self._remove_resource_leave(cr, uid, ids, context=context)
return True 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) 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: else:
return False return False
wf_service = netsvc.LocalService("workflow") holidays_obj.signal_confirm(cr, uid, [leave_id])
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr) holidays_obj.signal_validate(cr, uid, [leave_id])
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr) holidays_obj.signal_second_validate(cr, uid, [leave_id])
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
return True return True
def _get_remaining_days(self, cr, uid, ids, name, args, context=None): 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. I again set to draft and then confirm.
- -
!python {model: hr.holidays}: | !python {model: hr.holidays}: |
from openerp import netsvc self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')])
wf_service = netsvc.LocalService("workflow") self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')])
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)
- -
I validate the holiday request by clicking on "To Approve" button. 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 datetime import timedelta
from dateutil import relativedelta from dateutil import relativedelta
from openerp import netsvc
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp import tools from openerp import tools
from openerp.tools.translate import _ from openerp.tools.translate import _
@ -331,13 +330,12 @@ class hr_payslip(osv.osv):
def refund_sheet(self, cr, uid, ids, context=None): def refund_sheet(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
for payslip in self.browse(cr, uid, ids, context=context): 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) 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) self.compute_sheet(cr, uid, [id_copy], context=context)
wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'hr_verify_sheet', cr) self.signal_hr_verify_sheet(cr, uid, [id_copy])
wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'process_sheet', cr) self.signal_process_sheet(cr, uid, [id_copy])
form_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_form') 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 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') 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. I want to check cancel button. So I first cancel the sheet then make it set to draft.
- -
!python {model: hr.payslip}: | !python {model: hr.payslip}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None) 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. 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_vals.update({ update_vals.update({
'description': msg.get('body'),
'email_from': msg.get('from'), 'email_from': msg.get('from'),
'email_cc': msg.get('cc'), '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"/> domain="[('date_action','&lt;&gt;',False)]" help="Filter and view on next actions and date"/>
<field name="job_id"/> <field name="job_id"/>
<field name="user_id"/> <field name="user_id"/>
<separator/>
<field name="categ_ids"/>
<group expand="0" string="Group By..."> <group expand="0" string="Group By...">
<filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Department" domain="[]" context="{'group_by':'department_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. I click on "Create Invoice" button to create Invoice and validate the invoice.
- -
!python {model: hr.timesheet.invoice.create.final}: | !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")]}) 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. I click on "Create Invoice" button to create Invoice and validate the invoice.
- -
!python {model: hr.timesheet.invoice.create.final}: | !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")]}) 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.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp import netsvc
class hr_timesheet_sheet(osv.osv): class hr_timesheet_sheet(osv.osv):
_name = "hr_timesheet_sheet.sheet" _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) self.check_employee_attendance_state(cr, uid, sheet.id, context=context)
di = sheet.user_id.company_id.timesheet_max_difference di = sheet.user_id.company_id.timesheet_max_difference
if (abs(sheet.total_difference) < di) or not di: if (abs(sheet.total_difference) < di) or not di:
wf_service = netsvc.LocalService("workflow") self.signal_confirm(cr, uid, [sheet.id])
wf_service.trg_validate(uid, 'hr_timesheet_sheet.sheet', sheet.id, 'confirm', cr)
else: else:
raise osv.except_osv(_('Warning!'), _('Please verify that the total difference of the sheet is lower than %.2f.') %(di,)) raise osv.except_osv(_('Warning!'), _('Please verify that the total difference of the sheet is lower than %.2f.') %(di,))
return True return True
@ -192,9 +190,7 @@ class hr_timesheet_sheet(osv.osv):
def action_set_to_draft(self, cr, uid, ids, *args): def action_set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'}) self.write(cr, uid, ids, {'state': 'draft'})
wf_service = netsvc.LocalService('workflow') self.create_workflow(cr, uid, ids)
for id in ids:
wf_service.trg_create(uid, self._name, id, cr)
return True return True
def name_get(self, cr, uid, ids, context=None): def name_get(self, cr, uid, ids, context=None):

View File

@ -7,24 +7,24 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-02-01 10:13+0000\n" "PO-Revision-Date: 2013-02-14 15:58+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n" "X-Launchpad-Export-Date: 2013-02-15 04:38+0000\n"
"X-Generator: Launchpad (build 16378)\n" "X-Generator: Launchpad (build 16491)\n"
#. module: knowledge #. module: knowledge
#: view:knowledge.config.settings:0 #: view:knowledge.config.settings:0
msgid "Documents" msgid "Documents"
msgstr "" msgstr "Dokumentumok"
#. module: knowledge #. module: knowledge
#: model:ir.model,name:knowledge.model_knowledge_config_settings #: model:ir.model,name:knowledge.model_knowledge_config_settings
msgid "knowledge.config.settings" msgid "knowledge.config.settings"
msgstr "" msgstr "knowledge.config.settings"
#. module: knowledge #. module: knowledge
#: help:knowledge.config.settings,module_document_webdav:0 #: help:knowledge.config.settings,module_document_webdav:0
@ -32,11 +32,13 @@ msgid ""
"Access your documents in OpenERP through WebDAV.\n" "Access your documents in OpenERP through WebDAV.\n"
" This installs the module document_webdav." " This installs the module document_webdav."
msgstr "" msgstr ""
"Az OpenERP dokumentumok WebDAV-on keresztüli elérése.\n"
" Ez a document_webdav modult telepíti."
#. module: knowledge #. module: knowledge
#: help:knowledge.config.settings,module_document_page:0 #: help:knowledge.config.settings,module_document_page:0
msgid "This installs the module document_page." msgid "This installs the module document_page."
msgstr "" msgstr "Ez a document_page modult telepíti."
#. module: knowledge #. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document2 #: 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 #: model:ir.actions.act_window,name:knowledge.action_knowledge_configuration
#: view:knowledge.config.settings:0 #: view:knowledge.config.settings:0
msgid "Configure Knowledge" msgid "Configure Knowledge"
msgstr "" msgstr "Tudástár beállítása"
#. module: knowledge #. module: knowledge
#: view:knowledge.config.settings:0 #: view:knowledge.config.settings:0
msgid "Knowledge and Documents Management" msgid "Knowledge and Documents Management"
msgstr "" msgstr "Tudástár és dokumentum kezelés"
#. module: knowledge #. module: knowledge
#: help:knowledge.config.settings,module_document:0 #: help:knowledge.config.settings,module_document:0
@ -62,31 +64,36 @@ msgid ""
"and a document dashboard.\n" "and a document dashboard.\n"
" This installs the module document." " This installs the module document."
msgstr "" 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 #. module: knowledge
#: field:knowledge.config.settings,module_document_page:0 #: field:knowledge.config.settings,module_document_page:0
msgid "Create static web pages" msgid "Create static web pages"
msgstr "" msgstr "Statikus weboldalak készítése"
#. module: knowledge #. module: knowledge
#: field:knowledge.config.settings,module_document_ftp:0 #: field:knowledge.config.settings,module_document_ftp:0
msgid "Share repositories (FTP)" msgid "Share repositories (FTP)"
msgstr "" msgstr "Elérési út (FTP) megosztás"
#. module: knowledge #. module: knowledge
#: field:knowledge.config.settings,module_document:0 #: field:knowledge.config.settings,module_document:0
msgid "Manage documents" msgid "Manage documents"
msgstr "" msgstr "Dokumentum kezelés"
#. module: knowledge #. module: knowledge
#: view:knowledge.config.settings:0 #: view:knowledge.config.settings:0
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "Mégsem"
#. module: knowledge #. module: knowledge
#: view:knowledge.config.settings:0 #: view:knowledge.config.settings:0
msgid "Apply" msgid "Apply"
msgstr "" msgstr "Alkalmaz"
#. module: knowledge #. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document_configuration #: model:ir.ui.menu,name:knowledge.menu_document_configuration
@ -99,16 +106,18 @@ msgid ""
"Access your documents in OpenERP through an FTP interface.\n" "Access your documents in OpenERP through an FTP interface.\n"
" This installs the module document_ftp." " This installs the module document_ftp."
msgstr "" msgstr ""
"Az OpenERP dokumentumok elérése egy FTP csatolón keresztül.\n"
" Ez a document_ftp modult telepíti."
#. module: knowledge #. module: knowledge
#: view:knowledge.config.settings:0 #: view:knowledge.config.settings:0
msgid "or" msgid "or"
msgstr "" msgstr "vagy"
#. module: knowledge #. module: knowledge
#: field:knowledge.config.settings,module_document_webdav:0 #: field:knowledge.config.settings,module_document_webdav:0
msgid "Share repositories (WebDAV)" msgid "Share repositories (WebDAV)"
msgstr "" msgstr "Elérési útvonal (webDAV) megosztás"
#. module: knowledge #. module: knowledge
#: model:ir.ui.menu,name:knowledge.menu_document #: 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.tools.translate import _
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp import netsvc
import openerp.addons.decimal_precision as dp import openerp.addons.decimal_precision as dp
DATETIME_FORMAT = "%Y-%m-%d" DATETIME_FORMAT = "%Y-%m-%d"
@ -179,7 +178,6 @@ class hr_payslip_run(osv.osv):
return res return res
def create_advice(self, cr, uid, ids, context=None): def create_advice(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
payslip_pool = self.pool.get('hr.payslip') payslip_pool = self.pool.get('hr.payslip')
payslip_line_pool = self.pool.get('hr.payslip.line') payslip_line_pool = self.pool.get('hr.payslip.line')
advice_pool = self.pool.get('hr.payroll.advice') 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) advice_id = advice_pool.create(cr, uid, advice_data, context=context)
slip_ids = [] slip_ids = []
for slip_id in run.slip_ids: for slip_id in run.slip_ids:
wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'hr_verify_sheet', cr) # TODO is it necessary to interleave the calls ?
wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'process_sheet', cr) 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) slip_ids.append(slip_id.id)
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context): 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): def specific_function(cr, uid, ids, context=None):
return self.add_preference(cr, uid, ids, pref_id, context=context) return self.add_preference(cr, uid, ids, pref_id, context=context)
return specific_function 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): 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" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:04+0000\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" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\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" "X-Generator: Launchpad (build 16491)\n"
#. module: mail #. module: mail
@ -906,12 +906,12 @@ msgstr "Alcsoportba rakott üzenetek"
#. module: mail #. module: mail
#: field:mail.alias,alias_user_id:0 #: field:mail.alias,alias_user_id:0
msgid "Owner" msgid "Owner"
msgstr "" msgstr "Tulajdonos"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_res_users #: model:ir.model,name:mail.model_res_users
msgid "Users" msgid "Users"
msgstr "" msgstr "Felhasználók"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_mail_message #: model:ir.model,name:mail.model_mail_message
@ -920,25 +920,25 @@ msgstr ""
#: field:mail.notification,message_id:0 #: field:mail.notification,message_id:0
#: field:mail.wizard.invite,message:0 #: field:mail.wizard.invite,message:0
msgid "Message" msgid "Message"
msgstr "" msgstr "Üzenet"
#. module: mail #. module: mail
#: help:mail.followers,res_id:0 #: help:mail.followers,res_id:0
#: help:mail.wizard.invite,res_id:0 #: help:mail.wizard.invite,res_id:0
msgid "Id of the followed resource" msgid "Id of the followed resource"
msgstr "" msgstr "A követett forrás ID azonosítója"
#. module: mail #. module: mail
#: field:mail.compose.message,body:0 #: field:mail.compose.message,body:0
#: field:mail.message,body:0 #: field:mail.message,body:0
msgid "Contents" msgid "Contents"
msgstr "" msgstr "Tartalmak"
#. module: mail #. module: mail
#: model:ir.actions.act_window,name:mail.action_view_mail_alias #: model:ir.actions.act_window,name:mail.action_view_mail_alias
#: model:ir.ui.menu,name:mail.mail_alias_menu #: model:ir.ui.menu,name:mail.mail_alias_menu
msgid "Aliases" msgid "Aliases"
msgstr "" msgstr "Álnevek"
#. module: mail #. module: mail
#: help:mail.message.subtype,description:0 #: help:mail.message.subtype,description:0
@ -946,40 +946,44 @@ msgid ""
"Description that will be added in the message posted for this subtype. If " "Description that will be added in the message posted for this subtype. If "
"void, the name will be added instead." "void, the name will be added instead."
msgstr "" 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 #. module: mail
#: field:mail.compose.message,vote_user_ids:0 #: field:mail.compose.message,vote_user_ids:0
#: field:mail.message,vote_user_ids:0 #: field:mail.message,vote_user_ids:0
msgid "Votes" msgid "Votes"
msgstr "" msgstr "Szavazatok"
#. module: mail #. module: mail
#: view:mail.group:0 #: view:mail.group:0
msgid "Group" msgid "Group"
msgstr "" msgstr "Csoport"
#. module: mail #. module: mail
#: help:mail.compose.message,starred:0 #: help:mail.compose.message,starred:0
#: help:mail.message,starred:0 #: help:mail.message,starred:0
msgid "Current user has a starred notification linked to this message" msgid "Current user has a starred notification linked to this message"
msgstr "" msgstr ""
"A jelenlegi felhasználónak van egy kicsillagozott értesítése mely hozzá van "
"rendelve az üzenethez."
#. module: mail #. module: mail
#: field:mail.group,public:0 #: field:mail.group,public:0
msgid "Privacy" msgid "Privacy"
msgstr "" msgstr "Adatvédelem"
#. module: mail #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
msgid "Notification" msgid "Notification"
msgstr "" msgstr "Értesítés"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/js/mail.js:585 #: code:addons/mail/static/src/js/mail.js:585
#, python-format #, python-format
msgid "Please complete partner's informations" msgid "Please complete partner's informations"
msgstr "" msgstr "Kérem egészítse ki a partner információkat"
#. module: mail #. module: mail
#: view:mail.wizard.invite:0 #: view:mail.wizard.invite:0
@ -994,7 +998,7 @@ msgstr "A kijelölt elemek követői és"
#. module: mail #. module: mail
#: field:mail.alias,alias_force_thread_id:0 #: field:mail.alias,alias_force_thread_id:0
msgid "Record Thread ID" msgid "Record Thread ID"
msgstr "" msgstr "Összefűzési azonosító ID elmentése"
#. module: mail #. module: mail
#: model:ir.ui.menu,name:mail.mail_group_root #: model:ir.ui.menu,name:mail.mail_group_root
@ -1013,12 +1017,21 @@ msgid ""
" </p>\n" " </p>\n"
" " " "
msgstr "" 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 #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
#: field:mail.mail,state:0 #: field:mail.mail,state:0
msgid "Status" msgid "Status"
msgstr "" msgstr "Állapot"
#. module: mail #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
@ -1029,13 +1042,13 @@ msgstr "Kimenő"
#. module: mail #. module: mail
#: selection:res.partner,notification_email_send:0 #: selection:res.partner,notification_email_send:0
msgid "All feeds" msgid "All feeds"
msgstr "" msgstr "Összes betáplálás"
#. module: mail #. module: mail
#: help:mail.compose.message,record_name:0 #: help:mail.compose.message,record_name:0
#: help:mail.message,record_name:0 #: help:mail.message,record_name:0
msgid "Name get of the related document." msgid "Name get of the related document."
msgstr "" msgstr "A név az ide vonatkozó dokumentumról levéve."
#. module: mail #. module: mail
#: model:ir.actions.act_window,name:mail.action_view_notifications #: model:ir.actions.act_window,name:mail.action_view_notifications
@ -1046,12 +1059,12 @@ msgstr ""
#: field:mail.message,notification_ids:0 #: field:mail.message,notification_ids:0
#: view:mail.notification:0 #: view:mail.notification:0
msgid "Notifications" msgid "Notifications"
msgstr "" msgstr "Értesítések"
#. module: mail #. module: mail
#: view:mail.alias:0 #: view:mail.alias:0
msgid "Search Alias" msgid "Search Alias"
msgstr "" msgstr "Álnév keresés"
#. module: mail #. module: mail
#: help:mail.alias,alias_force_thread_id:0 #: 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 " "attached, even if they did not reply to it. If set, this will disable the "
"creation of new records completely." "creation of new records completely."
msgstr "" 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 #. module: mail
#: help:mail.message.subtype,name:0 #: help:mail.message.subtype,name:0
@ -1070,28 +1086,33 @@ msgid ""
"subtypes allow to precisely tune the notifications the user want to receive " "subtypes allow to precisely tune the notifications the user want to receive "
"on its wall." "on its wall."
msgstr "" 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 #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
msgid "by" msgid "by"
msgstr "" msgstr "által"
#. module: mail #. module: mail
#: model:mail.group,name:mail.group_best_sales_practices #: model:mail.group,name:mail.group_best_sales_practices
msgid "Best Sales Practices" msgid "Best Sales Practices"
msgstr "" msgstr "Legjobb Értékesítési Praktikák"
#. module: mail #. module: mail
#: selection:mail.group,public:0 #: selection:mail.group,public:0
msgid "Selected Group Only" msgid "Selected Group Only"
msgstr "" msgstr "Csak a kiválasztott csoport"
#. module: mail #. module: mail
#: field:mail.group,message_is_follower:0 #: field:mail.group,message_is_follower:0
#: field:mail.thread,message_is_follower:0 #: field:mail.thread,message_is_follower:0
#: field:res.partner,message_is_follower:0 #: field:res.partner,message_is_follower:0
msgid "Is a Follower" msgid "Is a Follower"
msgstr "" msgstr "Ez egy követő"
#. module: mail #. module: mail
#: view:mail.alias:0 #: view:mail.alias:0
@ -1102,12 +1123,12 @@ msgstr "Felhasználó"
#. module: mail #. module: mail
#: view:mail.group:0 #: view:mail.group:0
msgid "Groups" msgid "Groups"
msgstr "" msgstr "Csoportok"
#. module: mail #. module: mail
#: view:mail.message:0 #: view:mail.message:0
msgid "Messages Search" msgid "Messages Search"
msgstr "" msgstr "Üzenetek keresése"
#. module: mail #. module: mail
#: field:mail.compose.message,date:0 #: field:mail.compose.message,date:0
@ -1144,19 +1165,19 @@ msgstr "Bejegyzés írás a követőimnek"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_res_groups #: model:ir.model,name:mail.model_res_groups
msgid "Access Groups" msgid "Access Groups"
msgstr "" msgstr "Csoportok hozzáférése"
#. module: mail #. module: mail
#: field:mail.message.subtype,default:0 #: field:mail.message.subtype,default:0
msgid "Default" msgid "Default"
msgstr "" msgstr "Alapértelmezett"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:260 #: code:addons/mail/static/src/xml/mail.xml:260
#, python-format #, python-format
msgid "show more message" msgid "show more message"
msgstr "" msgstr "mutassa a többi üzenetet"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
@ -1168,25 +1189,27 @@ msgstr "Megjelölés feladatkét"
#. module: mail #. module: mail
#: help:mail.message.subtype,parent_id:0 #: help:mail.message.subtype,parent_id:0
msgid "Parent subtype, used for automatic subscription." msgid "Parent subtype, used for automatic subscription."
msgstr "" msgstr "Szülő altípus, ami automatikus feliratkozáshoz használt."
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_mail_wizard_invite #: model:ir.model,name:mail.model_mail_wizard_invite
msgid "Invite wizard" msgid "Invite wizard"
msgstr "" msgstr "Meghívó varázsló"
#. module: mail #. module: mail
#: field:mail.group,message_summary:0 #: field:mail.group,message_summary:0
#: field:mail.thread,message_summary:0 #: field:mail.thread,message_summary:0
#: field:res.partner,message_summary:0 #: field:res.partner,message_summary:0
msgid "Summary" msgid "Summary"
msgstr "" msgstr "Összegzés"
#. module: mail #. module: mail
#: help:mail.message.subtype,res_model:0 #: help:mail.message.subtype,res_model:0
msgid "" msgid ""
"Model the subtype applies to. If False, this subtype applies to all models." "Model the subtype applies to. If False, this subtype applies to all models."
msgstr "" msgstr ""
"Az altípushoz alkalmazott minta. Ha téves, akkor ez az altípus lesz "
"használva az összes mintához."
#. module: mail #. module: mail
#: field:mail.compose.message,subtype_id:0 #: field:mail.compose.message,subtype_id:0
@ -1194,32 +1217,32 @@ msgstr ""
#: field:mail.message,subtype_id:0 #: field:mail.message,subtype_id:0
#: view:mail.message.subtype:0 #: view:mail.message.subtype:0
msgid "Subtype" msgid "Subtype"
msgstr "" msgstr "Altípus"
#. module: mail #. module: mail
#: view:mail.group:0 #: view:mail.group:0
msgid "Group Form" msgid "Group Form"
msgstr "" msgstr "Csoport űrlap"
#. module: mail #. module: mail
#: field:mail.compose.message,starred:0 #: field:mail.compose.message,starred:0
#: field:mail.message,starred:0 #: field:mail.message,starred:0
#: field:mail.notification,starred:0 #: field:mail.notification,starred:0
msgid "Starred" msgid "Starred"
msgstr "" msgstr "Csillagozott"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:262 #: code:addons/mail/static/src/xml/mail.xml:262
#, python-format #, python-format
msgid "more messages" msgid "more messages"
msgstr "" msgstr "több üzenet"
#. module: mail #. module: mail
#: code:addons/mail/update.py:93 #: code:addons/mail/update.py:93
#, python-format #, python-format
msgid "Error" msgid "Error"
msgstr "" msgstr "Hiba"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
@ -1233,6 +1256,7 @@ msgstr "Követés"
msgid "" msgid ""
"Unfortunately this email alias is already used, please choose a unique one" "Unfortunately this email alias is already used, please choose a unique one"
msgstr "" msgstr ""
"Sajnos ez az email álnév már használva van, kérem válasszon egy egyedit."
#. module: mail #. module: mail
#: help:mail.alias,alias_user_id:0 #: help:mail.alias,alias_user_id:0
@ -1242,19 +1266,24 @@ msgid ""
"the sender (From) address, or will use the Administrator account if no " "the sender (From) address, or will use the Administrator account if no "
"system user is found for that address." "system user is found for that address."
msgstr "" 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 #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail_followers.xml:52 #: code:addons/mail/static/src/xml/mail_followers.xml:52
#, python-format #, python-format
msgid "And" msgid "And"
msgstr "" msgstr "És"
#. module: mail #. module: mail
#: field:mail.compose.message,message_id:0 #: field:mail.compose.message,message_id:0
#: field:mail.message,message_id:0 #: field:mail.message,message_id:0
msgid "Message-Id" msgid "Message-Id"
msgstr "" msgstr "Üzenet-ID azonosító"
#. module: mail #. module: mail
#: help:mail.group,image:0 #: help:mail.group,image:0
@ -1262,6 +1291,7 @@ msgid ""
"This field holds the image used as photo for the group, limited to " "This field holds the image used as photo for the group, limited to "
"1024x1024px." "1024x1024px."
msgstr "" msgstr ""
"Ez a mező a képet tárolja amit a csoporthoz használ, limitálva 1024x1024px."
#. module: mail #. module: mail
#: field:mail.compose.message,attachment_ids:0 #: field:mail.compose.message,attachment_ids:0
@ -1274,7 +1304,7 @@ msgstr "Mellékletek"
#: field:mail.compose.message,record_name:0 #: field:mail.compose.message,record_name:0
#: field:mail.message,record_name:0 #: field:mail.message,record_name:0
msgid "Message Record Name" msgid "Message Record Name"
msgstr "" msgstr "Üzenet rekord név"
#. module: mail #. module: mail
#: field:mail.mail,email_cc:0 #: field:mail.mail,email_cc:0
@ -1284,7 +1314,7 @@ msgstr "Másolat"
#. module: mail #. module: mail
#: help:mail.notification,starred:0 #: help:mail.notification,starred:0
msgid "Starred message that goes into the todo mailbox" msgid "Starred message that goes into the todo mailbox"
msgstr "" msgstr "Csillagos üzenet amely a teendők levélládába megy"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
@ -1292,24 +1322,25 @@ msgstr ""
#: view:mail.compose.message:0 #: view:mail.compose.message:0
#, python-format #, python-format
msgid "Followers of" msgid "Followers of"
msgstr "" msgstr "Követők ehhez"
#. module: mail #. module: mail
#: help:mail.mail,auto_delete:0 #: help:mail.mail,auto_delete:0
msgid "Permanently delete this email after sending it, to save space" msgid "Permanently delete this email after sending it, to save space"
msgstr "" msgstr ""
"Tartósan törli ezt az üzenetet az elküldés után, hely felszabadítása miatt"
#. module: mail #. module: mail
#: model:ir.actions.client,name:mail.action_mail_group_feeds #: model:ir.actions.client,name:mail.action_mail_group_feeds
msgid "Discussion Group" msgid "Discussion Group"
msgstr "" msgstr "Megbeszélés csoport"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:224 #: code:addons/mail/static/src/xml/mail.xml:224
#, python-format #, python-format
msgid "Done" msgid "Done"
msgstr "" msgstr "Kész"
#. module: mail #. module: mail
#: model:mail.message.subtype,name:mail.mt_comment #: model:mail.message.subtype,name:mail.mt_comment
@ -1326,7 +1357,7 @@ msgstr "Követ"
#. module: mail #. module: mail
#: field:mail.group,name:0 #: field:mail.group,name:0
msgid "Name" msgid "Name"
msgstr "" msgstr "Név"
#. module: mail #. module: mail
#: model:mail.group,name:mail.group_all_employees #: model:mail.group,name:mail.group_all_employees
@ -1339,45 +1370,45 @@ msgstr "Teljes vállalat"
#: view:mail.compose.message:0 #: view:mail.compose.message:0
#, python-format #, python-format
msgid "and" msgid "and"
msgstr "" msgstr "és"
#. module: mail #. module: mail
#: help:mail.mail,body_html:0 #: help:mail.mail,body_html:0
msgid "Rich-text/HTML message" msgid "Rich-text/HTML message"
msgstr "" msgstr "Rich-text/HTML üzenet"
#. module: mail #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
msgid "Creation Month" msgid "Creation Month"
msgstr "" msgstr "Létrehozás hónapja"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:272 #: code:addons/mail/static/src/xml/mail.xml:272
#, python-format #, python-format
msgid "Compose new Message" msgid "Compose new Message"
msgstr "" msgstr "Új üzenet létrehozása"
#. module: mail #. module: mail
#: field:mail.group,menu_id:0 #: field:mail.group,menu_id:0
msgid "Related Menu" msgid "Related Menu"
msgstr "" msgstr "Kapcsolódó menü"
#. module: mail #. module: mail
#: view:mail.message:0 #: view:mail.message:0
msgid "Content" msgid "Content"
msgstr "" msgstr "Tartalom"
#. module: mail #. module: mail
#: field:mail.mail,email_to:0 #: field:mail.mail,email_to:0
msgid "To" msgid "To"
msgstr "" msgstr "Címzett"
#. module: mail #. module: mail
#: field:mail.compose.message,notified_partner_ids:0 #: field:mail.compose.message,notified_partner_ids:0
#: field:mail.message,notified_partner_ids:0 #: field:mail.message,notified_partner_ids:0
msgid "Notified partners" msgid "Notified partners"
msgstr "" msgstr "Értesített partnerek"
#. module: mail #. module: mail
#: help:mail.group,public:0 #: help:mail.group,public:0
@ -1385,11 +1416,13 @@ msgid ""
"This group is visible by non members. Invisible groups can add " "This group is visible by non members. Invisible groups can add "
"members through the invite button." "members through the invite button."
msgstr "" msgstr ""
"Ez a csoport azoknak is látható akik nem tagok. A nem látható csoportok "
"tagokat adhatnak a meghívó gombbal."
#. module: mail #. module: mail
#: model:mail.group,name:mail.group_board #: model:mail.group,name:mail.group_board
msgid "Board meetings" msgid "Board meetings"
msgstr "" msgstr "Tanácskozás"
#. module: mail #. module: mail
#: constraint:mail.alias:0 #: constraint:mail.alias:0
@ -1397,40 +1430,42 @@ msgid ""
"Invalid expression, it must be a literal python dictionary definition e.g. " "Invalid expression, it must be a literal python dictionary definition e.g. "
"\"{'field': 'value'}\"" "\"{'field': 'value'}\""
msgstr "" msgstr ""
"Nem érvényes kifejezés, ennek python szótár kifejezésnek kell lennie pl.: "
"\"{'field': 'value'}\""
#. module: mail #. module: mail
#: field:mail.alias,alias_model_id:0 #: field:mail.alias,alias_model_id:0
msgid "Aliased Model" msgid "Aliased Model"
msgstr "" msgstr "Minta álnév"
#. module: mail #. module: mail
#: help:mail.compose.message,message_id:0 #: help:mail.compose.message,message_id:0
#: help:mail.message,message_id:0 #: help:mail.message,message_id:0
msgid "Message unique identifier" msgid "Message unique identifier"
msgstr "" msgstr "Üzenet egyedi azonosító"
#. module: mail #. module: mail
#: field:mail.group,description:0 #: field:mail.group,description:0
#: field:mail.message.subtype,description:0 #: field:mail.message.subtype,description:0
msgid "Description" msgid "Description"
msgstr "" msgstr "Leírás"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_mail_followers #: model:ir.model,name:mail.model_mail_followers
msgid "Document Followers" msgid "Document Followers"
msgstr "" msgstr "Követők dokumentuma"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail_followers.xml:35 #: code:addons/mail/static/src/xml/mail_followers.xml:35
#, python-format #, python-format
msgid "Remove this follower" msgid "Remove this follower"
msgstr "" msgstr "Követő eltávolítása"
#. module: mail #. module: mail
#: selection:res.partner,notification_email_send:0 #: selection:res.partner,notification_email_send:0
msgid "Never" msgid "Never"
msgstr "" msgstr "Soha"
#. module: mail #. module: mail
#: field:mail.mail,mail_server_id:0 #: field:mail.mail,mail_server_id:0
@ -1441,7 +1476,7 @@ msgstr "Kimenő levelező szerver"
#: code:addons/mail/mail_message.py:920 #: code:addons/mail/mail_message.py:920
#, python-format #, python-format
msgid "Partners email addresses not found" msgid "Partners email addresses not found"
msgstr "" msgstr "A partnerek e-mail címei nem találhatóak"
#. module: mail #. module: mail
#: view:mail.mail:0 #: view:mail.mail:0
@ -1452,19 +1487,21 @@ msgstr "Elküldött"
#. module: mail #. module: mail
#: field:mail.mail,body_html:0 #: field:mail.mail,body_html:0
msgid "Rich-text Contents" msgid "Rich-text Contents"
msgstr "" msgstr "Rich-text tartalmak"
#. module: mail #. module: mail
#: help:mail.compose.message,to_read:0 #: help:mail.compose.message,to_read:0
#: help:mail.message,to_read:0 #: help:mail.message,to_read:0
msgid "Current user has an unread notification linked to this message" msgid "Current user has an unread notification linked to this message"
msgstr "" msgstr ""
"A jelenlegi felhasználónak van egy olvasatlan értesítése ehhez az üzenethez "
"csatolva"
#. module: mail #. module: mail
#: help:res.partner,notification_email_send:0 #: help:res.partner,notification_email_send:0
msgid "" msgid ""
"Choose in which case you want to receive an email when you receive new feeds." "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 #. module: mail
#: model:ir.actions.act_window,name:mail.action_view_groups #: model:ir.actions.act_window,name:mail.action_view_groups
@ -1480,13 +1517,17 @@ msgid ""
" </p>\n" " </p>\n"
" " " "
msgstr "" msgstr ""
"<p>\n"
" nincs üzenete ebben a csoportban.\n"
" </p>\n"
" "
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:195 #: code:addons/mail/static/src/xml/mail.xml:195
#, python-format #, python-format
msgid "Please, wait while the file is uploading." msgid "Please, wait while the file is uploading."
msgstr "" msgstr "Kérem várjon amíg a fájl feltöltődik."
#. module: mail #. module: mail
#: view:mail.group:0 #: view:mail.group:0
@ -1496,6 +1537,9 @@ msgid ""
"installed\n" "installed\n"
" the portal module." " the portal module."
msgstr "" msgstr ""
"Ez a csoport mindenki számára látható,\n"
" az ügyfeleinek is, ha telepítette a\n"
" portal modult."
#. module: mail #. module: mail
#. openerp-web #. openerp-web
@ -1509,17 +1553,17 @@ msgstr "Visszahelyezés a feladatokhoz"
#: code:addons/mail/static/src/xml/mail.xml:113 #: code:addons/mail/static/src/xml/mail.xml:113
#, python-format #, python-format
msgid "this document" msgid "this document"
msgstr "" msgstr "ez a dokumentum"
#. module: mail #. module: mail
#: field:mail.compose.message,filter_id:0 #: field:mail.compose.message,filter_id:0
msgid "Filters" msgid "Filters"
msgstr "" msgstr "Szűrők"
#. module: mail #. module: mail
#: field:res.partner,notification_email_send:0 #: field:res.partner,notification_email_send:0
msgid "Receive Feeds by Email" msgid "Receive Feeds by Email"
msgstr "" msgstr "Új hozzászólások e-mailen fogadva"
#. module: mail #. module: mail
#: help:base.config.settings,alias_domain:0 #: 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, " "If you have setup a catch-all email domain redirected to the OpenERP server, "
"enter the domain name here." "enter the domain name here."
msgstr "" 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 #. module: mail
#: model:ir.actions.act_window,name:mail.action_view_mail_message #: 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 #: code:addons/mail/static/src/xml/mail.xml:126
#, python-format #, python-format
msgid "others..." msgid "others..."
msgstr "" msgstr "mások..."
#. module: mail #. module: mail
#: model:ir.actions.client,name:mail.action_mail_star_feeds #: model:ir.actions.client,name:mail.action_mail_star_feeds
@ -1557,12 +1603,12 @@ msgstr "Feladat"
#: field:mail.group,alias_id:0 #: field:mail.group,alias_id:0
#: field:res.users,alias_id:0 #: field:res.users,alias_id:0
msgid "Alias" msgid "Alias"
msgstr "" msgstr "Álnév"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_mail_mail #: model:ir.model,name:mail.model_mail_mail
msgid "Outgoing Mails" msgid "Outgoing Mails"
msgstr "" msgstr "Elküldött levelek"
#. module: mail #. module: mail
#: help:mail.compose.message,notification_ids:0 #: help:mail.compose.message,notification_ids:0
@ -1571,6 +1617,8 @@ msgid ""
"Technical field holding the message notifications. Use notified_partner_ids " "Technical field holding the message notifications. Use notified_partner_ids "
"to access notified partners." "to access notified partners."
msgstr "" 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 #. module: mail
#: model:ir.ui.menu,name:mail.mail_feeds #: model:ir.ui.menu,name:mail.mail_feeds
@ -1582,12 +1630,12 @@ msgstr "Üzenetek"
#: view:mail.alias:0 #: view:mail.alias:0
#: field:mail.message.subtype,res_model:0 #: field:mail.message.subtype,res_model:0
msgid "Model" msgid "Model"
msgstr "" msgstr "Modell"
#. module: mail #. module: mail
#: view:mail.message:0 #: view:mail.message:0
msgid "Unread" msgid "Unread"
msgstr "" msgstr "Olvasatlan"
#. module: mail #. module: mail
#: help:mail.followers,subtype_ids:0 #: help:mail.followers,subtype_ids:0
@ -1595,23 +1643,25 @@ msgid ""
"Message subtypes followed, meaning subtypes that will be pushed onto the " "Message subtypes followed, meaning subtypes that will be pushed onto the "
"user's Wall." "user's Wall."
msgstr "" msgstr ""
"Üzenet altípus követve, azt jelenti, hogy az altípus ki lesz rakva a "
"felhasználó üzenőfalára."
#. module: mail #. module: mail
#: help:mail.group,message_ids:0 #: help:mail.group,message_ids:0
#: help:mail.thread,message_ids:0 #: help:mail.thread,message_ids:0
#: help:res.partner,message_ids:0 #: help:res.partner,message_ids:0
msgid "Messages and communication history" msgid "Messages and communication history"
msgstr "" msgstr "Üzenetek és kommunikáció történet"
#. module: mail #. module: mail
#: help:mail.mail,references:0 #: help:mail.mail,references:0
msgid "Message references, such as identifiers of previous messages" msgid "Message references, such as identifiers of previous messages"
msgstr "" msgstr "Üzenet hivatkozások, mint előző üzenetek azonosítói"
#. module: mail #. module: mail
#: field:mail.compose.message,composition_mode:0 #: field:mail.compose.message,composition_mode:0
msgid "Composition mode" msgid "Composition mode"
msgstr "" msgstr "Összeállítási mód"
#. module: mail #. module: mail
#: field:mail.compose.message,model:0 #: field:mail.compose.message,model:0
@ -1619,14 +1669,14 @@ msgstr ""
#: field:mail.message,model:0 #: field:mail.message,model:0
#: field:mail.wizard.invite,res_model:0 #: field:mail.wizard.invite,res_model:0
msgid "Related Document Model" msgid "Related Document Model"
msgstr "" msgstr "Ide vonatkozó dokumentum modell"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:287 #: code:addons/mail/static/src/xml/mail.xml:287
#, python-format #, python-format
msgid "unlike" msgid "unlike"
msgstr "" msgstr "nem valószínű"
#. module: mail #. module: mail
#: help:mail.compose.message,author_id:0 #: 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 " "Author of the message. If not set, email_from may hold an email address that "
"did not match any partner." "did not match any partner."
msgstr "" 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 #. module: mail
#: help:mail.mail,email_cc:0 #: help:mail.mail,email_cc:0
msgid "Carbon copy message recipients" msgid "Carbon copy message recipients"
msgstr "" msgstr "Üzenet másolat címzettjei"
#. module: mail #. module: mail
#: field:mail.alias,alias_domain:0 #: field:mail.alias,alias_domain:0
msgid "Alias domain" msgid "Alias domain"
msgstr "" msgstr "Álénév domain"
#. module: mail #. module: mail
#: code:addons/mail/update.py:93 #: code:addons/mail/update.py:93
#, python-format #, python-format
msgid "Error during communication with the publisher warranty server." 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 #. module: mail
#: selection:mail.group,public:0 #: selection:mail.group,public:0
@ -1670,32 +1722,41 @@ msgid ""
" </p>\n" " </p>\n"
" " " "
msgstr "" 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 #. module: mail
#: selection:mail.mail,state:0 #: selection:mail.mail,state:0
msgid "Delivery Failed" msgid "Delivery Failed"
msgstr "" msgstr "Küldés sikertelen"
#. module: mail #. module: mail
#: field:mail.compose.message,partner_ids:0 #: field:mail.compose.message,partner_ids:0
msgid "Additional contacts" msgid "Additional contacts"
msgstr "" msgstr "További kapcsolatok"
#. module: mail #. module: mail
#: help:mail.compose.message,parent_id:0 #: help:mail.compose.message,parent_id:0
#: help:mail.message,parent_id:0 #: help:mail.message,parent_id:0
msgid "Initial thread message." msgid "Initial thread message."
msgstr "" msgstr "Elsődleges összefűzött üzenet."
#. module: mail #. module: mail
#: model:mail.group,name:mail.group_hr_policies #: model:mail.group,name:mail.group_hr_policies
msgid "HR Policies" msgid "HR Policies"
msgstr "" msgstr "HR Emberi erőforrás menedzsment házirend"
#. module: mail #. module: mail
#: selection:res.partner,notification_email_send:0 #: selection:res.partner,notification_email_send:0
msgid "Emails only" msgid "Emails only"
msgstr "" msgstr "Kizárólag e-mailek"
#. module: mail #. module: mail
#: model:ir.actions.client,name:mail.action_mail_inbox_feeds #: 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 #: code:addons/mail/static/src/xml/mail.xml:58
#, python-format #, python-format
msgid "File" msgid "File"
msgstr "" msgstr "Fájl"
#. module: mail #. module: mail
#. openerp-web #. openerp-web
#: code:addons/mail/static/src/js/many2many_tags_email.js:63 #: code:addons/mail/static/src/js/many2many_tags_email.js:63
#, python-format #, python-format
msgid "Please complete partner's informations and Email" 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 #. module: mail
#: model:ir.actions.act_window,name:mail.action_view_message_subtype #: model:ir.actions.act_window,name:mail.action_view_message_subtype
#: model:ir.ui.menu,name:mail.menu_message_subtype #: model:ir.ui.menu,name:mail.menu_message_subtype
msgid "Subtypes" msgid "Subtypes"
msgstr "" msgstr "Altípusok"
#. module: mail #. module: mail
#: model:ir.model,name:mail.model_mail_alias #: model:ir.model,name:mail.model_mail_alias
msgid "Email Aliases" msgid "Email Aliases"
msgstr "" msgstr "e-amil álnevek"
#. module: mail #. module: mail
#: field:mail.group,image_small:0 #: field:mail.group,image_small:0
msgid "Small-sized photo" msgid "Small-sized photo"
msgstr "" msgstr "Kis-méretű fotó"
#. module: mail #. module: mail
#: help:mail.mail,reply_to:0 #: help:mail.mail,reply_to:0
msgid "Preferred response address for the message" msgid "Preferred response address for the message"
msgstr "" msgstr "Előnyben részesített válasz cím ehhez az üzenethez"
#~ msgid "Open Attachments" #~ msgid "Open Attachments"
#~ msgstr "Mellékletek megnyitása" #~ 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) 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 # 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 = 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']}) for attachment in attachments) attachments_tree = dict((attachment['id'], {'id': attachment['id'], 'filename': attachment['datas_fname'], 'name': attachment['name']}) for attachment in attachments)
# 3. Update message dictionaries # 3. Update message dictionaries
for message_dict in messages: for message_dict in messages:

View File

@ -774,7 +774,7 @@ class mail_thread(osv.AbstractModel):
msg_dict['author_id'] = author_ids[0] msg_dict['author_id'] = author_ids[0]
else: else:
msg_dict['email_from'] = message.get('from') 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] msg_dict['partner_ids'] = [(4, partner_id) for partner_id in partner_ids]
if 'Date' in message: 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 // returns the file type of a file based on its extension
// As it only looks at the extension it is quite approximative. // As it only looks at the extension it is quite approximative.
filetype: function(url){ filetype: function(url){
url = url.filename || url; var url = url && url.filename || url;
var tokens = (url+'').split('.'); var tokens = typeof url == 'string' ? url.split('.') : [];
if(tokens.length <= 1){ if(tokens.length <= 1){
return 'unknown'; return 'unknown';
} }

View File

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

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n" "Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2011-01-21 15:22+0000\n" "PO-Revision-Date: 2013-02-13 12:33+0000\n"
"Last-Translator: Krisztian Eyssen <krisz@eyssen.hu>\n" "Last-Translator: krnkris <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 05:59+0000\n" "X-Launchpad-Export-Date: 2013-02-14 04:37+0000\n"
"X-Generator: Launchpad (build 16378)\n" "X-Generator: Launchpad (build 16491)\n"
#. module: marketing_campaign_crm_demo #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_8 #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_8
@ -28,6 +28,14 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report #: 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 #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_8 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_8
msgid "Thanks for subscribing to technical training" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_3 #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_3
@ -49,6 +57,12 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: report:crm.lead.demo:0 #: report:crm.lead.demo:0
@ -58,7 +72,7 @@ msgstr "Vállalat :"
#. module: marketing_campaign_crm_demo #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_4 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_4
msgid "Thanks for buying the OpenERP book" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_6 #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_6
@ -71,16 +85,23 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_1 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_1
msgid "Thanks for showing interest in OpenERP" 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 #. module: marketing_campaign_crm_demo
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy #: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
msgid "Dummy Action" msgid "Dummy Action"
msgstr "" msgstr "Látszólagos művelet"
#. module: marketing_campaign_crm_demo #. module: marketing_campaign_crm_demo
#: report:crm.lead.demo:0 #: report:crm.lead.demo:0
@ -98,6 +119,13 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_5 #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_5
@ -110,26 +138,33 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_2 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_2
msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_3 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_3
msgid "Thanks for subscribing to the OpenERP Discovery Day" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_7 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_7
msgid "Propose gold partnership to silver partners" msgid "Propose gold partnership to silver partners"
msgstr "" msgstr "Javasolja az arany partner tagságot az ezüst tagoknak"
#. module: marketing_campaign_crm_demo #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_6 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_6
msgid "Propose paid training to Silver partners" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_4 #: 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" " If any further information required kindly revert back.\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_7 #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_7
@ -150,11 +191,17 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,subject:marketing_campaign_crm_demo.email_template_5 #: model:email.template,subject:marketing_campaign_crm_demo.email_template_5
msgid "Propose a free technical training to Gold partners" 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 #. module: marketing_campaign_crm_demo
#: model:email.template,body_html:marketing_campaign_crm_demo.email_template_1 #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_1
@ -166,3 +213,8 @@ msgid ""
"reply to this message.</p>\n" "reply to this message.</p>\n"
" <p>Regards,OpenERP Team,</p>" " <p>Regards,OpenERP Team,</p>"
msgstr "" 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". I'm Opening that Invoice which is created for "Seagate".
- -
!python {model: res.partner}: | !python {model: res.partner}: |
from openerp import netsvc from openerp.tools.translate import _
from openerp.tools.translate import _ invoice_pool = self.pool.get('account.invoice')
invoice_pool = self.pool.get('account.invoice') partner_pool = self.pool.get('res.partner')
partner_pool = self.pool.get('res.partner') membership_line_pool = self.pool.get('membership.membership_line')
membership_line_pool = self.pool.get('membership.membership_line') membership_pool = self.pool.get('product.product')
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. 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 DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
from openerp.tools import float_compare from openerp.tools import float_compare
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp import netsvc
from openerp import tools from openerp import tools
#---------------------------------------------------------- #----------------------------------------------------------
@ -774,10 +773,8 @@ class mrp_production(osv.osv):
new_parent_ids.append(final_product.id) new_parent_ids.append(final_product.id)
for new_parent_id in new_parent_ids: for new_parent_id in new_parent_ids:
stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4,new_parent_id)]}) 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.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 return True
def _costs_generate(self, cr, uid, production): def _costs_generate(self, cr, uid, production):
@ -845,7 +842,6 @@ class mrp_production(osv.osv):
return True return True
def _make_production_line_procurement(self, cr, uid, production_line, shipment_move_id, context=None): 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') procurement_order = self.pool.get('procurement.order')
production = production_line.production_id production = production_line.production_id
location_id = production.location_src_id.id location_id = production.location_src_id.id
@ -865,7 +861,7 @@ class mrp_production(osv.osv):
'move_id': shipment_move_id, 'move_id': shipment_move_id,
'company_id': production.company_id.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 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): 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. @return: Newly generated Shipment Id.
""" """
shipment_id = False 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)]) 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) self.action_compute(cr, uid, uncompute_ids, context=context)
for production in self.browse(cr, uid, 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) destination_location_id=source_location_id, context=context)
self._make_production_line_procurement(cr, uid, line, shipment_move_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) production.write({'state':'confirmed'}, context=context)
return shipment_id return shipment_id

View File

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

View File

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

View File

@ -118,16 +118,15 @@ class mrp_production_workcenter_line(osv.osv):
@param action: Action to perform. @param action: Action to perform.
@return: Nothing @return: Nothing
""" """
wf_service = netsvc.LocalService("workflow")
prod_obj_pool = self.pool.get('mrp.production') prod_obj_pool = self.pool.get('mrp.production')
oper_obj = self.browse(cr, uid, ids)[0] oper_obj = self.browse(cr, uid, ids)[0]
prod_obj = oper_obj.production_id prod_obj = oper_obj.production_id
if action == 'start': if action == 'start':
if prod_obj.state =='confirmed': if prod_obj.state =='confirmed':
prod_obj_pool.force_production(cr, uid, [prod_obj.id]) 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': 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': elif prod_obj.state =='in_production':
return return
else: 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): for production in prod_obj_pool.browse(cr, uid, [prod_obj.id], context= None):
if production.move_lines or production.move_created_ids: 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) 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 return
def write(self, cr, uid, ids, vals, context=None, update=True): def write(self, cr, uid, ids, vals, context=None, update=True):
@ -228,23 +227,21 @@ class mrp_production(osv.osv):
@return: Super method @return: Super method
""" """
obj = self.browse(cr, uid, ids)[0] 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: for workcenter_line in obj.workcenter_lines:
if workcenter_line.state == 'draft': if workcenter_line.state == 'draft':
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_start_working', cr) workcenter_pool.signal_button_start_working(cr, uid, [workcenter_line.id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_done', cr) workcenter_pool.signal_button_done(cr, uid, [workcenter_line.id])
return super(mrp_production,self).action_production_end(cr, uid, ids) return super(mrp_production,self).action_production_end(cr, uid, ids)
def action_in_production(self, cr, uid, ids): def action_in_production(self, cr, uid, ids):
""" Changes state to In Production and writes starting date. """ Changes state to In Production and writes starting date.
@return: True @return: True
""" """
obj = self.browse(cr, uid, ids)[0]
workcenter_pool = self.pool.get('mrp.production.workcenter.line') workcenter_pool = self.pool.get('mrp.production.workcenter.line')
wf_service = netsvc.LocalService("workflow")
for prod in self.browse(cr, uid, ids): for prod in self.browse(cr, uid, ids):
if prod.workcenter_lines: 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) return super(mrp_production,self).action_in_production(cr, uid, ids)
def action_cancel(self, cr, uid, ids, context=None): def action_cancel(self, cr, uid, ids, context=None):
@ -252,9 +249,8 @@ class mrp_production(osv.osv):
@return: Super method @return: Super method
""" """
obj = self.browse(cr, uid, ids,context=context)[0] obj = self.browse(cr, uid, ids,context=context)[0]
wf_service = netsvc.LocalService("workflow")
for workcenter_line in obj.workcenter_lines: 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) return super(mrp_production,self).action_cancel(cr,uid,ids,context=context)
def _compute_planned_workcenter(self, cr, uid, ids, context=None, mini=False): 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) return super(mrp_operations_operation, self).write(cr, uid, ids, vals, context=context)
def create(self, cr, uid, vals, context=None): 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_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] 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 code.start_stop in ('start','done','pause','cancel','resume'):
if not wc_op_id: if not wc_op_id:
production_obj=self.pool.get('mrp.production').browse(cr, uid, vals['production_id'], context=context) 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': if code.start_stop=='start':
self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id) workcenter_pool.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.signal_button_start_working(cr, uid, [wc_op_id[0]])
if code.start_stop=='done': if code.start_stop=='done':
self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id) workcenter_pool.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.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')}) 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': if code.start_stop=='pause':
self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id) workcenter_pool.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.signal_button_pause(cr, uid, [wc_op_id[0]])
if code.start_stop=='resume': if code.start_stop=='resume':
self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id) workcenter_pool.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.signal_button_resume(cr, uid, [wc_op_id[0]])
if code.start_stop=='cancel': if code.start_stop=='cancel':
self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id) workcenter_pool.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.signal_button_cancel(cr, uid, [wc_op_id[0]])
if not self.check_operation(cr, uid, vals): if not self.check_operation(cr, uid, vals):
return return
@ -549,10 +544,9 @@ class mrp_operations_operation(osv.osv):
return super(mrp_operations_operation, self).create(cr, uid, vals, context=context) return super(mrp_operations_operation, self).create(cr, uid, vals, context=context)
def initialize_workflow_instance(self, cr, uid, context=None): def initialize_workflow_instance(self, cr, uid, context=None):
wf_service = netsvc.LocalService("workflow") mrp_production_workcenter_line = self.pool.get('mrp.production.workcenter.line')
line_ids = self.pool.get('mrp.production.workcenter.line').search(cr, uid, [], context=context) line_ids = mrp_production_workcenter_line.search(cr, uid, [], context=context)
for line_id in line_ids: mrp_production_workcenter_line.create_workflow(cr, uid, line_ids)
wf_service.trg_create(uid, 'mrp.production.workcenter.line', line_id, cr)
return True return True
_columns={ _columns={

View File

@ -39,62 +39,48 @@
Production start on first work center, so I start work operation on first work center. Production start on first work center, so I start work operation on first work center.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow") self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr)
- -
Now I pause first work operation due to technical fault of work center. Now I pause first work operation due to technical fault of work center.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow") self.pool.get('mrp.production.workcenter.line').signal_button_pause(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_pause', cr)
- -
I resume first work operation. I resume first work operation.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow") self.pool.get('mrp.production.workcenter.line').signal_button_resume(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_resume', cr)
- -
I cancel first work operation. I cancel first work operation.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow") self.pool.get('mrp.production.workcenter.line').signal_button_cancel(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_cancel', cr)
- -
I reset first work operation and start after resolving techninal fault of work center. I reset first work operation and start after resolving techninal fault of work center.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow") self.pool.get('mrp.production.workcenter.line').signal_button_draft(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_draft', cr) self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr)
- -
I close first work operation as this work center completed its process. I close first work operation as this work center completed its process.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
wf_service = netsvc.LocalService("workflow") self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [order.workcenter_lines[0].id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_done', cr)
- -
Now I close other operations one by one which are in start state. Now I close other operations one by one which are in start state.
- -
!python {model: mrp.production}: | !python {model: mrp.production}: |
from openerp import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) 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:]: for work_line in order.workcenter_lines[1:]:
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_start_working', cr) self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [work_line.id])
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_done', cr) self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [work_line.id])
- -
I check that the production order is now done. I check that the production order is now done.
@ -106,8 +92,7 @@
I print a Barcode Report of Operation line. I print a Barcode Report of Operation line.
- -
!python {model: mrp_operations.operation.code}: | !python {model: mrp_operations.operation.code}: |
import os import netsvc, tools, os
from openerp import netsvc, tools
(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')], {}, {}) (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']: if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-barcode_report.'+format), 'wb+').write(data) 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. I print Workcenter's Barcode Report.
- -
!python {model: mrp.workcenter}: | !python {model: mrp.workcenter}: |
import os import netsvc, tools, os
from openerp import netsvc, tools
(data, format) = netsvc.LocalService('report.mrp.wc.barcode').create(cr, uid, [ref('mrp.mrp_workcenter_0'),ref('mrp.mrp_workcenter_1')], {}, {}) (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']: if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-workcenter_barcode_report.'+format), 'wb+').write(data) 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.osv import fields,osv
from openerp import netsvc
from datetime import datetime from datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from openerp.tools.translate import _ from openerp.tools.translate import _
@ -314,9 +313,7 @@ class mrp_repair(osv.osv):
for repair in self.browse(cr, uid, ids): for repair in self.browse(cr, uid, ids):
mrp_line_obj.write(cr, uid, [l.id for l in repair.operations], {'state': 'draft'}) mrp_line_obj.write(cr, uid, [l.id for l in repair.operations], {'state': 'draft'})
self.write(cr, uid, ids, {'state':'draft'}) self.write(cr, uid, ids, {'state':'draft'})
wf_service = netsvc.LocalService("workflow") self.create_workflow(cr, uid, ids)
for id in ids:
wf_service.trg_create(uid, 'mrp.repair', id, cr)
return True return True
def action_confirm(self, cr, uid, ids, *args): def action_confirm(self, cr, uid, ids, *args):
@ -505,7 +502,6 @@ class mrp_repair(osv.osv):
""" """
res = {} res = {}
move_obj = self.pool.get('stock.move') move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
repair_line_obj = self.pool.get('mrp.repair.line') repair_line_obj = self.pool.get('mrp.repair.line')
seq_obj = self.pool.get('ir.sequence') seq_obj = self.pool.get('ir.sequence')
pick_obj = self.pool.get('stock.picking') pick_obj = self.pool.get('stock.picking')
@ -548,7 +544,7 @@ class mrp_repair(osv.osv):
'tracking_id': False, 'tracking_id': False,
'state': 'assigned', '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}) self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking})
res[repair.id] = picking res[repair.id] = picking
else: else:

View File

@ -19,7 +19,6 @@
# #
############################################################################## ##############################################################################
from openerp import netsvc
from openerp.osv import fields, osv from openerp.osv import fields, osv
class make_invoice(osv.osv_memory): 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'. # 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', # 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. # but that second call will not do anything, since the repairs are already invoiced.
wf_service = netsvc.LocalService("workflow") order_obj.signal_action_invoice_create(cr, uid, context['active_ids'])
for repair_id in context['active_ids']:
wf_service.trg_validate(uid, 'mrp.repair', repair_id, 'action_invoice_create', cr)
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') form_res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
form_id = form_res and form_res[1] or False form_id = form_res and form_res[1] or False

View File

@ -27,7 +27,7 @@ import pdb
import time import time
import openerp import openerp
from openerp import netsvc, tools from openerp import tools
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
@ -364,7 +364,7 @@ class pos_session(osv.osv):
ids = [ids] ids = [ids]
this_record = self.browse(cr, uid, ids[0], context=context) 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) 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): 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): for session in self.browse(cr, uid, ids, context=context):
order_ids = [order.id for order in session.order_ids if order.state == 'paid'] 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: for order in session.order_ids:
if order.state not in ('paid', 'invoiced'): if order.state not in ('paid', 'invoiced'):
@ -457,7 +457,7 @@ class pos_session(osv.osv):
_('Error!'), _('Error!'),
_("You cannot confirm all orders of this session, because they have not the 'paid' status")) _("You cannot confirm all orders of this session, because they have not the 'paid' status"))
else: else:
wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr) pos_order_obj.signal_done(cr, uid, [order.id])
return True return True
@ -519,8 +519,7 @@ class pos_order(osv.osv):
'journal': cash_journal.id, 'journal': cash_journal.id,
}, context=context) }, context=context)
order_ids.append(order_id) order_ids.append(order_id)
wf_service = netsvc.LocalService("workflow") self.signal_paid(cr, uid, [order_id])
wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
return order_ids return order_ids
def unlink(self, cr, uid, ids, context=None): def unlink(self, cr, uid, ids, context=None):
@ -695,9 +694,8 @@ class pos_order(osv.osv):
}, context=context) }, context=context)
if line.qty < 0: if line.qty < 0:
location_id, output_id = output_id, location_id location_id, output_id = output_id, location_id
wf_service = netsvc.LocalService("workflow") picking_obj.signal_button_confirm(cr, uid, [picking_id])
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
picking_obj.force_assign(cr, uid, [picking_id], context) picking_obj.force_assign(cr, uid, [picking_id], context)
return True return True
@ -707,7 +705,7 @@ class pos_order(osv.osv):
""" """
stock_picking_obj = self.pool.get('stock.picking') stock_picking_obj = self.pool.get('stock.picking')
for order in self.browse(cr, uid, ids, context=context): 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': 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.')) raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.'))
self.write(cr, uid, ids, {'state': 'cancel'}, context=context) 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) return self.write(cr, uid, ids, {'state':'invoiced'}, context=context)
def action_invoice(self, cr, uid, ids, context=None): def action_invoice(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
inv_ref = self.pool.get('account.invoice') inv_ref = self.pool.get('account.invoice')
inv_line_ref = self.pool.get('account.invoice.line') inv_line_ref = self.pool.get('account.invoice.line')
product_obj = self.pool.get('product.product') 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['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_line_ref.create(cr, uid, inv_line, context=context)
inv_ref.button_reset_taxes(cr, uid, [inv_id], 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 {} if not inv_ids: return {}

View File

@ -19,7 +19,6 @@
# #
############################################################################## ##############################################################################
from openerp import netsvc
from openerp.osv import osv from openerp.osv import osv
@ -28,7 +27,6 @@ class pos_confirm(osv.osv_memory):
_description = 'Post POS Journal Entries' _description = 'Post POS Journal Entries'
def action_confirm(self, cr, uid, ids, context=None): def action_confirm(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
order_obj = self.pool.get('pos.order') order_obj = self.pool.get('pos.order')
ids = order_obj.search(cr, uid, [('state','=','paid')], context=context) ids = order_obj.search(cr, uid, [('state','=','paid')], context=context)
for order in order_obj.browse(cr, uid, ids, 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 todo = False
break break
if todo: 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 # Check if there is orders to reconcile their invoices
ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context) 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 import pos_box_entries
from openerp import netsvc
from openerp.osv import osv, fields from openerp.osv import osv, fields
from openerp.tools.translate import _ 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) order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]): if order_obj.test_paid(cr, uid, [active_id]):
wf_service = netsvc.LocalService("workflow") order_obj.signal_paid(cr, uid, [active_id])
wf_service.trg_validate(uid, 'pos.order', active_id, 'paid', cr)
return {'type' : 'ir.actions.act_window_close' } return {'type' : 'ir.actions.act_window_close' }
##self.print_report(cr, uid, ids, context=context) ##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.osv import osv,fields
from openerp.tools.translate import _ from openerp.tools.translate import _
import time import time
@ -104,7 +103,6 @@ class pos_return(osv.osv_memory):
property_obj= self.pool.get("ir.property") property_obj= self.pool.get("ir.property")
uom_obj =self. pool.get('product.uom') uom_obj =self. pool.get('product.uom')
statementl_obj = self.pool.get('account.bank.statement.line') statementl_obj = self.pool.get('account.bank.statement.line')
wf_service = netsvc.LocalService("workflow")
#Todo :Need to clean the code #Todo :Need to clean the code
if active_id: if active_id:
data = self.browse(cr, uid, ids, context=context)[0] data = self.browse(cr, uid, ids, context=context)[0]
@ -157,7 +155,7 @@ class pos_return(osv.osv_memory):
'amount': -amount, 'amount': -amount,
}) })
order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'}) 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) picking_obj.force_assign(cr, uid, [new_picking], context)
act = { act = {
'domain': "[('id', 'in', ["+str(new_order)+"])]", 'domain': "[('id', 'in', ["+str(new_order)+"])]",
@ -200,7 +198,6 @@ class add_product(osv.osv_memory):
date_cur=time.strftime('%Y-%m-%d') date_cur=time.strftime('%Y-%m-%d')
uom_obj = self.pool.get('product.uom') uom_obj = self.pool.get('product.uom')
prod_obj=self.pool.get('product.product') 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) 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): 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 '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) picking_obj.force_assign(cr, uid, [new_picking], context)
order_obj.write(cr,uid,active_id,{'picking_id':new_picking}) order_obj.write(cr,uid,active_id,{'picking_id':new_picking})
@ -265,7 +262,6 @@ class add_product(osv.osv_memory):
if return_id: if return_id:
data = return_boj.read(cr,uid,return_id,[])[0] data = return_boj.read(cr,uid,return_id,[])[0]
wf_service = netsvc.LocalService("workflow")
self_data = self.browse(cr, uid, ids, context=context)[0] 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) 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, 'name':'%s (return)' % order_id.name,
'date':date_cur, '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) picking_obj.force_assign(cr, uid, [new_picking], context)
obj=order_obj.browse(cr,uid, active_ids[0]) obj=order_obj.browse(cr,uid, active_ids[0])
context.update({'return':'return'}) context.update({'return':'return'})

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -69,10 +69,8 @@
I confirmed RFQ which has best price. I confirmed RFQ which has best price.
- -
!python {model: purchase.order}: | !python {model: purchase.order}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
purchase = self.browse(cr, uid, ref('rfq2'), context=context) 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. 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 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' assert len(ids) == 1, 'This option should only be used for a single id at a time'
wf_service = netsvc.LocalService("workflow") self.signal_quotation_sent(cr, uid, ids)
wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr)
datas = { datas = {
'model': 'sale.order', 'model': 'sale.order',
'ids': ids, 'ids': ids,
@ -432,12 +431,10 @@ class sale_order(osv.osv):
view of one of the newly created invoices view of one of the newly created invoices
""" """
mod_obj = self.pool.get('ir.model.data') mod_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
# create invoices through the sales orders' 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) inv_ids0 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids)
for id in ids: self.signal_manual_invoice(cr, uid, ids)
wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
inv_ids1 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_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 # determine newly created invoices
new_inv_ids = list(inv_ids1 - inv_ids0) new_inv_ids = list(inv_ids1 - inv_ids0)
@ -555,10 +552,10 @@ class sale_order(osv.osv):
return True return True
def action_cancel(self, cr, uid, ids, context=None): def action_cancel(self, cr, uid, ids, context=None):
wf_service = netsvc.LocalService("workflow")
if context is None: if context is None:
context = {} context = {}
sale_order_line_obj = self.pool.get('sale.order.line') 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 sale in self.browse(cr, uid, ids, context=context):
for inv in sale.invoice_ids: for inv in sale.invoice_ids:
if inv.state not in ('draft', 'cancel'): if inv.state not in ('draft', 'cancel'):
@ -566,8 +563,7 @@ class sale_order(osv.osv):
_('Cannot cancel this sales order!'), _('Cannot cancel this sales order!'),
_('First cancel all invoices attached to this sales order.')) _('First cancel all invoices attached to this sales order.'))
for r in self.read(cr, uid, ids, ['invoice_ids']): for r in self.read(cr, uid, ids, ['invoice_ids']):
for inv in r['invoice_ids']: account_invoice_obj.signal_invoice_cancel(cr, uid, r['invoice_ids'])
wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line], sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
{'state': 'cancel'}) {'state': 'cancel'})
self.write(cr, uid, ids, {'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): 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.' assert len(ids) == 1, 'This option should only be used for a single id at a time.'
wf_service = netsvc.LocalService('workflow') self.signal_order_confirm(cr, uid, ids)
wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr)
# redisplay the record as a sales order # redisplay the record as a sales order
view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form') 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) date_order = time.strftime(DEFAULT_SERVER_DATE_FORMAT)
result = {} result = {}
warning_msgs = {} warning_msgs = ''
product_obj = product_obj.browse(cr, uid, product, context=context_partner) product_obj = product_obj.browse(cr, uid, product, context=context_partner)
uom2 = False uom2 = False
@ -991,8 +986,7 @@ class mail_compose_message(osv.Model):
context = context or {} context = context or {}
if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'): 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) context = dict(context, mail_post_autofollow=True)
wf_service = netsvc.LocalService("workflow") self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']])
wf_service.trg_validate(uid, 'sale.order', context['default_res_id'], 'quotation_sent', cr)
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
class account_invoice(osv.Model): class account_invoice(osv.Model):

View File

@ -51,11 +51,10 @@
I cancel all the invoices. I cancel all the invoices.
- -
!python {model: sale.order}: | !python {model: sale.order}: |
from openerp import netsvc
invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids 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: 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. I check order status in "Invoice Exception" and related invoice is in cancel state.
- -

View File

@ -41,11 +41,10 @@
I open the Invoice. I open the Invoice.
- -
!python {model: sale.order}: | !python {model: sale.order}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
so = self.browse(cr, uid, ref("sale_order_2")) so = self.browse(cr, uid, ref("sale_order_2"))
account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids: 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. 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_line_obj = self.pool.get('sale.order.line')
sales_order_obj = self.pool.get('sale.order') 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): 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.invoiced) and (line.state not in ('draft', 'cancel')):
if not line.order_id.id in invoices: if not line.order_id.id in invoices:
@ -104,7 +103,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
flag = False flag = False
break break
if flag: 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'}) sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'})
if not invoices: if not invoices:

View File

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

View File

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

View File

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

View File

@ -132,11 +132,10 @@
I open the Invoice. I open the Invoice.
- -
!python {model: sale.order}: | !python {model: sale.order}: |
from openerp import netsvc
wf_service = netsvc.LocalService("workflow")
so = self.browse(cr, uid, ref("sale.sale_order_6")) so = self.browse(cr, uid, ref("sale.sale_order_6"))
account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids: 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 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. """ Changes state of picking to available if all moves are confirmed.
@return: True @return: True
""" """
wf_service = netsvc.LocalService("workflow")
for pick in self.browse(cr, uid, ids): for pick in self.browse(cr, uid, ids):
if pick.state == 'draft': 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'] move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed']
if not move_ids: if not move_ids:
raise osv.except_osv(_('Warning!'),_('Not enough stock, unable to reserve the products.')) 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. """ Confirms picking directly from draft state.
@return: True @return: True
""" """
wf_service = netsvc.LocalService("workflow")
for pick in self.browse(cr, uid, ids): for pick in self.browse(cr, uid, ids):
if not pick.move_lines: if not pick.move_lines:
raise osv.except_osv(_('Error!'),_('You cannot process picking without stock moves.')) raise osv.except_osv(_('Error!'),_('You cannot process picking without stock moves.'))
wf_service.trg_validate(uid, 'stock.picking', pick.id, self.signal_button_confirm(cr, uid, [pick.id])
'button_confirm', cr)
return True return True
def draft_validate(self, cr, uid, ids, context=None): 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) # At first we confirm the new picking (if necessary)
if new_picking: 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 # Then we finish the good picking
self.write(cr, uid, [pick.id], {'backorder_id': new_picking}) self.write(cr, uid, [pick.id], {'backorder_id': new_picking})
self.action_move(cr, uid, [new_picking], context=context) 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) wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
delivered_pack_id = new_picking delivered_pack_id = new_picking
back_order_name = self.browse(cr, uid, delivered_pack_id, context=context).name 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) self.message_post(cr, uid, ids, body=_("Back order <em>%s</em> has been <b>created</b>.") % (back_order_name), context=context)
else: else:
self.action_move(cr, uid, [pick.id], context=context) 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_id = pick.id
delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context) 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') res_obj = self.pool.get('res.company')
location_obj = self.pool.get('stock.location') location_obj = self.pool.get('stock.location')
move_obj = self.pool.get('stock.move') move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
new_moves = [] new_moves = []
if context is None: if context is None:
context = {} context = {}
@ -2073,7 +2069,7 @@ class stock_move(osv.osv):
}) })
new_moves.append(self.browse(cr, uid, [new_id])[0]) new_moves.append(self.browse(cr, uid, [new_id])[0])
if pickid: if pickid:
wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr) self.signal_button_confirm(cr, uid, [pickid])
if new_moves: if new_moves:
new_moves += self.create_chained_picking(cr, uid, new_moves, context) new_moves += self.create_chained_picking(cr, uid, new_moves, context)
return new_moves return new_moves
@ -2195,6 +2191,7 @@ class stock_move(osv.osv):
return True return True
if context is None: if context is None:
context = {} context = {}
wf_service = netsvc.LocalService("workflow")
pickings = set() pickings = set()
for move in self.browse(cr, uid, ids, context=context): for move in self.browse(cr, uid, ids, context=context):
if move.state in ('confirmed', 'waiting', 'assigned', 'draft'): 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': if move.move_dest_id and move.move_dest_id.state == 'waiting':
self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'}) self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'})
if context.get('call_unlink',False) and move.move_dest_id.picking_id: 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) 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}) self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False})
if not context.get('call_unlink',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): if all(move.state == 'cancel' for move in pick.move_lines):
self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'}) self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'})
wf_service = netsvc.LocalService("workflow")
for id in ids: for id in ids:
wf_service.trg_trigger(uid, 'stock.move', id, cr) wf_service.trg_trigger(uid, 'stock.move', id, cr)
return True return True
@ -2633,7 +2628,6 @@ class stock_move(osv.osv):
product_obj = self.pool.get('product.product') product_obj = self.pool.get('product.product')
currency_obj = self.pool.get('res.currency') currency_obj = self.pool.get('res.currency')
uom_obj = self.pool.get('product.uom') uom_obj = self.pool.get('product.uom')
wf_service = netsvc.LocalService("workflow")
if context is None: if context is None:
context = {} context = {}
@ -2734,7 +2728,7 @@ class stock_move(osv.osv):
res = cr.fetchall() res = cr.fetchall()
if len(res) == len(move.picking_id.move_lines): if len(res) == len(move.picking_id.move_lines):
picking_obj.action_move(cr, uid, [move.picking_id.id]) 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] 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 #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) 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): def create_workflow(self, cr, uid, ids, context=None):
#override in order to trigger the workflow of stock.picking at the end of create, write and unlink operation # overridden in order to trigger the workflow of stock.picking at the end of create,
#instead of it's own workflow (which is not existing) # write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_trigger(cr, uid, ids, trigger, context=context) return self.pool.get('stock.picking').create_workflow(cr, uid, ids, context=context)
def _workflow_signal(self, cr, uid, ids, signal, context=None): def delete_workflow(self, cr, uid, ids, context=None):
#override in order to fire the workflow signal on given stock.picking workflow instance # overridden in order to trigger the workflow of stock.picking at the end of create,
#instead of it's own workflow (which is not existing) # write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_signal(cr, uid, ids, signal, context=context) 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 = { _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), '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 #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) 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): def create_workflow(self, cr, uid, ids, context=None):
#override in order to trigger the workflow of stock.picking at the end of create, write and unlink operation # overridden in order to trigger the workflow of stock.picking at the end of create,
#instead of it's own workflow (which is not existing) # write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_trigger(cr, uid, ids, trigger, context=context) return self.pool.get('stock.picking').create_workflow(cr, uid, ids, context=context)
def _workflow_signal(self, cr, uid, ids, signal, context=None): def delete_workflow(self, cr, uid, ids, context=None):
#override in order to fire the workflow signal on given stock.picking workflow instance # overridden in order to trigger the workflow of stock.picking at the end of create,
#instead of it's own workflow (which is not existing) # write and unlink operation instead of its own workflow (which is not existing)
return self.pool.get('stock.picking')._workflow_signal(cr, uid, ids, signal, context=context) 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 = { _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), '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') data_obj = self.pool.get('stock.return.picking.memory')
act_obj = self.pool.get('ir.actions.act_window') act_obj = self.pool.get('ir.actions.act_window')
model_obj = self.pool.get('ir.model.data') model_obj = self.pool.get('ir.model.data')
wf_service = netsvc.LocalService("workflow")
pick = pick_obj.browse(cr, uid, record_id, context=context) pick = pick_obj.browse(cr, uid, record_id, context=context)
data = self.read(cr, uid, ids[0], context=context) data = self.read(cr, uid, ids[0], context=context)
date_cur = time.strftime('%Y-%m-%d %H:%M:%S') 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: if set_invoice_state_to_none:
pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'}, context=context) 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) pick_obj.force_assign(cr, uid, [new_picking], context)
# Update view id in context, lp:702939 # Update view id in context, lp:702939
model_list = { model_list = {

View File

@ -49,7 +49,6 @@ class procurement_order(osv.osv):
proc_obj = self.pool.get('procurement.order') proc_obj = self.pool.get('procurement.order')
move_obj = self.pool.get('stock.move') move_obj = self.pool.get('stock.move')
picking_obj=self.pool.get('stock.picking') picking_obj=self.pool.get('stock.picking')
wf_service = netsvc.LocalService("workflow")
for proc in proc_obj.browse(cr, uid, ids, context=context): for proc in proc_obj.browse(cr, uid, ids, context=context):
line = None line = None
for line in proc.product_id.flow_pull_ids: for line in proc.product_id.flow_pull_ids:
@ -109,9 +108,8 @@ class procurement_order(osv.osv):
'procure_method': line.procure_method, 'procure_method': line.procure_method,
'move_id': move_id, 'move_id': move_id,
}) })
wf_service = netsvc.LocalService("workflow") self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) self.signal_button_confirm(cr, uid, [proc_id])
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
if proc.move_id: if proc.move_id:
move_obj.write(cr, uid, [proc.move_id.id], move_obj.write(cr, uid, [proc.move_id.id],
{'location_id':proc.location_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.write(cr, uid, [proc.id], {'state':'running', 'message': msg})
self.message_post(cr, uid, [proc.id], body=msg, context=context) 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) # 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 return False
procurement_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -21,6 +21,7 @@
import base64 import base64
import urllib2 import urllib2
from urlparse import urlparse, urlunparse
import openerp import openerp
from openerp.osv import fields, osv from openerp.osv import fields, osv
@ -30,11 +31,12 @@ class Binary(openerp.addons.web.http.Controller):
@openerp.addons.web.http.jsonrequest @openerp.addons.web.http.jsonrequest
def url2binary(self, req, url): def url2binary(self, req, url):
if not url.startswith("http"): """Used exclusively to load images from LinkedIn profiles, must not be used for anything else."""
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")
req.session.assert_valid(force=True) 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) bfile = urllib2.urlopen(url)
return base64.b64encode(bfile.read()) return base64.b64encode(bfile.read())