[MERGE]sync with trunk
bzr revid: sgo@tinyerp.com-20130312051713-cph3m3pjozii3jwn bzr revid: sgo@tinyerp.com-20130314130046-3bi97qv1628co8i3
This commit is contained in:
commit
32cb2a3509
|
@ -922,7 +922,7 @@
|
|||
</group>
|
||||
<group string="Invoices">
|
||||
<field name="account_collected_id" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="account_analytic_collected_id" domain="[('type','<>','view'), ('company_id', '=', company_id), ('parent_id', '<>', False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="account_analytic_collected_id" domain="[('type','<>','view'), ('company_id', '=', company_id)]" groups="analytic.group_analytic_accounting"/>
|
||||
|
||||
<field name="base_code_id"/>
|
||||
<field name="base_sign"/>
|
||||
|
@ -932,7 +932,7 @@
|
|||
</group>
|
||||
<group string="Refunds">
|
||||
<field name="account_paid_id" domain="[('type','<>','view'),('type','<>','consolidation')]"/>
|
||||
<field name="account_analytic_paid_id" domain="[('type','<>','view'), ('company_id', '=', company_id), ('parent_id', '<>', False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="account_analytic_paid_id" domain="[('type','<>','view'), ('company_id', '=', company_id)]" groups="analytic.group_analytic_accounting"/>
|
||||
|
||||
<field name="ref_base_code_id"/>
|
||||
<field name="ref_base_sign"/>
|
||||
|
@ -1039,7 +1039,7 @@
|
|||
<field name="blocked"/>
|
||||
</group>
|
||||
<group groups="analytic.group_analytic_accounting" string="Analytic">
|
||||
<field name="analytic_account_id" domain="[('parent_id','!=',False)]"/>
|
||||
<field name="analytic_account_id" domain="[('type','in',('normal','contract'))]"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="narration" colspan="4" nolabel="1" placeholder="Add an internal note..."/>
|
||||
|
@ -1084,7 +1084,7 @@
|
|||
<field name="blocked"/>
|
||||
<newline/>
|
||||
<field name="account_tax_id" domain="[('parent_id','=',False)]"/>
|
||||
<field name="analytic_account_id" domain="[('parent_id','!=',False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
|
||||
<separator colspan="4" string="Status"/>
|
||||
<newline/>
|
||||
<field name="reconcile_id"/>
|
||||
|
@ -1336,7 +1336,7 @@
|
|||
</group>
|
||||
|
||||
<group groups="analytic.group_analytic_accounting" string="Analytic">
|
||||
<field name="analytic_account_id" domain="[('parent_id','!=',False)]"/>
|
||||
<field name="analytic_account_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Internal Note"/>
|
||||
|
@ -1355,7 +1355,7 @@
|
|||
<field name="date_maturity"/>
|
||||
<field name="debit" sum="Total Debit"/>
|
||||
<field name="credit" sum="Total Credit"/>
|
||||
<field name="analytic_account_id" domain="[('parent_id','!=',False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="amount_currency"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency"/>
|
||||
<field name="tax_code_id"/>
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
<field name="complete_name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="code"/>
|
||||
<field name="date"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="manager_id"/>
|
||||
<field name="parent_id" invisible="1"/>
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
# Spanish (Colombia) 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:04+0000\n"
|
||||
"PO-Revision-Date: 2013-03-11 19:01+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Spanish (Colombia) <es_CO@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-03-12 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16524)\n"
|
||||
|
||||
#. module: account_accountant
|
||||
#: model:ir.actions.client,name:account_accountant.action_client_account_menu
|
||||
msgid "Open Accounting Menu"
|
||||
msgstr "Abrir Menú de Contabilidad"
|
|
@ -45,6 +45,7 @@ Adds menu to show relevant information to each manager.You can also view the rep
|
|||
'static/src/css/analytic.css'
|
||||
],
|
||||
'demo': ['analytic_account_demo.xml'],
|
||||
'test': ['test/account_analytic_analysis.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from dateutil.relativedelta import relativedelta
|
||||
import datetime
|
||||
import logging
|
||||
import time
|
||||
|
@ -31,6 +32,58 @@ from openerp.addons.decimal_precision import decimal_precision as dp
|
|||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class account_analytic_invoice_line(osv.osv):
|
||||
_name = "account.analytic.invoice.line"
|
||||
|
||||
def _amount_line(self, cr, uid, ids, prop, unknow_none, unknow_dict, context=None):
|
||||
res = {}
|
||||
for line in self.browse(cr, uid, ids, context=context):
|
||||
res[line.id] = line.quantity * line.price_unit
|
||||
if line.analytic_account_id.pricelist_id:
|
||||
cur = line.analytic_account_id.pricelist_id.currency_id
|
||||
res[line.id] = self.pool.get('res.currency').round(cr, uid, cur, res[line.id])
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'product_id': fields.many2one('product.product','Product',required=True),
|
||||
'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||
'name': fields.text('Description', required=True),
|
||||
'quantity': fields.float('Quantity', required=True),
|
||||
'uom_id': fields.many2one('product.uom', 'Unit of Measure',required=True),
|
||||
'price_unit': fields.float('Unit Price', required=True),
|
||||
'price_subtotal': fields.function(_amount_line, string='Sub Total', type="float",digits_compute= dp.get_precision('Account')),
|
||||
}
|
||||
_defaults = {
|
||||
'quantity' : 1,
|
||||
}
|
||||
|
||||
def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', partner_id=False, price_unit=False, pricelist_id=False, company_id=None, context=None):
|
||||
context = context or {}
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
company_id = company_id or False
|
||||
context.update({'company_id': company_id, 'force_company': company_id, 'pricelist_id': pricelist_id})
|
||||
|
||||
if not product:
|
||||
return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}}
|
||||
if partner_id:
|
||||
part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||
if part.lang:
|
||||
context.update({'lang': part.lang})
|
||||
|
||||
result = {}
|
||||
res = self.pool.get('product.product').browse(cr, uid, product, context=context)
|
||||
result.update({'name':res.partner_ref or False,'uom_id': uom_id or res.uom_id.id or False, 'price_unit': res.list_price or 0.0})
|
||||
if res.description:
|
||||
result['name'] += '\n'+res.description
|
||||
|
||||
res_final = {'value':result}
|
||||
if result['uom_id'] != res.uom_id.id:
|
||||
selected_uom = uom_obj.browse(cr, uid, result['uom_id'], context=context)
|
||||
new_price = uom_obj._compute_price(cr, uid, res.uom_id.id, res_final['value']['price_unit'], result['uom_id'])
|
||||
res_final['value']['price_unit'] = new_price
|
||||
return res_final
|
||||
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = "account.analytic.account"
|
||||
_inherit = "account.analytic.account"
|
||||
|
@ -215,6 +268,8 @@ class account_analytic_account(osv.osv):
|
|||
GROUP BY account_analytic_line.account_id", (child_ids,))
|
||||
for account_id, sum in cr.fetchall():
|
||||
res[account_id] = round(sum,2)
|
||||
for acc in self.browse(cr, uid, res.keys(), context=context):
|
||||
res[acc.id] = res[acc.id] - (acc.timesheet_ca_invoiced or 0.0)
|
||||
res_final = res
|
||||
return res_final
|
||||
|
||||
|
@ -295,7 +350,7 @@ class account_analytic_account(osv.osv):
|
|||
res = {}
|
||||
for account in self.browse(cr, uid, ids, context=context):
|
||||
res[account.id] = 0.0
|
||||
sale_ids = sale_obj.search(cr, uid, [('project_id','=', account.id), ('partner_id', '=', account.partner_id.id)], context=context)
|
||||
sale_ids = sale_obj.search(cr, uid, [('project_id','=', account.id), ('state', '=', 'manual')], context=context)
|
||||
for sale in sale_obj.browse(cr, uid, sale_ids, context=context):
|
||||
if not sale.invoiced:
|
||||
res[account.id] += sale.amount_untaxed
|
||||
|
@ -456,6 +511,22 @@ class account_analytic_account(osv.osv):
|
|||
'invoiced_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total Invoiced"),
|
||||
'remaining_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total Remaining", help="Expectation of remaining income for this contract. Computed as the sum of remaining subtotals which, in turn, are computed as the maximum between '(Estimation - Invoiced)' and 'To Invoice' amounts"),
|
||||
'toinvoice_total' : fields.function(_sum_of_fields, type="float",multi="sum_of_all", string="Total to Invoice", help=" Sum of everything that could be invoiced for this contract."),
|
||||
'recurring_invoice_line_ids': fields.one2many('account.analytic.invoice.line', 'analytic_account_id', 'Invoice Lines'),
|
||||
'recurring_invoices' : fields.boolean('Generate recurring invoices automatically'),
|
||||
'recurring_rule_type': fields.selection([
|
||||
('daily', 'Day(s)'),
|
||||
('weekly', 'Week(s)'),
|
||||
('monthly', 'Month(s)'),
|
||||
('yearly', 'Year(s)'),
|
||||
], 'Recurrency', help="Invoice automatically repeat at specified interval"),
|
||||
'recurring_interval': fields.integer('Repeat Every', help="Repeat every (Days/Week/Month/Year)"),
|
||||
'recurring_next_date': fields.date('Date of Next Invoice'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'recurring_interval': 1,
|
||||
'recurring_next_date': lambda *a: time.strftime('%Y-%m-%d'),
|
||||
'recurring_rule_type':'monthly'
|
||||
}
|
||||
|
||||
def open_sale_order_lines(self,cr,uid,ids,context=None):
|
||||
|
@ -478,17 +549,38 @@ class account_analytic_account(osv.osv):
|
|||
def on_change_template(self, cr, uid, ids, template_id, context=None):
|
||||
if not template_id:
|
||||
return {}
|
||||
obj_analytic_line = self.pool.get('account.analytic.invoice.line')
|
||||
res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, context=context)
|
||||
if template_id and 'value' in res:
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
res['value']['fix_price_invoices'] = template.fix_price_invoices
|
||||
res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets
|
||||
res['value']['hours_qtt_est'] = template.hours_qtt_est
|
||||
res['value']['amount_max'] = template.amount_max
|
||||
res['value']['to_invoice'] = template.to_invoice.id
|
||||
res['value']['pricelist_id'] = template.pricelist_id.id
|
||||
|
||||
template = self.browse(cr, uid, template_id, context=context)
|
||||
invoice_line_ids = []
|
||||
for x in template.recurring_invoice_line_ids:
|
||||
invoice_line_ids.append((0, 0, {
|
||||
'product_id': x.product_id.id,
|
||||
'uom_id': x.uom_id.id,
|
||||
'name': x.name,
|
||||
'quantity': x.quantity,
|
||||
'price_unit': x.price_unit,
|
||||
'analytic_account_id': x.analytic_account_id and x.analytic_account_id.id or False,
|
||||
}))
|
||||
res['value']['fix_price_invoices'] = template.fix_price_invoices
|
||||
res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets
|
||||
res['value']['hours_qtt_est'] = template.hours_qtt_est
|
||||
res['value']['amount_max'] = template.amount_max
|
||||
res['value']['to_invoice'] = template.to_invoice.id
|
||||
res['value']['pricelist_id'] = template.pricelist_id.id
|
||||
res['value']['recurring_invoices'] = template.recurring_invoices
|
||||
res['value']['recurring_interval'] = template.recurring_interval
|
||||
res['value']['recurring_rule_type'] = template.recurring_rule_type
|
||||
res['value']['recurring_invoice_line_ids'] = invoice_line_ids
|
||||
return res
|
||||
|
||||
def onchange_recurring_invoices(self, cr, uid, ids, recurring_invoices, date_start=False, context=None):
|
||||
value = {}
|
||||
if date_start and recurring_invoices:
|
||||
value = {'value': {'recurring_next_date': date_start}}
|
||||
return value
|
||||
|
||||
def cron_account_analytic_account(self, cr, uid, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
@ -527,10 +619,101 @@ class account_analytic_account(osv.osv):
|
|||
for user_id, data in remind.items():
|
||||
context["data"] = data
|
||||
_logger.debug("Sending reminder to uid %s", user_id)
|
||||
self.pool.get('email.template').send_mail(cr, uid, template_id, user_id, context=context)
|
||||
self.pool.get('email.template').send_mail(cr, uid, template_id, user_id, force_send=True, context=context)
|
||||
|
||||
return True
|
||||
|
||||
def onchange_invoice_on_timesheets(self, cr, uid, ids, invoice_on_timesheets, context=None):
|
||||
if not invoice_on_timesheets:
|
||||
return {}
|
||||
result = {'value': {'use_timesheets': True}}
|
||||
try:
|
||||
to_invoice = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'hr_timesheet_invoice', 'timesheet_invoice_factor1')
|
||||
result['value']['to_invoice'] = to_invoice[1]
|
||||
except ValueError:
|
||||
pass
|
||||
return result
|
||||
|
||||
def _prepare_invoice(self, cr, uid, contract, context=None):
|
||||
context = context or {}
|
||||
|
||||
inv_obj = self.pool.get('account.invoice')
|
||||
journal_obj = self.pool.get('account.journal')
|
||||
fpos_obj = self.pool.get('account.fiscal.position')
|
||||
|
||||
if not contract.partner_id:
|
||||
raise osv.except_osv(_('No Customer Defined !'),_("You must first select a Customer for Contract %s!") % contract.name )
|
||||
|
||||
fpos = contract.partner_id.property_account_position.id or False
|
||||
journal_ids = journal_obj.search(cr, uid, [('type', '=','sale'),('company_id', '=', contract.company_id.id or False)], limit=1)
|
||||
if not journal_ids:
|
||||
raise osv.except_osv(_('Error!'),
|
||||
_('Please define a sale journal for the company "%s".') % (contract.company_id.name or '', ))
|
||||
|
||||
partner_payment_term = contract.partner_id.property_payment_term and contract.partner_id.property_payment_term.id or False
|
||||
|
||||
|
||||
inv_data = {
|
||||
'reference': contract.code or False,
|
||||
'account_id': contract.partner_id.property_account_receivable.id,
|
||||
'type': 'out_invoice',
|
||||
'partner_id': contract.partner_id.id,
|
||||
'currency_id': contract.partner_id.property_product_pricelist.id or False,
|
||||
'journal_id': len(journal_ids) and journal_ids[0] or False,
|
||||
'date_invoice': contract.recurring_next_date,
|
||||
'origin': contract.name,
|
||||
'fiscal_position': fpos,
|
||||
'payment_term': partner_payment_term,
|
||||
'company_id': contract.company_id.id or False,
|
||||
}
|
||||
invoice_id = inv_obj.create(cr, uid, inv_data, context=context)
|
||||
|
||||
for line in contract.recurring_invoice_line_ids:
|
||||
|
||||
res = line.product_id
|
||||
account_id = res.property_account_income.id
|
||||
if not account_id:
|
||||
account_id = res.categ_id.property_account_income_categ.id
|
||||
account_id = fpos_obj.map_account(cr, uid, fpos, account_id)
|
||||
|
||||
taxes = res.taxes_id and res.taxes_id or False
|
||||
tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes)
|
||||
|
||||
invoice_line_vals = {
|
||||
'name': line.name,
|
||||
'account_id': account_id,
|
||||
'account_analytic_id': contract.id,
|
||||
'price_unit': line.price_unit or 0.0,
|
||||
'quantity': line.quantity,
|
||||
'uos_id': line.uom_id.id or False,
|
||||
'product_id': line.product_id.id or False,
|
||||
'invoice_id' : invoice_id,
|
||||
'invoice_line_tax_id': [(6, 0, tax_id)],
|
||||
}
|
||||
self.pool.get('account.invoice.line').create(cr, uid, invoice_line_vals, context=context)
|
||||
|
||||
inv_obj.button_compute(cr, uid, [invoice_id], context=context)
|
||||
return invoice_id
|
||||
|
||||
def recurring_create_invoice(self, cr, uid, automatic=False, context=None):
|
||||
context = context or {}
|
||||
current_date = time.strftime('%Y-%m-%d')
|
||||
|
||||
contract_ids = self.search(cr, uid, [('recurring_next_date','<=', current_date), ('state','=', 'open'), ('recurring_invoices','=', True)])
|
||||
for contract in self.browse(cr, uid, contract_ids, context=context):
|
||||
invoice_id = self._prepare_invoice(cr, uid, contract, context=context)
|
||||
|
||||
next_date = datetime.datetime.strptime(contract.recurring_next_date or current_date, "%Y-%m-%d")
|
||||
interval = contract.recurring_interval
|
||||
if contract.recurring_rule_type == 'daily':
|
||||
new_date = next_date+relativedelta(days=+interval)
|
||||
elif contract.recurring_rule_type == 'weekly':
|
||||
new_date = next_date+relativedelta(weeks=+interval)
|
||||
else:
|
||||
new_date = next_date+relativedelta(months=+interval)
|
||||
self.write(cr, uid, [contract.id], {'recurring_next_date': new_date.strftime('%Y-%m-%d')}, context=context)
|
||||
return True
|
||||
|
||||
class account_analytic_account_summary_user(osv.osv):
|
||||
_name = "account_analytic_analysis.summary.user"
|
||||
_description = "Hours Summary by User"
|
||||
|
|
|
@ -73,5 +73,16 @@ Hello ${object.name},
|
|||
<field name="function" eval="'cron_account_analytic_account'"/>
|
||||
<field name="args" eval="'()'" />
|
||||
</record>
|
||||
|
||||
<record model="ir.cron" id="account_analytic_cron_for_invoice">
|
||||
<field name="name">Generate Recurring Invoices from Contracts</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="model" eval="'account.analytic.account'"/>
|
||||
<field name="function" eval="'recurring_create_invoice'"/>
|
||||
<field name="args" eval="'()'"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -5,6 +5,15 @@
|
|||
<field name="name">Sales Orders</field>
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="src_model">account.analytic.account</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a quotation that can be converted into a sales
|
||||
order.
|
||||
</p><p>
|
||||
Use sale orders to track everything that should be invoiced
|
||||
at a fix price on a contract.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Inherited Analytic Account form for contracts -->
|
||||
|
@ -26,6 +35,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
<field name="partner_id" position="attributes">
|
||||
<attribute name="attrs">{'required': [('type','=','contract'),'|','|',('fix_price_invoices','=',True), ('invoice_on_timesheets', '=', True), ('recurring_invoices', '=', True)]}</attribute>
|
||||
</field>
|
||||
<xpath expr='//group[@name="invoice_on_timesheets"]' position="replace">
|
||||
</xpath>
|
||||
<xpath expr='//separator[@name="description"]' position='before'>
|
||||
|
@ -62,20 +74,20 @@
|
|||
or view
|
||||
</span>
|
||||
|
||||
<span attrs="{'invisible': ['|',('fix_price_to_invoice','<>',0.0 ),('partner_id','=',False)]}" class="oe_grey">
|
||||
<span attrs="{'invisible': [('fix_price_to_invoice','<>',0.0 )]}" class="oe_grey">
|
||||
No order to invoice, create
|
||||
</span>
|
||||
<button name="%(action_sales_order)d" string="Sale Orders"
|
||||
<button name="%(action_sales_order)d" string="Sales Orders"
|
||||
type="action"
|
||||
class="oe_link"
|
||||
context="{'default_partner_id': [partner_id], 'search_default_partner_id': [partner_id],'search_default_project_id': [active_id],'default_project_id': [active_id]}"
|
||||
context="{'default_partner_id': [partner_id], 'search_default_project_id': [active_id],'default_project_id': [active_id]}"
|
||||
/>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td class="oe_timesheet_grey">
|
||||
<label for="invoice_on_timesheets"/>
|
||||
</td><td class="oe_timesheet_grey">
|
||||
<field name="invoice_on_timesheets"/>
|
||||
<field name="invoice_on_timesheets" on_change="onchange_invoice_on_timesheets(invoice_on_timesheets)"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="hours_qtt_est" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td>
|
||||
|
@ -84,7 +96,7 @@
|
|||
<field class="oe_inline" name="remaining_hours_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td>
|
||||
<field class="oe_inline" name="ca_to_invoice" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</td><td class="oe_timesheet_action" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}">
|
||||
</td><td class="oe_timesheet_action" attrs="{'invisible': ['|',('invoice_on_timesheets','=',False),('type','=','template')]}">
|
||||
<span attrs="{'invisible': [('ca_to_invoice','=',0.0)]}" class="oe_grey">
|
||||
<button name="%(hr_timesheet_invoice.action_hr_timesheet_invoice_create_final)d"
|
||||
type="action"
|
||||
|
@ -117,8 +129,8 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<group name='invoice_on_timesheets' attrs="{'invisible': [('invoice_on_timesheets','=',False)]}">
|
||||
<p class="oe_grey oe_edit_only" colspan="2">
|
||||
<group name='invoice_on_timesheets'>
|
||||
<p class="oe_grey oe_edit_only" colspan="2" attrs="{'invisible': [('invoice_on_timesheets','=',False)]}">
|
||||
When invoicing on timesheet, OpenERP uses the
|
||||
pricelist of the contract which uses the price
|
||||
defined on the product related to each employee to
|
||||
|
@ -131,9 +143,36 @@
|
|||
<field name="to_invoice"
|
||||
class="oe_inline"
|
||||
widget="selection"
|
||||
attrs="{'required': [('invoice_on_timesheets', '=', True)]}"/>
|
||||
attrs="{'required': [('invoice_on_timesheets', '=', True)], 'invisible': [('invoice_on_timesheets','=',False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/>
|
||||
<div>
|
||||
<field name="recurring_invoices" on_change="onchange_recurring_invoices(recurring_invoices, date_start)" class="oe_inline"/>
|
||||
<label for="recurring_invoices" />
|
||||
<button class="oe_link" name="recurring_create_invoice" attrs="{'invisible': [('recurring_invoices','!=',True)]}" string="⇒ create invoices" type="object" groups="base.group_no_one"/>
|
||||
</div>
|
||||
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}">
|
||||
<label for="recurring_interval"/>
|
||||
<div>
|
||||
<field name="recurring_interval" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/>
|
||||
<field name="recurring_rule_type" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/>
|
||||
</div>
|
||||
<field name="recurring_next_date"/>
|
||||
</group>
|
||||
<label for="recurring_invoice_line_ids" attrs="{'invisible': [('recurring_invoices','=',False)]}"/>
|
||||
<div attrs="{'invisible': [('recurring_invoices','=',False)]}">
|
||||
<field name="recurring_invoice_line_ids">
|
||||
<tree string="Account Analytic Lines" editable="bottom">
|
||||
<field name="product_id" on_change="product_id_change(product_id, uom_id, quantity, name, parent.partner_id, price_unit, parent.pricelist_id, parent.company_id)"/>
|
||||
<field name="name"/>
|
||||
<field name="quantity"/>
|
||||
<field name="uom_id"/>
|
||||
<field name="price_unit"/>
|
||||
<field name="price_subtotal"/>
|
||||
</tree>
|
||||
</field>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -157,7 +196,7 @@
|
|||
<field name="model">account.analytic.account</field>
|
||||
<field name="inherit_id" ref="account.view_account_analytic_account_list"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="date" position="before">
|
||||
<field name="date_start" position="before">
|
||||
<field name="last_invoice_date"/>
|
||||
<field name="toinvoice_total"/>
|
||||
<field name="remaining_hours"/>
|
||||
|
|
|
@ -33,9 +33,11 @@
|
|||
|
||||
<record id="sale.sale_order_6" model="sale.order">
|
||||
<field name="project_id" ref="account.analytic_super_product_trainings"/>
|
||||
<field name="partner_id" ref="base.res_partner_1"/>
|
||||
</record>
|
||||
|
||||
<record id="account.analytic_support_internal" model="account.analytic.account">
|
||||
<field name="partner_id" ref="base.res_partner_1"/>
|
||||
<field name="use_timesheets">True</field>
|
||||
<field name="invoice_on_timesheets">True</field>
|
||||
<field name="hours_qtt_est">100</field>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<record id="group_template_required" model="res.groups">
|
||||
<field name="name">Mandatory use of templates in contracts</field>
|
||||
<field name="category_id" ref="base.module_category_sales_management"/>
|
||||
<field name="category_id" ref="base.module_category_hidden"/>
|
||||
<field name="comment">the field template of the analytic accounts and contracts will be required.</field>
|
||||
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
|
||||
</record>
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_account_analytic_analysis_summary_user_sale,account_analytic_analysis.summary.user sale,model_account_analytic_analysis_summary_user,base.group_sale_salesman,1,0,0,0
|
||||
access_account_analytic_analysis_summary_month_sale,account_analytic_analysis.summary.month sale,model_account_analytic_analysis_summary_month,base.group_sale_salesman,1,0,0,0
|
||||
access_account_analytic_analysis_summary_user,account_analytic_analysis.summary.user,model_account_analytic_analysis_summary_user,account.group_account_manager,1,0,0,0
|
||||
access_account_analytic_analysis_summary_month,account_analytic_analysis.summary.month,model_account_analytic_analysis_summary_month,account.group_account_manager,1,0,0,0
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_account_analytic_analysis_summary_user_sale,account_analytic_analysis.summary.user sale,model_account_analytic_analysis_summary_user,base.group_sale_salesman,1,0,0,0
|
||||
access_account_analytic_analysis_summary_month_sale,account_analytic_analysis.summary.month sale,model_account_analytic_analysis_summary_month,base.group_sale_salesman,1,0,0,0
|
||||
access_account_analytic_analysis_summary_user,account_analytic_analysis.summary.user,model_account_analytic_analysis_summary_user,account.group_account_manager,1,0,0,0
|
||||
access_account_analytic_analysis_summary_month,account_analytic_analysis.summary.month,model_account_analytic_analysis_summary_month,account.group_account_manager,1,0,0,0
|
||||
access_edi_edi,access_edi_edi,edi.model_edi_edi,account.group_account_manager,1,1,1,1
|
||||
access_account_analytic_invoice_line,account_analytic_invoice_line.user,model_account_analytic_invoice_line,account.group_account_user,1,1,1,1
|
||||
access_account_analytic_invoice_line,account_analytic_invoice_line.user,model_account_analytic_invoice_line,base.group_sale_salesman,1,1,1,1
|
||||
|
|
|
|
@ -0,0 +1,44 @@
|
|||
-
|
||||
In order to test Contract Recurrent Invoice I create a new Contract Template
|
||||
-
|
||||
!record {model: account.analytic.account, id: contract_template}:
|
||||
name: Maintenance of Servers
|
||||
company_id: base.main_company
|
||||
partner_id: base.main_partner
|
||||
type: template
|
||||
recurring_invoices : 1
|
||||
recurring_interval : 1
|
||||
recurring_invoice_line_ids:
|
||||
- quantity: 2.0
|
||||
price_unit: 75.0
|
||||
name: Database Administration
|
||||
product_id: product.product_product_consultant
|
||||
uom_id: product.product_uom_hour
|
||||
-
|
||||
I create a contract based on this template
|
||||
-
|
||||
!record {model: account.analytic.account, id: contract_main}:
|
||||
partner_id: base.main_partner
|
||||
template_id: account_analytic_analysis.contract_template
|
||||
-
|
||||
I check that the contract inherited from data of the template
|
||||
-
|
||||
!python {model: account.analytic.account}: |
|
||||
contract = self.browse(cr, uid, ref('account_analytic_analysis.contract_main'))
|
||||
template = self.browse(cr, uid, ref('account_analytic_analysis.contract_template'))
|
||||
assert template.recurring_interval == contract.recurring_interval, "The recurring interval of the contract does not match with the contract template"
|
||||
assert template.recurring_invoices == contract.recurring_invoices, "Invoice method of contract does not match with the contract template"
|
||||
-
|
||||
I generate all invoices from contracts having recurring invoicing
|
||||
-
|
||||
!python {model: account.analytic.account}: |
|
||||
self.recurring_create_invoice(cr, uid)
|
||||
-
|
||||
I test the generated invoice
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
aid = ref('account_analytic_analysis.contract_main')
|
||||
ids = self.search(cr, uid, [('invoice_line.account_analytic_id','=',aid)], context=context)
|
||||
assert len(ids)>=1, 'No invoice created for the contract'
|
||||
for invoice in self.browse(cr, uid, ids,context=context):
|
||||
assert invoice.amount_untaxed == 150.0, "The invoice total is different than 150!"
|
|
@ -7,7 +7,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<tree string="Analytic Defaults">
|
||||
<field name="sequence"/>
|
||||
<field name="analytic_id" required="0" domain="[('parent_id','!=',False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_id" required="0" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="product_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
|
@ -24,7 +24,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Analytic Defaults" version="7.0">
|
||||
<group col="4">
|
||||
<field name="analytic_id" required="1" domain="[('parent_id','!=',False)]" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="analytic_id" required="1" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="sequence"/>
|
||||
<separator string="Conditions" colspan="4"/>
|
||||
<field name="product_id"/>
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
<field name="crossovered_budget_line" widget="one2many_list" mode="tree">
|
||||
<tree string="Budget Lines" editable="top">
|
||||
<field name="crossovered_budget_id"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="paid_date"/>
|
||||
|
@ -72,7 +72,7 @@
|
|||
<form string="Budget Lines" version="7.0">
|
||||
<group col="4">
|
||||
<field name="crossovered_budget_id"/>
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]" />
|
||||
<field name="analytic_account_id" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="paid_date"/>
|
||||
|
|
|
@ -426,6 +426,14 @@ class res_partner(osv.osv):
|
|||
return [('id','=','0')]
|
||||
return [('id','in', [x[0] for x in res])]
|
||||
|
||||
def _get_partners(self, cr, uid, ids, context=None):
|
||||
#this function search for the partners linked to all account.move.line 'ids' that have been changed
|
||||
partners = set()
|
||||
for aml in self.browse(cr, uid, ids, context=context):
|
||||
if aml.partner_id:
|
||||
partners.add(aml.partner_id.id)
|
||||
return list(partners)
|
||||
|
||||
_inherit = "res.partner"
|
||||
_columns = {
|
||||
'payment_responsible_id':fields.many2one('res.users', ondelete='set null', string='Follow-up Responsible',
|
||||
|
@ -447,12 +455,18 @@ class res_partner(osv.osv):
|
|||
'latest_followup_level_id':fields.function(_get_latest, method=True,
|
||||
type='many2one', relation='account_followup.followup.line', string="Latest Follow-up Level",
|
||||
help="The maximum follow-up level",
|
||||
store=False,
|
||||
store={
|
||||
'res.partner': (lambda self, cr, uid, ids, c: ids,[],10),
|
||||
'account.move.line': (_get_partners, ['followup_line_id'], 10),
|
||||
},
|
||||
multi="latest"),
|
||||
'latest_followup_level_id_without_lit':fields.function(_get_latest, method=True,
|
||||
type='many2one', relation='account_followup.followup.line', string="Latest Follow-up Level without litigation",
|
||||
help="The maximum follow-up level without taking into account the account move lines with litigation",
|
||||
store=False,
|
||||
store={
|
||||
'res.partner': (lambda self, cr, uid, ids, c: ids,[],10),
|
||||
'account.move.line': (_get_partners, ['followup_line_id'], 10),
|
||||
},
|
||||
multi="latest"),
|
||||
'payment_amount_due':fields.function(_get_amounts_and_date,
|
||||
type='float', string="Amount Due",
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
<field name="parent_id" invisible="1"/>
|
||||
<field name="payment_responsible_id"/>
|
||||
<field name="payment_earliest_due_date"/>
|
||||
<field name="latest_followup_level_id"/>
|
||||
<field name="payment_amount_overdue"/>
|
||||
<field name="payment_amount_due" />
|
||||
</tree>
|
||||
|
@ -39,6 +40,7 @@
|
|||
</group>
|
||||
<group expand="1" string="Group By...">
|
||||
<filter string="Follow-up Responsible" context="{'group_by':'payment_responsible_id'}"/>
|
||||
<filter String="Followup Level" context="{'group_by':'latest_followup_level_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
|
@ -194,7 +194,7 @@ class account_analytic_account(osv.osv):
|
|||
'user_id': fields.many2one('res.users', 'Project Manager'),
|
||||
'manager_id': fields.many2one('res.users', 'Account Manager'),
|
||||
'date_start': fields.date('Start Date'),
|
||||
'date': fields.date('Date End', select=True),
|
||||
'date': fields.date('End Date', select=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=False), #not required because we want to allow different companies to use the same chart of account, except for leaf accounts.
|
||||
'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'),('pending','To Renew'),('close','Closed'),('cancelled', 'Cancelled')], 'Status', required=True, track_visibility='onchange'),
|
||||
'currency_id': fields.function(_currency, fnct_inv=_set_company_currency, #the currency_id field is readonly except if it's a view account and if there is no company
|
||||
|
|
|
@ -22,6 +22,8 @@ from openerp.osv import fields, osv
|
|||
from openerp.osv.orm import intersect
|
||||
from openerp.tools.translate import _
|
||||
|
||||
from openerp.addons.decimal_precision import decimal_precision as dp
|
||||
|
||||
class account_analytic_account(osv.osv):
|
||||
_name = "account.analytic.account"
|
||||
_inherit = "account.analytic.account"
|
||||
|
@ -91,6 +93,11 @@ class account_analytic_account(osv.osv):
|
|||
res[account.id] += line.invoice_id.amount_untaxed
|
||||
return res
|
||||
|
||||
def _ca_invoiced_calc(self, cr, uid, ids, name, arg, context=None):
|
||||
result = super(account_analytic_account, self)._ca_invoiced_calc(cr, uid, ids, name, arg, context=context)
|
||||
for acc in self.browse(cr, uid, result.keys(), context=context):
|
||||
result[acc.id] = result[acc.id] - (acc.expense_invoiced or 0.0)
|
||||
return result
|
||||
|
||||
_columns = {
|
||||
'charge_expenses' : fields.boolean('Charge Expenses'),
|
||||
|
@ -98,6 +105,9 @@ class account_analytic_account(osv.osv):
|
|||
'expense_to_invoice' : fields.function(_expense_to_invoice_calc, type='float'),
|
||||
'remaining_expense' : fields.function(_remaining_expnse_calc, type="float"),
|
||||
'est_expenses': fields.float('Estimation of Expenses to Invoice'),
|
||||
'ca_invoiced': fields.function(_ca_invoiced_calc, type='float', string='Invoiced Amount',
|
||||
help="Total customer invoiced amount for this account.",
|
||||
digits_compute=dp.get_precision('Account')),
|
||||
}
|
||||
|
||||
def on_change_template(self, cr, uid, id, template_id, context=None):
|
||||
|
|
|
@ -42,12 +42,12 @@ class analytic_user_funct_grid(osv.osv):
|
|||
return {}
|
||||
|
||||
value = {}
|
||||
if product_id:
|
||||
prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
||||
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
|
||||
if emp.product_id and not product_id:
|
||||
value['product_id'] = emp.product_id.id
|
||||
prod = emp.product_id
|
||||
if product_id:
|
||||
prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
||||
if prod:
|
||||
value['price'] = prod.list_price
|
||||
value['uom_id'] = prod.uom_id.id
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<field name="user_id" on_change="onchange_user_product_id(user_id, product_id)"/>
|
||||
<field name="product_id" on_change="onchange_user_product_id(user_id, product_id)" domain="[('type','=','service')]"/>
|
||||
<field name="price"/>
|
||||
<field name="uom_id"/>
|
||||
<field name="uom_id" groups="product.group_uom"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -25,7 +25,7 @@
|
|||
<field name="user_id" on_change="onchange_user_product_id(user_id, product_id)"/>
|
||||
<field name="product_id" domain="[('type','=','service')]" on_change="onchange_user_product_id(user_id, product_id)"/>
|
||||
<field name="price"/>
|
||||
<field name="uom_id"/>
|
||||
<field name="uom_id" groups="product.group_uom"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<!-- add Reset Password button -->
|
||||
<xpath expr="//div[@class='oe_right oe_button_box']" position="replace">
|
||||
<div class="oe_right oe_button_box">
|
||||
<button string="Send reset password instructions by email"
|
||||
<button string="Send Reset Password Instructions"
|
||||
type="object" name="action_reset_password" />
|
||||
</div>
|
||||
</xpath>
|
||||
|
|
|
@ -19,29 +19,36 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import urllib
|
||||
import random
|
||||
|
||||
try:
|
||||
import simplejson as json
|
||||
except ImportError:
|
||||
import json # noqa
|
||||
|
||||
from openerp.osv import osv
|
||||
from openerp.osv import fields
|
||||
import urllib,re
|
||||
import random, time
|
||||
from openerp.tools.translate import _
|
||||
from openerp import tools
|
||||
|
||||
def geo_find(addr):
|
||||
addr = addr.encode('utf8')
|
||||
regex = '<coordinates>([+-]?[0-9\.]+),([+-]?[0-9\.]+),([+-]?[0-9\.]+)</coordinates>'
|
||||
url = 'http://maps.google.com/maps/geo?q=' + urllib.quote(addr) + '&output=xml&oe=utf8&sensor=false'
|
||||
url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
|
||||
url += urllib.quote(addr.encode('utf8'))
|
||||
|
||||
try:
|
||||
xml = urllib.urlopen(url).read()
|
||||
result = json.load(urllib.urlopen(url))
|
||||
except Exception, e:
|
||||
raise osv.except_osv(_('Network error'),
|
||||
_('Cannot contact geolocation servers. Please make sure that your internet connection is up and running (%s).') % e)
|
||||
if result['status'] != 'OK':
|
||||
return None
|
||||
|
||||
if '<error>' in xml:
|
||||
try:
|
||||
geo = result['results'][0]['geometry']['location']
|
||||
return float(geo['lat']), float(geo['lng'])
|
||||
except (KeyError, ValueError):
|
||||
return None
|
||||
result = re.search(regex, xml, re.M|re.I)
|
||||
if not result:
|
||||
return None
|
||||
return float(result.group(2)),float(result.group(1))
|
||||
|
||||
def geo_query_address(street=None, zip=None, city=None, state=None, country=None):
|
||||
if country and ',' in country and (country.endswith(' of') or country.endswith(' of the')):
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
-
|
||||
!python {model: res.partner}: |
|
||||
partner = self.browse(cr, uid, ref('base.res_partner_2'))
|
||||
assert 50 < partner.partner_latitude < 51 , "Latitude is wrong"
|
||||
assert 3 < partner.partner_longitude < 5 , "Longitude is wrong"
|
||||
assert 50 < partner.partner_latitude < 51, "Latitude is wrong: 50 < %s < 51" % partner.partner_latitude
|
||||
assert 3 < partner.partner_longitude < 5, "Longitude is wrong: 3 < %s < 5" % partner.partner_longitude
|
||||
-
|
||||
I assign nearest partner to opportunity.
|
||||
-
|
||||
|
@ -23,8 +23,8 @@
|
|||
!python {model: crm.lead}: |
|
||||
lead = self.browse(cr, uid, ref('crm.crm_case_19'))
|
||||
assert lead.partner_assigned_id.id == ref('base.res_partner_15') , "Opportuniy is not assigned nearest partner"
|
||||
assert 50 < lead.partner_latitude < 55 , "Latitude is wrong"
|
||||
assert -5 < lead.partner_longitude < 0, "Longitude is wrong"
|
||||
assert 50 < lead.partner_latitude < 55, "Latitude is wrong: 50 < %s < 55" % lead.partner_latitude
|
||||
assert -4 < lead.partner_longitude < -1, "Longitude is wrong: -4 < %s < -1" % lead.partner_longitude
|
||||
-
|
||||
I forward this opportunity to its nearest partner.
|
||||
-
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
# 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-12-21 17:05+0000\n"
|
||||
"PO-Revision-Date: 2013-03-10 21:58+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-03-11 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16523)\n"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_project_task
|
||||
msgid "Task"
|
||||
msgstr "Feladat"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Timebox"
|
||||
msgstr "Időkorlát"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Lead"
|
||||
msgstr "Érdeklődő"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For cancelling the task"
|
||||
msgstr "A munka visszavonásához"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Next"
|
||||
msgstr "Következő"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
||||
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
||||
msgid "My Tasks"
|
||||
msgstr "Feladataim"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
#: field:crm.lead,task_ids:0
|
||||
msgid "Tasks"
|
||||
msgstr "Feladatok"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Done"
|
||||
msgstr "Elvégezve"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Cancel"
|
||||
msgstr "Visszavonás"
|
||||
|
||||
#. module: crm_todo
|
||||
#: model:ir.model,name:crm_todo.model_crm_lead
|
||||
msgid "Lead/Opportunity"
|
||||
msgstr "Lehetőség/Esély"
|
||||
|
||||
#. module: crm_todo
|
||||
#: field:project.task,lead_id:0
|
||||
msgid "Lead / Opportunity"
|
||||
msgstr "Lehetőség/Esély"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "For changing to done state"
|
||||
msgstr "Elvégezve szintre váltáshoz"
|
||||
|
||||
#. module: crm_todo
|
||||
#: view:crm.lead:0
|
||||
msgid "Previous"
|
||||
msgstr "Előző"
|
|
@ -8,14 +8,14 @@ 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: 2012-12-10 09:05+0000\n"
|
||||
"Last-Translator: Fekete Mihai <mihai@erpsystems.ro>\n"
|
||||
"PO-Revision-Date: 2013-03-12 12:56+0000\n"
|
||||
"Last-Translator: Simonel Criste <simi@erpsystems.ro>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-22 05:58+0000\n"
|
||||
"X-Generator: Launchpad (build 16378)\n"
|
||||
"X-Launchpad-Export-Date: 2013-03-13 04:37+0000\n"
|
||||
"X-Generator: Launchpad (build 16532)\n"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_from:0
|
||||
|
@ -37,13 +37,13 @@ msgstr "Buton bara laterala pentru a deschide actiunea barei laterale"
|
|||
#. module: email_template
|
||||
#: field:res.partner,opt_out:0
|
||||
msgid "Opt-Out"
|
||||
msgstr ""
|
||||
msgstr "Nu participati"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_to:0
|
||||
#: field:email_template.preview,email_to:0
|
||||
msgid "To (Emails)"
|
||||
msgstr ""
|
||||
msgstr "Destinatar (Email-uri)"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,mail_server_id:0
|
||||
|
@ -76,7 +76,7 @@ msgstr "Adresa expeditorului (aici pot fi folositi inlocuitori)"
|
|||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Remove context action"
|
||||
msgstr ""
|
||||
msgstr "Sterge actiunea cadru"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,mail_server_id:0
|
||||
|
@ -97,7 +97,7 @@ msgstr "Raport nume fisier"
|
|||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
msgstr "Previzualizare"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,reply_to:0
|
||||
|
@ -187,7 +187,7 @@ msgstr ""
|
|||
"trimiteti un e-mail. Daca nu este setata, va fi folosita versiunea in limba "
|
||||
"engleza. Aceasta ar trebui de obicei sa fie o expresie inlocuitoare care "
|
||||
"furnizeaza codul limbii corespunzatoare, de exemplu "
|
||||
"${obiect.partener_id.cod.limba}."
|
||||
"${object.partner_id.lang.code}."
|
||||
|
||||
#. module: email_template
|
||||
#: field:email_template.preview,res_id:0
|
||||
|
@ -209,7 +209,7 @@ msgstr ""
|
|||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Dynamic Value Builder"
|
||||
msgstr ""
|
||||
msgstr "Creare Valoare Dinamica"
|
||||
|
||||
#. module: email_template
|
||||
#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview
|
||||
|
@ -227,6 +227,8 @@ msgid ""
|
|||
"Display an option on related documents to open a composition wizard with "
|
||||
"this template"
|
||||
msgstr ""
|
||||
"Afiseaza o optiune in documentele asociate pentru a deschide un wizard de "
|
||||
"compoziite cu acest sablon"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,email_cc:0
|
||||
|
@ -249,7 +251,7 @@ msgstr "Avansat"
|
|||
#. module: email_template
|
||||
#: view:email_template.preview:0
|
||||
msgid "Preview of"
|
||||
msgstr ""
|
||||
msgstr "Previzualizare a"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email_template.preview:0
|
||||
|
@ -297,7 +299,7 @@ msgstr ""
|
|||
#: field:email.template,copyvalue:0
|
||||
#: field:email_template.preview,copyvalue:0
|
||||
msgid "Placeholder Expression"
|
||||
msgstr ""
|
||||
msgstr "Expresie Substituenta"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,sub_object:0
|
||||
|
@ -321,7 +323,7 @@ msgstr "Adresa de raspuns preferata (aici pot fi folositi inlocuitori)"
|
|||
#: field:email.template,ref_ir_value:0
|
||||
#: field:email_template.preview,ref_ir_value:0
|
||||
msgid "Sidebar Button"
|
||||
msgstr ""
|
||||
msgstr "Buton Bara laterala"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,report_template:0
|
||||
|
@ -344,24 +346,24 @@ msgstr "Model"
|
|||
#. module: email_template
|
||||
#: model:ir.model,name:email_template.model_mail_compose_message
|
||||
msgid "Email composition wizard"
|
||||
msgstr ""
|
||||
msgstr "Wizard de compozitie email-uri"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Add context action"
|
||||
msgstr ""
|
||||
msgstr "Adauga contextul actiunii"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,model_id:0
|
||||
#: help:email_template.preview,model_id:0
|
||||
msgid "The kind of document with with this template can be used"
|
||||
msgstr ""
|
||||
msgstr "Tipul de document cu care poate fi utilizat acest sablon"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,email_recipients:0
|
||||
#: field:email_template.preview,email_recipients:0
|
||||
msgid "To (Partners)"
|
||||
msgstr ""
|
||||
msgstr "Destinatar (Parteneri)"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,auto_delete:0
|
||||
|
@ -382,7 +384,7 @@ msgstr ""
|
|||
#: field:email.template,model:0
|
||||
#: field:email_template.preview,model:0
|
||||
msgid "Related Document Model"
|
||||
msgstr ""
|
||||
msgstr "Model Document Asociat"
|
||||
|
||||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
|
@ -395,6 +397,8 @@ msgstr "Adresare"
|
|||
msgid ""
|
||||
"Comma-separated ids of recipient partners (placeholders may be used here)"
|
||||
msgstr ""
|
||||
"Id-uri despartite prin virgule ale partenerilor destinatari (aici pot fi "
|
||||
"folositi substituenti)"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,attachment_ids:0
|
||||
|
@ -418,7 +422,7 @@ msgstr "Cc (copie carbon)"
|
|||
#: field:email.template,model_id:0
|
||||
#: field:email_template.preview,model_id:0
|
||||
msgid "Applies to"
|
||||
msgstr ""
|
||||
msgstr "Se aplica pentru"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,sub_model_object_field:0
|
||||
|
@ -490,7 +494,7 @@ msgstr "Partener"
|
|||
#: field:email.template,null_value:0
|
||||
#: field:email_template.preview,null_value:0
|
||||
msgid "Default Value"
|
||||
msgstr ""
|
||||
msgstr "Valoarea Implicita"
|
||||
|
||||
#. module: email_template
|
||||
#: help:email.template,attachment_ids:0
|
||||
|
@ -512,7 +516,7 @@ msgstr ""
|
|||
#. module: email_template
|
||||
#: view:email.template:0
|
||||
msgid "Contents"
|
||||
msgstr ""
|
||||
msgstr "Cuprins"
|
||||
|
||||
#. module: email_template
|
||||
#: field:email.template,subject:0
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -74,9 +74,6 @@ class account_analytic_account(osv.osv):
|
|||
'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Timesheet Invoicing Ratio',
|
||||
help="You usually invoice 100% of the timesheets. But if you mix fixed price and timesheet invoicing, you may use another ratio. For instance, if you do a 20% advance invoice (fixed price, based on a sales order), you should invoice the rest on timesheet with a 80% ratio."),
|
||||
}
|
||||
_defaults = {
|
||||
'pricelist_id': lambda self, cr, uid, ctx: ctx.get('pricelist_id', False),
|
||||
}
|
||||
|
||||
def on_change_partner_id(self, cr, uid, ids, partner_id, name, context=None):
|
||||
res = super(account_analytic_account, self).on_change_partner_id(cr, uid, ids, partner_id, name, context=context)
|
||||
|
|
|
@ -0,0 +1,896 @@
|
|||
# Macedonian 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-03-13 07:44+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Macedonian <mk@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-03-14 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16532)\n"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.product,category_id:0
|
||||
#: field:lunch.product.category,name:0
|
||||
msgid "Category"
|
||||
msgstr "Категорија"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_order_by_supplier_form
|
||||
msgid "Today's Orders by Supplier"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order:0
|
||||
msgid "My Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.order,state:0
|
||||
msgid "Partially Confirmed"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Group By..."
|
||||
msgstr "Групирај По..."
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,sunday:0
|
||||
msgid "Sunday"
|
||||
msgstr "Недела"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,supplier:0
|
||||
#: field:lunch.product,supplier:0
|
||||
msgid "Supplier"
|
||||
msgstr "Добавувач"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Today"
|
||||
msgstr "Денес"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "March"
|
||||
msgstr "Март"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
msgid "By Employee"
|
||||
msgstr "По Вработен"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,friday:0
|
||||
msgid "Friday"
|
||||
msgstr "Петок"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.validation:0
|
||||
msgid "validate order lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Order lines Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,specific_day:0
|
||||
#: field:report.lunch.order.line,day:0
|
||||
msgid "Day"
|
||||
msgstr "Ден"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
#: selection:lunch.order.line,state:0
|
||||
msgid "Received"
|
||||
msgstr "Примено"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
msgid "By Supplier"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_order_tree
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a lunch order. \n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" A lunch order is defined by its user, date and order lines.\n"
|
||||
" Each order line corresponds to a product, an additional note "
|
||||
"and a price.\n"
|
||||
" Before selecting your order lines, don't forget to read the "
|
||||
"warnings displayed in the reddish area.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Not Received"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_order_by_supplier_form
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_control_suppliers
|
||||
msgid "Orders by Supplier"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.validation:0
|
||||
msgid "Receive Meals"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
msgid "cashmove form"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_cashmove_form
|
||||
msgid ""
|
||||
"<p>\n"
|
||||
" Here you can see your cash moves.<br/>A cash moves can be "
|
||||
"either an expense or a payment.\n"
|
||||
" An expense is automatically created when an order is "
|
||||
"received while a payment is a reimbursement to the company encoded by the "
|
||||
"manager.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.cashmove,amount:0
|
||||
msgid "Amount"
|
||||
msgstr "Износ"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_products
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_products
|
||||
#: field:lunch.order,order_line_ids:0
|
||||
msgid "Products"
|
||||
msgstr "Производи"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
msgid "By Date"
|
||||
msgstr "По датум"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.order,state:0
|
||||
#: view:lunch.order.line:0
|
||||
#: selection:lunch.order.line,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr "Откажано"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
msgid "lunch employee payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.alert:0
|
||||
msgid "alert tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_report_lunch_order_line
|
||||
msgid "Lunch Orders Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_alert
|
||||
msgid "Lunch Alert"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: code:addons/lunch/lunch.py:183
|
||||
#, python-format
|
||||
msgid "Select a product and put your order comments on the note."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.alert,alter_type:0
|
||||
msgid "Every Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_cashmove
|
||||
msgid "Register Cash Moves"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.order,state:0
|
||||
msgid "Confirmed"
|
||||
msgstr "Потврдено"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order:0
|
||||
msgid "lunch orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Confirm"
|
||||
msgstr "Потврди"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_cashmove_form
|
||||
msgid "Your Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_cashmove_form
|
||||
msgid "Your Lunch Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,active_from:0
|
||||
msgid "Between"
|
||||
msgstr "Помеѓу"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_order_order
|
||||
msgid "Wizard to order a meal"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.order,state:0
|
||||
#: selection:lunch.order.line,state:0
|
||||
msgid "New"
|
||||
msgstr "Ново"
|
||||
|
||||
#. module: lunch
|
||||
#: code:addons/lunch/lunch.py:180
|
||||
#, python-format
|
||||
msgid "This is the first time you order a meal"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:report.lunch.order.line,price_total:0
|
||||
msgid "Total Price"
|
||||
msgstr "Вкупна цена"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_validation
|
||||
msgid "lunch validation for order"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: report:lunch.order.line:0
|
||||
msgid "Name/Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: report:lunch.order.line:0
|
||||
msgid "Total :"
|
||||
msgstr "Вкупно :"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "July"
|
||||
msgstr "Јули"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_config
|
||||
msgid "Configuration"
|
||||
msgstr "Конфигурација"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order,state:0
|
||||
#: field:lunch.order.line,state:0
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.order:0
|
||||
msgid ""
|
||||
"Order a meal doesn't mean that we have to pay it.\n"
|
||||
" A meal should be paid when it is received."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_control_accounts
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_control_accounts
|
||||
msgid "Control Accounts"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.alert,alter_type:0
|
||||
msgid "Every Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,cashmove:0
|
||||
msgid "Cash Move"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.order_order_lines
|
||||
msgid "Order meals"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.alert:0
|
||||
msgid "Schedule Hour"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "September"
|
||||
msgstr "Септември"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_control_suppliers
|
||||
msgid ""
|
||||
"<p>\n"
|
||||
" Here you can see every orders grouped by suppliers and by "
|
||||
"date.\n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" - Click on the <img "
|
||||
"src=\"../../../web/static/src/img/icons/terp-call-start.png\"/> to announce "
|
||||
"that the order is ordered <br/>\n"
|
||||
" - Click on the <img "
|
||||
"src=\"../../../web/static/src/img/icons/gtk-apply.png\"/> to announce that "
|
||||
"the order is received <br/>\n"
|
||||
" - Click on the <img "
|
||||
"src=\"../../../web/static/src/img/icons/gtk-cancel.png\"/> red X to announce "
|
||||
"that the order isn't available\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,tuesday:0
|
||||
msgid "Tuesday"
|
||||
msgstr "Вторник"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_order_tree
|
||||
msgid "Your Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:report.lunch.order.line,month:0
|
||||
msgid "Month"
|
||||
msgstr "Месец"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_products
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a product for lunch. \n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" A product is defined by its name, category, price and "
|
||||
"supplier.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.alert:0
|
||||
#: field:lunch.alert,message:0
|
||||
msgid "Message"
|
||||
msgstr "Порака"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.order:0
|
||||
msgid "Order Meals"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
#: view:lunch.order.order:0
|
||||
#: view:lunch.validation:0
|
||||
msgid "or"
|
||||
msgstr "или"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_product_categories
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a lunch category. \n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" Here you can find every lunch categories for products.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.order:0
|
||||
msgid "Order meal"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_product_categories
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_product_categories
|
||||
msgid "Product Categories"
|
||||
msgstr "Категории на производ"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_control_suppliers
|
||||
msgid "Control Suppliers"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.alert:0
|
||||
msgid "Schedule Date"
|
||||
msgstr "Планиран датум"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_alert
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_alert
|
||||
#: field:lunch.order,alerts:0
|
||||
msgid "Alerts"
|
||||
msgstr "Известувања"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,note:0
|
||||
#: field:report.lunch.order.line,note:0
|
||||
msgid "Note"
|
||||
msgstr "Белешка"
|
||||
|
||||
#. module: lunch
|
||||
#: code:addons/lunch/lunch.py:250
|
||||
#, python-format
|
||||
msgid "Add"
|
||||
msgstr "Додади"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.product:0
|
||||
#: view:lunch.product.category:0
|
||||
msgid "Products Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.cancel_order_lines
|
||||
msgid "Cancel meals"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_cashmove
|
||||
#: view:lunch.cashmove:0
|
||||
msgid "lunch cashmove"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
msgid "Are you sure you want to cancel these meals?"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
msgid "My Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "August"
|
||||
msgstr "Август"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,monday:0
|
||||
msgid "Monday"
|
||||
msgstr "Понеделник"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,name:0
|
||||
msgid "unknown"
|
||||
msgstr "непознато"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.validate_order_lines
|
||||
msgid "Receive meals"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "June"
|
||||
msgstr "Јуни"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.cashmove,user_id:0
|
||||
#: field:lunch.order,user_id:0
|
||||
#: field:report.lunch.order.line,user_id:0
|
||||
msgid "User Name"
|
||||
msgstr "Корисничко име"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.module.category,name:lunch.module_lunch_category
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_title
|
||||
msgid "Lunch"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_order_line
|
||||
msgid "lunch order line"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_product
|
||||
msgid "lunch product"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,user_id:0
|
||||
#: model:res.groups,name:lunch.group_lunch_user
|
||||
msgid "User"
|
||||
msgstr "Корисник"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.cashmove,date:0
|
||||
#: field:lunch.order,date:0
|
||||
#: field:lunch.order.line,date:0
|
||||
msgid "Date"
|
||||
msgstr "Датум"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "November"
|
||||
msgstr "Ноември"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order:0
|
||||
msgid "Orders Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order:0
|
||||
msgid "Orders Form"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.alert:0
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Search"
|
||||
msgstr "Пребарувај"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "October"
|
||||
msgstr "Октомври"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_order_by_supplier_form
|
||||
msgid ""
|
||||
"<p>\n"
|
||||
" Here you can see today's orders grouped by suppliers.\n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" - Click on the <img "
|
||||
"src=\"../../../web/static/src/img/icons/terp-call-start.png\"/> to announce "
|
||||
"that the order is ordered <br/>\n"
|
||||
" - Click on the <img "
|
||||
"src=\"../../../web/static/src/img/icons/gtk-apply.png\"/> to announce that "
|
||||
"the order is received <br/>\n"
|
||||
" - Click on the <img "
|
||||
"src=\"../../../web/static/src/img/icons/gtk-cancel.png\"/> to announce that "
|
||||
"the order isn't available\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "January"
|
||||
msgstr "Јануари"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.alert,alter_type:0
|
||||
msgid "Specific Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,wednesday:0
|
||||
msgid "Wednesday"
|
||||
msgstr "Среда"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.product.category:0
|
||||
msgid "Product Category: "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,active_to:0
|
||||
msgid "And"
|
||||
msgstr "И"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:lunch.order.line,state:0
|
||||
msgid "Ordered"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:report.lunch.order.line,date:0
|
||||
msgid "Date Order"
|
||||
msgstr "Датум на налогот"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
msgid "Cancel Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_alert
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a lunch alert. \n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" Alerts are used to warn employee from possible issues "
|
||||
"concerning the lunch orders.\n"
|
||||
" To create a lunch alert you have to define its recurrency, "
|
||||
"the time interval during which the alert should be executed and the message "
|
||||
"to display.\n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" Example: <br/>\n"
|
||||
" - Recurency: Everyday<br/>\n"
|
||||
" - Time interval: from 00h00 am to 11h59 pm<br/>\n"
|
||||
" - Message: \"You must order before 10h30 am\"\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
msgid "A cancelled meal should not be paid by employees."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_cash
|
||||
msgid "Administrate Cash Moves"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_cancel
|
||||
msgid "cancel lunch order"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "December"
|
||||
msgstr "Декември"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
#: view:lunch.order.line:0
|
||||
#: view:lunch.order.order:0
|
||||
#: view:lunch.validation:0
|
||||
msgid "Cancel"
|
||||
msgstr "Откажи"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_cashmove
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a payment. \n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" Here you can see the employees' payment. A payment is a cash "
|
||||
"move from the employee to the company.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: code:addons/lunch/lunch.py:186
|
||||
#, python-format
|
||||
msgid "Your favorite meals will be created based on your last orders."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.module.category,description:lunch.module_lunch_category
|
||||
msgid ""
|
||||
"Helps you handle your lunch needs, if you are a manager you will be able to "
|
||||
"create new products, cashmoves and to confirm or cancel orders."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,help:lunch.action_lunch_control_accounts
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a new payment. \n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" A cashmove can either be an expense or a payment.<br/>\n"
|
||||
" An expense is automatically created at the order "
|
||||
"receipt.<br/>\n"
|
||||
" A payment represents the employee reimbursement to the "
|
||||
"company.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,alter_type:0
|
||||
msgid "Recurrency"
|
||||
msgstr "Повторливост"
|
||||
|
||||
#. module: lunch
|
||||
#: code:addons/lunch/lunch.py:189
|
||||
#, python-format
|
||||
msgid "Don't forget the alerts displayed in the reddish area"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,thursday:0
|
||||
msgid "Thursday"
|
||||
msgstr "Четврток"
|
||||
|
||||
#. module: lunch
|
||||
#: report:lunch.order.line:0
|
||||
msgid "Unit Price"
|
||||
msgstr "Единечна цена"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,product_id:0
|
||||
#: field:lunch.product,name:0
|
||||
msgid "Product"
|
||||
msgstr "Производ"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.cashmove,description:0
|
||||
#: report:lunch.order.line:0
|
||||
#: field:lunch.product,description:0
|
||||
msgid "Description"
|
||||
msgstr "Опис"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "May"
|
||||
msgstr "Мај"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.order.line,price:0
|
||||
#: field:lunch.product,price:0
|
||||
msgid "Price"
|
||||
msgstr "Цена"
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.cashmove,state:0
|
||||
msgid "Is an order or a Payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.act_window,name:lunch.action_lunch_order_form
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_order_form
|
||||
msgid "New Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
msgid "cashmove tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
msgid "Cancel a meal means that we didn't receive it from the supplier."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_cashmove
|
||||
msgid "Employee Payments"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
#: selection:lunch.cashmove,state:0
|
||||
msgid "Payment"
|
||||
msgstr "Плаќање"
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "February"
|
||||
msgstr "Февруари"
|
||||
|
||||
#. module: lunch
|
||||
#: field:report.lunch.order.line,year:0
|
||||
msgid "Year"
|
||||
msgstr "Година"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order:0
|
||||
msgid "List"
|
||||
msgstr "Листа"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_admin
|
||||
msgid "Administrate Orders"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: selection:report.lunch.order.line,month:0
|
||||
msgid "April"
|
||||
msgstr "Април"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order:0
|
||||
msgid "Select your order"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.cashmove,order_id:0
|
||||
#: selection:lunch.cashmove,state:0
|
||||
#: report:lunch.order.line:0
|
||||
#: view:lunch.order.line:0
|
||||
#: field:lunch.order.line,order_id:0
|
||||
msgid "Order"
|
||||
msgstr "Нарачка"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.actions.report.xml,name:lunch.report_lunch_order
|
||||
#: model:ir.model,name:lunch.model_lunch_order
|
||||
#: report:lunch.order.line:0
|
||||
msgid "Lunch Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.order.order:0
|
||||
msgid "Are you sure you want to order these meals?"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cancel:0
|
||||
msgid "cancel order lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.model,name:lunch.model_lunch_product_category
|
||||
msgid "lunch product category"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: field:lunch.alert,saturday:0
|
||||
msgid "Saturday"
|
||||
msgstr "Сабота"
|
||||
|
||||
#. module: lunch
|
||||
#: model:res.groups,name:lunch.group_lunch_manager
|
||||
msgid "Manager"
|
||||
msgstr "Менаџер"
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.validation:0
|
||||
msgid "Did your received these meals?"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.validation:0
|
||||
msgid "Once a meal is received a new cash move is created for the employee."
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.product:0
|
||||
msgid "Products Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: lunch
|
||||
#: view:lunch.cashmove:0
|
||||
#: view:lunch.order:0
|
||||
#: field:lunch.order,total:0
|
||||
#: view:lunch.order.line:0
|
||||
msgid "Total"
|
||||
msgstr "Вкупно"
|
||||
|
||||
#. module: lunch
|
||||
#: model:ir.ui.menu,name:lunch.menu_lunch_order_tree
|
||||
msgid "Previous Orders"
|
||||
msgstr ""
|
|
@ -253,7 +253,11 @@
|
|||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="view_warehouse_orderpoint_tree"/>
|
||||
<field name="search_view_id" ref="warehouse_orderpoint_search" />
|
||||
<field name="help">You can define your minimum stock rules, so that OpenERP will automatically create draft manufacturing orders or purchase quotations according to the stock level. Once the virtual stock of a product (= stock on hand minus all confirmed orders and reservations) is below the minimum quantity, OpenERP will generate a procurement request to increase the stock up to the maximum quantity.</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to add a reordering rules.
|
||||
</p><p>You can define your minimum stock rules, so that OpenERP will automatically create draft manufacturing orders or request for quotations according to the stock level. Once the virtual stock of a product (= stock on hand minus all confirmed orders and reservations) is below the minimum quantity, OpenERP will generate a procurement request to increase the stock up to the maximum quantity.</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
<page string="Description">
|
||||
<field name="description" placeholder="Add an internal note..." groups="base.group_user"/>
|
||||
</page>
|
||||
<page string="Extra Info" groups="project.group_project_manager">
|
||||
<page string="Extra Info" groups="project.group_project_manager,project.group_project_user">
|
||||
<group string="Statistics">
|
||||
<field name="day_open"/>
|
||||
<field name="day_close"/>
|
||||
|
@ -156,7 +156,7 @@
|
|||
<field name="model">project.issue</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Issue Tracker Search">
|
||||
<field name="name" string="Issue" filter_domain="['|', '|',('partner_id','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/>
|
||||
<field name="name" string="Issue" filter_domain="['|', '|',('description','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/>
|
||||
<field name="id"/>
|
||||
<filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
|
||||
<separator/>
|
||||
|
@ -164,6 +164,7 @@
|
|||
<filter string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/>
|
||||
<separator/>
|
||||
<filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="project_id"/>
|
||||
<field name="categ_ids"/>
|
||||
|
@ -364,5 +365,19 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!-- res.partner -->
|
||||
<record model="ir.ui.view" id="res_partner_issues_button_view">
|
||||
<field name="name">res.partner.issues.button.view</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='buttons']" position="inside">
|
||||
<button type="action" string="Issues" attrs="{'invisible': [('customer', '=', False)]}"
|
||||
name="%(act_project_project_2_project_issue_all)d" context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" groups="project.group_project_user"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -209,7 +209,7 @@
|
|||
<field name="name"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
<field name="account_analytic_id" groups="purchase.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
|
||||
<field name="account_analytic_id" groups="purchase.group_analytic_accounting" domain="[('type','in',('normal','contract'))]"/>
|
||||
<field name="product_qty" on_change="onchange_product_id(parent.pricelist_id,product_id,product_qty,product_uom,parent.partner_id,parent.date_order,parent.fiscal_position,date_planned,name,price_unit,context)"/>
|
||||
<field name="product_uom" groups="product.group_uom" on_change="onchange_product_uom(parent.pricelist_id,product_id,product_qty,product_uom,parent.partner_id, parent.date_order,parent.fiscal_position,date_planned,name,price_unit,context)"/>
|
||||
<field name="price_unit"/>
|
||||
|
@ -395,7 +395,7 @@
|
|||
<group>
|
||||
<field name="taxes_id" widget="many2many_tags" domain="[('parent_id','=',False),('type_tax_use','!=','sale')]"/>
|
||||
<field name="date_planned" widget="date"/>
|
||||
<field name="account_analytic_id" colspan="2" groups="purchase.group_analytic_accounting" domain="[('parent_id','!=',False)]" />
|
||||
<field name="account_analytic_id" colspan="2" groups="purchase.group_analytic_accounting"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
</group>
|
||||
</group>
|
||||
|
@ -461,7 +461,7 @@
|
|||
domain="[('parent_id','=',False),('type_tax_use','!=','sale')]"/>
|
||||
<field name="date_planned" widget="date" readonly="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
<field name="account_analytic_id" colspan="4" groups="purchase.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
|
||||
<field name="account_analytic_id" colspan="4" groups="purchase.group_analytic_accounting"/>
|
||||
<field name="invoiced"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
|
@ -49,7 +49,7 @@ class sale_configuration(osv.osv_memory):
|
|||
implied_group='product.group_sale_pricelist',
|
||||
help="""Allows to manage different prices based on rules per category of customers.
|
||||
Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
|
||||
'group_uom':fields.boolean("Allow using different units of measures",
|
||||
'group_uom':fields.boolean("Allow using different units of measure",
|
||||
implied_group='product.group_uom',
|
||||
help="""Allows you to select and maintain different units of measure for products."""),
|
||||
'group_discount_per_so_line': fields.boolean("Allow setting a discount on the sales order lines",
|
||||
|
|
|
@ -676,7 +676,9 @@ class sale_order_line(osv.osv):
|
|||
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True),
|
||||
'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True),
|
||||
'invoiced': fields.function(_fnct_line_invoiced, string='Invoiced', type='boolean',
|
||||
store={'account.invoice': (_order_lines_from_invoice, ['state'], 10)}),
|
||||
store={
|
||||
'account.invoice': (_order_lines_from_invoice, ['state'], 10),
|
||||
'sale.order.line': (lambda self,cr,uid,ids,ctx=None: ids, ['invoice_lines'], 10)}),
|
||||
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price'), readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'type': fields.selection([('make_to_stock', 'from stock'), ('make_to_order', 'on order')], 'Procurement Method', required=True, readonly=True, states={'draft': [('readonly', False)]},
|
||||
help="From stock: When needed, the product is taken from the stock or we wait for replenishment.\nOn order: When needed, the product is purchased or produced."),
|
||||
|
@ -787,7 +789,7 @@ class sale_order_line(osv.osv):
|
|||
vals = self._prepare_order_line_invoice_line(cr, uid, line, False, context)
|
||||
if vals:
|
||||
inv_id = self.pool.get('account.invoice.line').create(cr, uid, vals, context=context)
|
||||
cr.execute('insert into sale_order_line_invoice_rel (order_line_id,invoice_id) values (%s,%s)', (line.id, inv_id))
|
||||
self.write(cr, uid, [line.id], {'invoice_lines': [(4, inv_id)]}, context=context)
|
||||
sales.add(line.order_id.id)
|
||||
create_ids.append(inv_id)
|
||||
# Trigger workflow events
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
<field name="partner_id" on_change="onchange_partner_id(partner_id, context)" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": True}'/>
|
||||
<field name="partner_invoice_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'invoice'}"/>
|
||||
<field name="partner_shipping_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'delivery'}"/>
|
||||
<field name="project_id" context="{'partner_id':partner_id, 'pricelist_id':pricelist_id, 'default_name':name, 'default_type': 'contract'}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/>
|
||||
<field name="project_id" context="{'partner_id':partner_id, 'default_pricelist_id':pricelist_id, 'default_name':name, 'default_type': 'contract'}" groups="sale.group_analytic_accounting" domain="[('type','in',['view','normal','contract'])]"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_order"/>
|
||||
|
|
Loading…
Reference in New Issue