[MERGE] Bugfixes from 6.1 until revision 6800
bzr revid: odo@openerp.com-20121206153856-9y9v8ok6yxo6l5f0
This commit is contained in:
commit
5db87bea9c
|
@ -141,7 +141,7 @@ for a particular financial year and for preparation of vouchers there is a modul
|
|||
'project/analytic_account_demo.xml',
|
||||
'demo/account_minimal.xml',
|
||||
'demo/account_invoice_demo.xml',
|
||||
# 'account_unit_test.xml',
|
||||
'account_unit_test.xml',
|
||||
],
|
||||
'test': [
|
||||
'test/account_customer_invoice.yml',
|
||||
|
|
|
@ -80,8 +80,11 @@ class account_invoice(osv.osv):
|
|||
|
||||
def _reconciled(self, cr, uid, ids, name, args, context=None):
|
||||
res = {}
|
||||
for id in ids:
|
||||
res[id] = self.test_paid(cr, uid, [id])
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
for inv in self.browse(cr, uid, ids, context=context):
|
||||
res[inv.id] = self.test_paid(cr, uid, [inv.id])
|
||||
if not res[inv.id] and inv.state == 'paid':
|
||||
wf_service.trg_validate(uid, 'account.invoice', inv.id, 'open_test', cr)
|
||||
return res
|
||||
|
||||
def _get_reference_type(self, cr, uid, context=None):
|
||||
|
@ -1162,7 +1165,7 @@ class account_invoice(osv.osv):
|
|||
return map(lambda x: (0,0,x), lines)
|
||||
|
||||
def refund(self, cr, uid, ids, date=None, period_id=None, description=None, journal_id=None):
|
||||
invoices = self.read(cr, uid, ids, ['name', 'type', 'number', 'reference', 'comment', 'date_due', 'partner_id', 'partner_contact', 'partner_insite', 'partner_ref', 'payment_term', 'account_id', 'currency_id', 'invoice_line', 'tax_line', 'journal_id', 'company_id'])
|
||||
invoices = self.read(cr, uid, ids, ['name', 'type', 'number', 'reference', 'comment', 'date_due', 'partner_id', 'partner_contact', 'partner_insite', 'partner_ref', 'payment_term', 'account_id', 'currency_id', 'invoice_line', 'tax_line', 'journal_id', 'company_id', 'user_id', 'fiscal_position'])
|
||||
obj_invoice_line = self.pool.get('account.invoice.line')
|
||||
obj_invoice_tax = self.pool.get('account.invoice.tax')
|
||||
obj_journal = self.pool.get('account.journal')
|
||||
|
@ -1211,7 +1214,8 @@ class account_invoice(osv.osv):
|
|||
})
|
||||
# take the id part of the tuple returned for many2one fields
|
||||
for field in ('partner_id', 'company_id',
|
||||
'account_id', 'currency_id', 'payment_term', 'journal_id'):
|
||||
'account_id', 'currency_id', 'payment_term', 'journal_id',
|
||||
'user_id', 'fiscal_position'):
|
||||
invoice[field] = invoice[field] and invoice[field][0]
|
||||
# create the new invoice
|
||||
new_ids.append(self.create(cr, uid, invoice))
|
||||
|
|
|
@ -856,7 +856,12 @@ class account_move_line(osv.osv):
|
|||
if r[0][1] != None:
|
||||
raise osv.except_osv(_('Error!'), _('Some entries are already reconciled.'))
|
||||
|
||||
if (not currency_obj.is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \
|
||||
if context.get('fy_closing'):
|
||||
# We don't want to generate any write-off when being called from the
|
||||
# wizard used to close a fiscal year (and it doesn't give us any
|
||||
# writeoff_acc_id).
|
||||
pass
|
||||
elif (not currency_obj.is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \
|
||||
(account.currency_id and (not currency_obj.is_zero(cr, uid, account.currency_id, currency))):
|
||||
if not writeoff_acc_id:
|
||||
raise osv.except_osv(_('Warning!'), _('You have to provide an account for the write off/exchange difference entry.'))
|
||||
|
|
|
@ -29,8 +29,9 @@
|
|||
<field name="auto_delete" eval="True"/>
|
||||
<field name="report_template" ref="account_invoices"/>
|
||||
<field name="report_name">Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
|
||||
<field name="lang">${object.partner_id.lang}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
|
||||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
|
||||
|
||||
<p>Hello${object.partner_id.name and ' ' or ''}${object.partner_id.name or ''},</p>
|
||||
|
||||
|
@ -73,7 +74,7 @@
|
|||
<br/>
|
||||
<br/>
|
||||
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
|
||||
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
|
||||
</div>
|
||||
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
|
||||
|
|
|
@ -56,7 +56,7 @@ class report_account_common(report_sxw.rml_parse, common_report_header):
|
|||
for report in self.pool.get('account.financial.report').browse(self.cr, self.uid, ids2, context=data['form']['used_context']):
|
||||
vals = {
|
||||
'name': report.name,
|
||||
'balance': report.balance,
|
||||
'balance': report.balance * report.sign,
|
||||
'type': 'report',
|
||||
'level': bool(report.style_overwrite) and report.style_overwrite or report.level,
|
||||
'account_type': report.type =='sum' and 'view' or False, #used to underline the financial report balances
|
||||
|
|
|
@ -48,6 +48,7 @@ class report_account_receivable(osv.osv):
|
|||
_order = 'name desc'
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'report_account_receivable')
|
||||
cr.execute("""
|
||||
create or replace view report_account_receivable as (
|
||||
select
|
||||
|
@ -183,6 +184,7 @@ class report_invoice_created(osv.osv):
|
|||
_order = 'create_date'
|
||||
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'report_invoice_created')
|
||||
cr.execute("""create or replace view report_invoice_created as (
|
||||
select
|
||||
inv.id as id, inv.name as name, inv.type as type,
|
||||
|
|
|
@ -36,7 +36,7 @@ from itertools import groupby
|
|||
from operator import itemgetter
|
||||
|
||||
|
||||
FIELD_STATES = [('clear', 'Clear'), ('anonymized', 'Anonymized'), ('not_existing', 'Not Existing')]
|
||||
FIELD_STATES = [('clear', 'Clear'), ('anonymized', 'Anonymized'), ('not_existing', 'Not Existing'), ('new', 'New')]
|
||||
ANONYMIZATION_STATES = FIELD_STATES + [('unstable', 'Unstable')]
|
||||
WIZARD_ANONYMIZATION_STATES = [('clear', 'Clear'), ('anonymized', 'Anonymized'), ('unstable', 'Unstable')]
|
||||
ANONYMIZATION_HISTORY_STATE = [('started', 'Started'), ('done', 'Done'), ('in_exception', 'Exception occured')]
|
||||
|
|
|
@ -686,10 +686,10 @@ class crm_lead(base_stage, format_address, osv.osv):
|
|||
if context is None:
|
||||
context = {}
|
||||
partner_ids = {}
|
||||
force_partner_id = partner_id
|
||||
for lead in self.browse(cr, uid, ids, context=context):
|
||||
if action == 'create':
|
||||
if not partner_id:
|
||||
partner_id = self._create_lead_partner(cr, uid, lead, context)
|
||||
partner_id = force_partner_id or self._create_lead_partner(cr, uid, lead, context)
|
||||
self._lead_set_partner(cr, uid, lead, partner_id, context=context)
|
||||
partner_ids[lead.id] = partner_id
|
||||
return partner_ids
|
||||
|
@ -700,9 +700,9 @@ class crm_lead(base_stage, format_address, osv.osv):
|
|||
value = {}
|
||||
if team_id:
|
||||
value['section_id'] = team_id
|
||||
if index < len(user_ids):
|
||||
if user_ids:
|
||||
value['user_id'] = user_ids[index]
|
||||
index += 1
|
||||
index = (index + 1) % len(user_ids)
|
||||
if value:
|
||||
self.write(cr, uid, [lead_id], value, context=context)
|
||||
return True
|
||||
|
|
|
@ -195,12 +195,12 @@ openerp_mailgate.py -u %(uid)d -p PASSWORD -o %(model)s -d %(dbname)s --host=HOS
|
|||
strip_attachments=(not server.attach),
|
||||
context=context)
|
||||
if res_id and server.action_id:
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id], 'active_model': context.get("thread_model", False)})
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id], 'active_model': context.get("thread_model", server.object_id.model)})
|
||||
imap_server.store(num, '+FLAGS', '\\Seen')
|
||||
cr.commit()
|
||||
count += 1
|
||||
_logger.info("fetched/processed %s email(s) on %s server %s", count, server.type, server.name)
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
_logger.exception("Failed to fetch mail from %s server %s.", server.type, server.name)
|
||||
finally:
|
||||
if imap_server:
|
||||
|
@ -220,11 +220,11 @@ openerp_mailgate.py -u %(uid)d -p PASSWORD -o %(model)s -d %(dbname)s --host=HOS
|
|||
strip_attachments=(not server.attach),
|
||||
context=context)
|
||||
if res_id and server.action_id:
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id], 'active_model': context.get("thread_model", False)})
|
||||
action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id], 'active_model': context.get("thread_model", server.object_id.model)})
|
||||
pop_server.dele(num)
|
||||
cr.commit()
|
||||
_logger.info("fetched/processed %s email(s) on %s server %s", numMsgs, server.type, server.name)
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
_logger.exception("Failed to fetch mail from %s server %s.", server.type, server.name)
|
||||
finally:
|
||||
if pop_server:
|
||||
|
|
|
@ -164,7 +164,10 @@ class partner_vat_intra(osv.osv_memory):
|
|||
'comments': comments,
|
||||
'issued_by': issued_by,
|
||||
})
|
||||
|
||||
#tax code 44: services
|
||||
#tax code 46L: normal good deliveries
|
||||
#tax code 46T: ABC good deliveries
|
||||
#tax code 48xxx: credite note on tax code xxx
|
||||
codes = ('44', '46L', '46T', '48s44', '48s46L', '48s46T')
|
||||
cr.execute('''SELECT p.name As partner_name, l.partner_id AS partner_id, p.vat AS vat,
|
||||
(CASE WHEN t.code = '48s44' THEN '44'
|
||||
|
|
|
@ -30,8 +30,11 @@ class coda_bank_account(osv.osv):
|
|||
|
||||
def _check_currency(self, cr, uid, ids, context=None):
|
||||
obj_cba = self.browse(cr, uid, ids[0], context=context)
|
||||
if (obj_cba.state == 'normal') and obj_cba.journal and (obj_cba.currency != obj_cba.journal.currency):
|
||||
return False
|
||||
if (obj_cba.state == 'normal') and obj_cba.journal:
|
||||
if obj_cba.journal.currency and (obj_cba.currency != obj_cba.journal.currency):
|
||||
return False
|
||||
if not obj_cba.journal.currency and (obj_cba.currency != obj_cba.company_id.currency_id):
|
||||
return False
|
||||
return True
|
||||
|
||||
_columns = {
|
||||
|
|
|
@ -631,12 +631,6 @@ class account_coda_import(osv.osv_memory):
|
|||
nb_err += 1
|
||||
err_string += _('\nConfiguration Error!\nPlease verify the Default Debit and Credit Account settings in journal %s.') % journal.name
|
||||
break
|
||||
if balance_start_check <> statement['balance_start']:
|
||||
nb_err += 1
|
||||
err_string += _('\nThe CODA Statement %s Starting Balance (%.2f) does not correspond with the previous Closing Balance (%.2f) in journal %s.') \
|
||||
% (statement['name'], statement['balance_start'], balance_start_check, journal.name)
|
||||
break
|
||||
|
||||
bk_st_id = bank_st_obj.create(cr, uid, {
|
||||
'name': statement['name'],
|
||||
'journal_id': statement['journal_id'],
|
||||
|
|
|
@ -58,4 +58,4 @@
|
|||
!python {model: account.invoice}: |
|
||||
from tools.test_reports import try_report
|
||||
company = self.pool.get('res.users').browse(cr, uid, uid).company_id
|
||||
company.lib_path and try_report(cr, uid, 'report.invoice_web_bvr', [ref('l10n_ch_invoice')]) or 'Webkit lib not set'
|
||||
try_report(cr, uid, 'report.invoice_web_bvr', [ref('l10n_ch_invoice')]) or 'Unable to find Webkit'
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -131,7 +131,6 @@ class wizard_user(osv.osv_memory):
|
|||
return id
|
||||
|
||||
def action_apply(self, cr, uid, ids, context=None):
|
||||
res_users = self.pool.get('res.users')
|
||||
for wizard_user in self.browse(cr, SUPERUSER_ID, ids, context):
|
||||
portal = wizard_user.wizard_id.portal_id
|
||||
user = self._retrieve_user(cr, SUPERUSER_ID, wizard_user, context)
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
<br/>
|
||||
<br/>
|
||||
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
|
||||
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
|
||||
</div>
|
||||
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
|
||||
|
@ -174,7 +174,7 @@
|
|||
<br/>
|
||||
<br/>
|
||||
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
|
||||
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
|
||||
</div>
|
||||
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
|
||||
|
|
|
@ -356,6 +356,7 @@ class project(osv.osv):
|
|||
|
||||
context['active_test'] = False
|
||||
default['state'] = 'open'
|
||||
default['line_ids'] = []
|
||||
default['tasks'] = []
|
||||
default.pop('alias_name', None)
|
||||
default.pop('alias_id', None)
|
||||
|
|
|
@ -500,7 +500,6 @@ class project_issue(base_stage, osv.osv):
|
|||
custom_values['priority'] = msg.get('priority')
|
||||
|
||||
res_id = super(project_issue, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||
# self.convert_to_bug(cr, uid, [res_id], context=context)
|
||||
return res_id
|
||||
|
||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||
|
|
|
@ -52,8 +52,8 @@ class project_issue_report(osv.osv):
|
|||
'date_closed': fields.date('Date of Closing', readonly=True),
|
||||
'stage_id': fields.many2one('project.task.type', 'Stage'),
|
||||
'nbr': fields.integer('# of Issues', readonly=True),
|
||||
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True),
|
||||
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True),
|
||||
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"),
|
||||
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True, group_operator="avg"),
|
||||
'delay_open': fields.float('Avg. Delay to Open', digits=(16,2), readonly=True, group_operator="avg",
|
||||
help="Number of Days to open the project issue."),
|
||||
'delay_close': fields.float('Avg. Delay to Close', digits=(16,2), readonly=True, group_operator="avg",
|
||||
|
|
|
@ -26,8 +26,9 @@
|
|||
<field name="auto_delete" eval="True"/>
|
||||
<field name="report_template" ref="report_purchase_quotation"/>
|
||||
<field name="report_name">RFQ_${(object.name or '').replace('/','_')}</field>
|
||||
<field name="lang">${object.partner_id.lang}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
|
||||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
|
||||
|
||||
<p>Hello${object.partner_id.name and ' ' or ''}${object.partner_id.name or ''},</p>
|
||||
|
||||
|
@ -55,7 +56,7 @@
|
|||
<br/>
|
||||
<br/>
|
||||
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
|
||||
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
|
||||
</div>
|
||||
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
<field name="res_model">purchase.requisition</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{"search_default_create_uid":uid}</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="search_view_id" ref="view_purchase_requisition_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
|
|
|
@ -50,12 +50,9 @@ class ResCompany(osv.osv):
|
|||
'html_id',
|
||||
'Available html',
|
||||
),
|
||||
'lib_path' : fields.char('Webkit Executable Path', size=264,
|
||||
help="Full path to the wkhtmltopdf executable file. "
|
||||
"Version 0.9.9 is required. Install a static version "
|
||||
"of the library if you experience missing header/footers "
|
||||
"on Linux."),
|
||||
|
||||
'lib_path' : fields.char('Webkit Executable Path (Deprecated)', size=264,
|
||||
help="This option is now deprecated in favor of autodetection of webkit location",
|
||||
invisible=1),
|
||||
}
|
||||
ResCompany()
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
<field name="arch" type="xml">
|
||||
<notebook position="inside">
|
||||
<page string="Webkit">
|
||||
<field name="lib_path" colspan="4"/>
|
||||
<separator string="Images" colspan="4"/>
|
||||
<field name="header_image" colspan="4" nolabel="1"/>
|
||||
<separator string="Headers" colspan="4"/>
|
||||
|
|
|
@ -28,8 +28,9 @@
|
|||
<field name="auto_delete" eval="True"/>
|
||||
<field name="report_template" ref="report_sale_order"/>
|
||||
<field name="report_name">${(object.name or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
|
||||
<field name="lang">${object.partner_id.lang}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
|
||||
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
|
||||
|
||||
<p>Hello${object.partner_id.name and ' ' or ''}${object.partner_id.name or ''},</p>
|
||||
|
||||
|
@ -76,7 +77,7 @@
|
|||
<br/>
|
||||
<br/>
|
||||
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #FFF;">
|
||||
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
|
||||
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
|
||||
</div>
|
||||
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
|
||||
|
|
|
@ -224,6 +224,8 @@ class share_wizard(osv.TransientModel):
|
|||
for the password field, so they can receive it by email.
|
||||
Returns the ids of the created users, and the ids of the
|
||||
ignored, existing ones."""
|
||||
if context is None:
|
||||
context = {}
|
||||
user_obj = self.pool.get('res.users')
|
||||
current_user = user_obj.browse(cr, UID_ROOT, uid, context=context)
|
||||
# modify context to disable shortcuts when creating share users
|
||||
|
@ -257,7 +259,8 @@ class share_wizard(osv.TransientModel):
|
|||
'email': new_user,
|
||||
'groups_id': [(6,0,[group_id])],
|
||||
'share': True,
|
||||
'company_id': current_user.company_id.id
|
||||
'company_id': current_user.company_id.id,
|
||||
'company_ids': [(6, 0, [current_user.company_id.id])],
|
||||
}, context)
|
||||
new_line = { 'user_id': user_id,
|
||||
'password': new_pass,
|
||||
|
@ -274,7 +277,8 @@ class share_wizard(osv.TransientModel):
|
|||
'name': new_login,
|
||||
'groups_id': [(6,0,[group_id])],
|
||||
'share': True,
|
||||
'company_id': current_user.company_id.id
|
||||
'company_id': current_user.company_id.id,
|
||||
'company_ids': [(6, 0, [current_user.company_id.id])],
|
||||
}, context)
|
||||
new_line = { 'user_id': user_id,
|
||||
'password': new_pass,
|
||||
|
|
|
@ -1144,6 +1144,9 @@ class stock_picking(osv.osv):
|
|||
for move_line in picking.move_lines:
|
||||
if move_line.state == 'cancel':
|
||||
continue
|
||||
if move_line.scrapped:
|
||||
# do no invoice scrapped products
|
||||
continue
|
||||
vals = self._prepare_invoice_line(cr, uid, group, picking, move_line,
|
||||
invoice_id, invoice_vals, context=context)
|
||||
if vals:
|
||||
|
@ -2873,7 +2876,7 @@ class stock_inventory(osv.osv):
|
|||
move_ids = []
|
||||
for line in inv.inventory_line_id:
|
||||
pid = line.product_id.id
|
||||
product_context.update(uom=line.product_uom.id, date=inv.date, prodlot_id=line.prod_lot_id.id)
|
||||
product_context.update(uom=line.product_uom.id, to_date=inv.date, date=inv.date, prodlot_id=line.prod_lot_id.id)
|
||||
amount = location_obj._product_get(cr, uid, line.location_id.id, [pid], product_context)[pid]
|
||||
change = line.product_qty - amount
|
||||
lot_id = line.prod_lot_id.id
|
||||
|
|
|
@ -804,7 +804,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Internal Picking List">
|
||||
<field name="name" string="Internal Picking List" filter_domain="['|',('name','ilike', self),('origin','ilike',self)]"/>
|
||||
<filter icon="terp-check" string="Ready" domain="[('state','=','assigned')]" help="Assigned Internal Moves"/>
|
||||
<filter icon="terp-check" name="available" string="Ready" domain="[('state','=','assigned')]" help="Assigned Internal Moves"/>
|
||||
<filter icon="terp-camera_test" name="confirmed" string="Waiting" domain="[('state','=','confirmed')]" help="Confirmed Internal Moves"/>
|
||||
<filter icon="terp-dialog-close" name="done" string="Done" domain="[('state','=','done')]" help="Pickings already processed"/>
|
||||
<field name="partner_id"/>
|
||||
|
|
|
@ -136,15 +136,15 @@ class stock_partial_picking(osv.osv_memory):
|
|||
# Currently, the cost on the product form is supposed to be expressed in the currency
|
||||
# of the company owning the product. If not set, we fall back to the picking's company,
|
||||
# which should work in simple cases.
|
||||
product_currency_id = move.product_id.company_id.currency_id and move.product_id.company_id.currency_id.id
|
||||
picking_currency_id = move.picking_id.company_id.currency_id and move.picking_id.company_id.currency_id.id
|
||||
return {'cost': move.product_id.standard_price,
|
||||
'currency': move.product_id.company_id.currency_id.id \
|
||||
or move.picking_id.company_id.currency_id.id \
|
||||
or False}
|
||||
'currency': product_currency_id or picking_currency_id or False}
|
||||
|
||||
def _partial_move_for(self, cr, uid, move):
|
||||
partial_move = {
|
||||
'product_id' : move.product_id.id,
|
||||
'quantity' : move.state in ('assigned','draft','confirmed') and move.product_qty or 0,
|
||||
'quantity' : move.product_qty if move.state in ('assigned','draft','confirmed') else 0,
|
||||
'product_uom' : move.product_uom.id,
|
||||
'prodlot_id' : move.prodlot_id.id,
|
||||
'move_id' : move.id,
|
||||
|
|
Loading…
Reference in New Issue