bzr revid: dhara_openerp-20120106065019-qvsider94itsokp4
This commit is contained in:
Dhara (OpenERP) 2012-01-06 12:20:19 +05:30
commit 1bb1c09e58
81 changed files with 7775 additions and 998 deletions

View File

@ -2651,7 +2651,7 @@ class account_tax_code_template(osv.osv):
company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
#find all the children of the tax_code_root_id
children_tax_code_template = obj_tax_code_template.search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id')
children_tax_code_template = tax_code_root_id and obj_tax_code_template.search(cr, uid, [('parent_id','child_of',[tax_code_root_id])], order='id') or []
for tax_code_template in obj_tax_code_template.browse(cr, uid, children_tax_code_template, context=context):
vals = {
'name': (tax_code_root_id == tax_code_template.id) and company.name or tax_code_template.name,

View File

@ -824,8 +824,9 @@ class account_invoice(osv.osv):
compute_taxes = ait_obj.compute(cr, uid, inv.id, context=ctx)
self.check_tax_lines(cr, uid, inv, compute_taxes, ait_obj)
if inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0):
raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe real total does not match the computed total.'))
# I disabled the check_total feature
#if inv.type in ('in_invoice', 'in_refund') and abs(inv.check_total - inv.amount_total) >= (inv.currency_id.rounding/2.0):
# raise osv.except_osv(_('Bad total !'), _('Please verify the price of the invoice !\nThe real total does not match the computed total.'))
if inv.payment_term:
total_fixed = total_percent = 0
@ -1267,7 +1268,7 @@ class account_invoice_line(osv.osv):
def _price_unit_default(self, cr, uid, context=None):
if context is None:
context = {}
if 'check_total' in context:
if context.get('check_total', False):
t = context['check_total']
for l in context.get('invoice_line', {}):
if isinstance(l, (list, tuple)) and len(l) >= 3 and l[2]:

View File

@ -152,7 +152,7 @@
<field name="currency_id" width="50"/>
<button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/>
<newline/>
<field string="Supplier" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" options='{"quick_create": false}'/>
<field string="Supplier" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}" options='{"quick_create": false}' domain="[('supplier', '=', True)]"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}" options='{"quick_create": false}'/>
<field name="fiscal_position" groups="base.group_extended" widget="selection"/>
<newline/>
@ -168,7 +168,7 @@
<field name="reference_type" nolabel="1" size="0"/>
<field name="reference" nolabel="1"/>
<field name="date_due"/>
<field name="check_total" required="2"/>
<field name="check_total" invisible="1"/>
<field colspan="4" default_get="{'check_total': check_total, 'invoice_line': invoice_line, 'address_invoice_id': address_invoice_id, 'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False}" name="invoice_line" context="{'type': type}" nolabel="1">
<tree string="Invoice lines">
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.address_invoice_id, parent.currency_id, context, parent.company_id)"/>
@ -179,7 +179,7 @@
<field name="price_unit"/>
<!-- Removed if subtotal is set -->
<field name="price_subtotal"/>
<field name="name"/>
<field invisible="True" name="name"/>
<field invisible="True" name="uos_id"/>
</tree>
</field>
@ -263,7 +263,7 @@
<field name="currency_id" width="50"/>
<button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change" attrs="{'invisible':[('state','!=','draft')]}" groups="account.group_account_user"/>
<newline/>
<field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}" options='{"quick_create": false}'/>
<field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}" options='{"quick_create": false}' domain="[('customer', '=', True)]"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id" context="{'default_partner_id': partner_id}" options='{"quick_create": false}'/>
<field name="fiscal_position" groups="base.group_extended" widget="selection" options='{"quick_create": false}'/>
<newline/>
@ -303,7 +303,6 @@
<group col="8" colspan="4" groups="base.group_user">
<button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel" groups="base.group_no_one"/>
<button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
<button name='%(action_account_state_open)d' type='action' string='Re-Open' groups="account.group_account_invoice" attrs="{'invisible':['|', ('state','&lt;&gt;','paid'), ('reconciled', '=', True)]}" icon="gtk-convert" help="This button only appears when the state of the invoice is 'paid' (showing that it has been fully reconciled) and auto-computed boolean 'reconciled' is False (depicting that it's not the case anymore). In other words, the invoice has been dereconciled and it does not fit anymore the 'paid' state. You should press this button to re-open it and let it continue its normal process after having resolved the eventual exceptions it may have created."/>
<button name="%(action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
<button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="terp-gtk-media-pause" groups="account.group_account_user"/>

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-12-23 09:55+0000\n"
"PO-Revision-Date: 2011-12-08 16:20+0000\n"
"PO-Revision-Date: 2012-01-05 15:14+0000\n"
"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-12-24 05:43+0000\n"
"X-Generator: Launchpad (build 14560)\n"
"X-Launchpad-Export-Date: 2012-01-06 04:49+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: account
#: view:account.invoice.report:0
@ -1103,7 +1103,7 @@ msgstr ""
#: field:account.fiscal.position.tax,tax_dest_id:0
#: field:account.fiscal.position.tax.template,tax_dest_id:0
msgid "Replacement Tax"
msgstr ""
msgstr "ضريبة الإستبدال"
#. module: account
#: selection:account.move.line,centralisation:0
@ -1406,7 +1406,7 @@ msgstr "عدد خانات الأرقام"
#. module: account
#: field:account.journal,entry_posted:0
msgid "Skip 'Draft' State for Manual Entries"
msgstr ""
msgstr "تخطي حالة \"المسودة\" للقيود اليدوية"
#. module: account
#: view:account.invoice.report:0
@ -1438,7 +1438,7 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_temp_range
msgid "A Temporary table used for Dashboard view"
msgstr ""
msgstr "جدول م}قت يستخدم لعرض اللوحة الرئيسية"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree4
@ -1734,7 +1734,7 @@ msgstr "مبلغ الدائنون"
#. module: account
#: constraint:account.move.line:0
msgid "You can not create move line on closed account."
msgstr ""
msgstr "لا يمكنك إنشاء حركة سطر علي حساب مغلق."
#. module: account
#: code:addons/account/account.py:406
@ -1827,7 +1827,7 @@ msgstr "صالح"
#: model:ir.actions.act_window,name:account.action_account_print_journal
#: model:ir.model,name:account.model_account_print_journal
msgid "Account Print Journal"
msgstr ""
msgstr "يومية طباعة حساب"
#. module: account
#: model:ir.model,name:account.model_product_category
@ -2645,13 +2645,13 @@ msgstr "المبيعات بعرض الحسابات"
#. module: account
#: view:account.use.model:0
msgid "This wizard will create recurring accounting entries"
msgstr ""
msgstr "سيقوم هذا المعالج بإنشاء قيود محاسبية تكرارية"
#. module: account
#: code:addons/account/account.py:1320
#, python-format
msgid "No sequence defined on the journal !"
msgstr ""
msgstr "لا يوجد مسلسل معرف لهذه اليومية !"
#. module: account
#: code:addons/account/account.py:2264
@ -3177,7 +3177,7 @@ msgstr ""
#. module: account
#: report:account.overdue:0
msgid "VAT:"
msgstr ""
msgstr "ضريبة القيمة المضافة:"
#. module: account
#: constraint:account.invoice:0
@ -3280,6 +3280,7 @@ msgid ""
"Selected Invoice(s) cannot be cancelled as they are already in 'Cancelled' "
"or 'Done' state!"
msgstr ""
"الفواتير المختارة لا يمكن إلغاءها حيث أنها ملغاة أو تمت من حيث الحالة!"
#. module: account
#: view:account.invoice.line:0
@ -3331,7 +3332,7 @@ msgstr "تفاصيل"
#. module: account
#: report:account.invoice:0
msgid "VAT :"
msgstr ""
msgstr "ضريبة القيمة المضافة:"
#. module: account
#: report:account.central.journal:0
@ -3359,7 +3360,7 @@ msgstr "النظير المركزي"
#. module: account
#: model:ir.model,name:account.model_account_partner_reconcile_process
msgid "Reconcilation Process partner by partner"
msgstr ""
msgstr "عملية التسوية شريك شريك"
#. module: account
#: selection:account.automatic.reconcile,power:0
@ -3369,7 +3370,7 @@ msgstr "2"
#. module: account
#: view:account.chart:0
msgid "(If you do not select Fiscal year it will take all open fiscal years)"
msgstr ""
msgstr "(إذا لم تختار سنة مالية سيتم التعامل مع كل السنوات المالية المفتوحة)"
#. module: account
#: selection:account.aged.trial.balance,filter:0
@ -3454,7 +3455,7 @@ msgstr "بعض القيود تمت تسويتها من قبل !"
#. module: account
#: view:account.tax:0
msgid "Account Tax"
msgstr ""
msgstr "حساب الضرائب"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_reporting_budgets
@ -3533,7 +3534,7 @@ msgstr "دائن"
#. module: account
#: model:process.node,name:account.process_node_supplierpaymentorder0
msgid "Payment Order"
msgstr ""
msgstr "أمر الدفع"
#. module: account
#: help:account.account.template,reconcile:0
@ -3806,7 +3807,7 @@ msgstr ""
#. module: account
#: view:account.tax.template:0
msgid "Search Tax Templates"
msgstr ""
msgstr "بحث قوالب الضريبة"
#. module: account
#: model:ir.ui.menu,name:account.periodical_processing_journal_entries_validation
@ -5340,7 +5341,7 @@ msgstr ""
#. module: account
#: view:account.journal:0
msgid "Invoicing Data"
msgstr ""
msgstr "بيانات الفواتير"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_automatic_reconcile
@ -6088,7 +6089,7 @@ msgstr ""
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_bank_and_cash
msgid "Bank and Cash"
msgstr ""
msgstr "النقدية و البنك"
#. module: account
#: model:ir.actions.act_window,help:account.action_analytic_entries_report
@ -6864,7 +6865,7 @@ msgstr ""
#. module: account
#: view:account.journal.select:0
msgid "Are you sure you want to open Journal Entries?"
msgstr ""
msgstr "هل أنت تريد فتح قيود اليومية؟"
#. module: account
#: view:account.state.open:0
@ -8600,7 +8601,7 @@ msgstr "دفع مسجل"
#. module: account
#: view:account.fiscalyear.close.state:0
msgid "Close states of Fiscal year and periods"
msgstr ""
msgstr "إغلاق حالات السنة المالية و الفترات"
#. module: account
#: view:account.analytic.line:0
@ -9584,7 +9585,7 @@ msgstr ""
#: view:account.move.line:0
#: view:account.period:0
msgid "States"
msgstr ""
msgstr "حالات"
#. module: account
#: model:ir.actions.server,name:account.ir_actions_server_edi_invoice
@ -9905,7 +9906,7 @@ msgstr ""
#. module: account
#: view:account.analytic.line:0
msgid "Fin.Account"
msgstr ""
msgstr "Fin.Account"
#. module: account
#: model:ir.actions.act_window,name:account.action_aged_receivable_graph
@ -10186,7 +10187,7 @@ msgstr "بحث قوالب الحساب"
#. module: account
#: view:account.invoice.tax:0
msgid "Manual Invoice Taxes"
msgstr ""
msgstr "ضرائب الفاتورة يدوياً"
#. module: account
#: field:account.account,parent_right:0
@ -10263,7 +10264,7 @@ msgstr "حساب دفتر اليومية المركزي"
#. module: account
#: report:account.overdue:0
msgid "Maturity"
msgstr "الإستحقاق"
msgstr "إكتمال"
#. module: account
#: selection:account.aged.trial.balance,direction_selection:0
@ -10712,3 +10713,14 @@ msgstr ""
#~ msgid " value amount: n.a"
#~ msgstr " قيمة المبلغ: غير متاحة"
#~ msgid "Bank and Cash Accounts"
#~ msgstr "حسابات النقدية و البنك"
#~ msgid "For Value percent enter % ratio between 0-1."
#~ msgstr "لتحديد النسبةاختر قيمة بين 0 إلي 1."
#, python-format
#~ msgid ""
#~ "The expected balance (%.2f) is different than the computed one. (%.2f)"
#~ msgstr "الرصيد المتوقع(%.2f) مختلف عن الرصيد المحسوب (%.2f)."

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2009-02-03 06:22+0000\n"
"Last-Translator: <>\n"
"PO-Revision-Date: 2012-01-05 20:55+0000\n"
"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-12-23 06:50+0000\n"
"X-Generator: Launchpad (build 14560)\n"
"X-Launchpad-Export-Date: 2012-01-06 04:49+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
@ -211,7 +211,7 @@ msgstr ""
#: field:account.analytic.account,user_ids:0
#: field:account_analytic_analysis.summary.user,user:0
msgid "User"
msgstr ""
msgstr "المستخدم"
#. module: account_analytic_analysis
#: help:account.analytic.account,real_margin_rate:0
@ -260,7 +260,7 @@ msgstr ""
msgid ""
"Error! The currency has to be the same as the currency of the selected "
"company"
msgstr ""
msgstr "خطأ! العملة لابد و أن تكون مثل العملة للشركة المختارة"
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_invoiced:0
@ -275,7 +275,7 @@ msgstr ""
#. module: account_analytic_analysis
#: constraint:account.analytic.account:0
msgid "Error! You can not create recursive analytic accounts."
msgstr ""
msgstr "خطأ! لا يمكنك إنشاء حسابات تحليلية متكررة."
#. module: account_analytic_analysis
#: field:account.analytic.account,remaining_ca:0
@ -315,7 +315,7 @@ msgstr ""
#: field:account.analytic.account,month_ids:0
#: field:account_analytic_analysis.summary.month,month:0
msgid "Month"
msgstr ""
msgstr "شهر"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
@ -323,7 +323,7 @@ msgstr ""
#: field:account_analytic_analysis.summary.user,account_id:0
#: model:ir.model,name:account_analytic_analysis.model_account_analytic_account
msgid "Analytic Account"
msgstr ""
msgstr "حساب تحليلي"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue_all
@ -362,7 +362,7 @@ msgstr ""
#: field:account_analytic_analysis.summary.month,unit_amount:0
#: field:account_analytic_analysis.summary.user,unit_amount:0
msgid "Total Time"
msgstr ""
msgstr "إجمالي الوقت"
#. module: account_analytic_analysis
#: help:account.analytic.account,total_cost:0
@ -370,3 +370,9 @@ msgid ""
"Total of costs for this account. It includes real costs (from invoices) and "
"indirect costs, like time spent on timesheets."
msgstr ""
#~ msgid "Remaining Hours"
#~ msgstr "الساعات المتبقية"
#~ msgid "Billing"
#~ msgstr "عمليات الفواتير"

View File

@ -81,8 +81,6 @@
<field name="globalisation_id" string="Glob. Id"/>
<field name="globalisation_amount" string="Glob. Am."/>
<field name="state"/>
<field name="write_date"/>
<field name="write_uid"/>
</tree>
</field>
</record>
@ -106,8 +104,6 @@
<field name="amount"/>
<field name="globalisation_id"/>
<field name="sequence" readonly="0"/>
<field name="write_date"/>
<field name="write_uid"/>
<field name="state"/>
<separator colspan="4" string="Notes"/>
<field colspan="4" name="note" nolabel="1"/>
@ -140,8 +136,6 @@
<group string="Extended Filters..." expand="0">
<field name="account_id"/>
<field name="partner_id"/>
<field name="write_date"/>
<field name="write_uid"/>
<field name="ref"/>
<field name="note"/>
</group>

View File

@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2011-01-19 10:49+0000\n"
"Last-Translator: bamuhrez <bamuhrez@gmail.com>\n"
"PO-Revision-Date: 2012-01-05 17:03+0000\n"
"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
"Language-Team: Arabic <ar@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: 2011-12-23 07:18+0000\n"
"X-Generator: Launchpad (build 14560)\n"
"X-Launchpad-Export-Date: 2012-01-06 04:50+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: account_cancel
#: view:account.invoice:0
msgid "Cancel"
msgstr ""
msgstr "إلغاء"
#~ msgid "Account Cancel"
#~ msgstr "إلغاء الحساب"

View File

@ -51,8 +51,10 @@ This module provides :
],
'demo_xml': ['account_payment_demo.xml'],
'test': [
'test/account_payment.yml',
'test/account_payment_report.yml'
'test/account_payment_demo.yml',
'test/cancel_payment_order.yml',
'test/payment_order_process.yml',
'test/account_payment_report.yml',
],
'installable': True,
'active': False,

View File

@ -68,6 +68,7 @@ class payment_order(osv.osv):
_rec_name = 'reference'
_order = 'id desc'
#dead code
def get_wizard(self, type):
logger = netsvc.Logger()
logger.notifyChannel("warning", netsvc.LOG_WARNING,
@ -235,6 +236,7 @@ class payment_line(osv.osv):
break
return result
#dead code
def select_by_name(self, cr, uid, ids, name, args, context=None):
if not ids: return {}
partner_obj = self.pool.get('res.partner')

View File

@ -1,118 +0,0 @@
-
In order to test account_payment in OpenERP I created a new Bank Record
-
Creating a res.partner.bank record
-
!record {model: res.partner.bank, id: res_partner_bank_0}:
acc_number: '126-2013269-08'
partner_id: base.res_partner_9
sequence: 0.0
state: bank
bank: base.res_bank_1
-
I created a new Payment Mode
-
Creating a payment.mode record
-
!record {model: payment.mode, id: payment_mode_m0}:
bank_id: res_partner_bank_0
journal: account.bank_journal
name: TestMode
-
I created a Supplier Invoice
-
Creating a account.invoice record
-
!record {model: account.invoice, id: account_invoice_payment}:
account_id: account.a_pay
address_contact_id: base.res_partner_address_tang
address_invoice_id: base.res_partner_address_tang
check_total: 300.0
company_id: base.main_company
currency_id: base.EUR
invoice_line:
- account_id: account.a_expense
name: '[PC1] Basic PC'
price_unit: 300.0
product_id: product.product_product_pc1
quantity: 1.0
uos_id: product.product_uom_unit
journal_id: account.expenses_journal
partner_id: base.res_partner_asus
reference_type: none
type: in_invoice
-
I make the supplier invoice in Open state
-
Performing a workflow action invoice_open on module account.invoice
-
!workflow {model: account.invoice, action: invoice_open, ref: account_invoice_payment}
-
I create a new payment order
-
Creating a payment.order record
-
!record {model: payment.order, id: payment_order_0}:
date_prefered: due
mode: payment_mode_m0
reference: !eval "'%s/006' %(datetime.now().year)"
user_id: base.user_root
-
Creating a payment.order.create record
-
!record {model: payment.order.create, id: payment_order_create_0}:
duedate: !eval time.strftime('%Y-%m-%d')
-
I searched the entries using "Payment Create Order" wizard
-
Performing an osv_memory action search_entries on module payment.order.create
-
!python {model: payment.order.create}: |
self.search_entries(cr, uid, [ref("payment_order_create_0")], {"lang": "en_US",
"active_model": "payment.order", "active_ids": [ref("payment_order_0")],
"tz": False, "active_id": ref("payment_order_0"), })
-
I check that Initially Payment order is in "draft" state
-
!assert {model: payment.order, id: payment_order_0}:
- state == 'draft'
-
I pressed the confirm payment button to confirm the payment
-
Performing a workflow action open on module payment.order
-
!workflow {model: payment.order, action: open, ref: payment_order_0}
-
I check that Payment order is in "Confirmed" state
-
!assert {model: payment.order, id: payment_order_0}:
- state == 'open'
-
I paid the payment using "Make Payments" Button
-
Creating a account.payment.make.payment record
-
!record {model: account.payment.make.payment, id: account_payment_make_payment_0}:
{}
-
Performing an osv_memory action launch_wizard on module account.payment.make.payment
-
!python {model: account.payment.make.payment}: |
self.launch_wizard(cr, uid, [ref("account_payment_make_payment_0")], {"lang":
"en_US", "active_model": "payment.order", "active_ids": [ref("payment_order_0")], "tz":
False, "active_id": ref("payment_order_0"), })
-
I check that Payment order is in "Done" state
-
!assert {model: payment.order, id: payment_order_0}:
- state == 'done'

View File

@ -0,0 +1,13 @@
-
!record {model: payment.mode, id: payment_mode_1}:
company_id: base.main_company
-
!record {model: payment.order, id: payment_order_2}:
mode: payment_mode_1
-
!record {model: payment.line, id: payment_line_0}:
name: Test
communication: Test
partner_id: base.res_partner_agrolait
order_id: payment_order_2
amount_currency: 100.00

View File

@ -1,8 +1,8 @@
-
In order to test the PDF reports defined on Account Payment, Print a Payment Order
-
In order to test the PDF reports defined on Account Payment, I print a Payment Order report.
-
!python {model: payment.order}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.payment.order').create(cr, uid, [ref('account_payment.payment_order_1')], {}, {})
(data, format) = netsvc.LocalService('report.payment.order').create(cr, uid, [ref('payment_order_1')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'account_payment-payment_order_report.'+format), 'wb+').write(data)
file(os.path.join(tools.config['test_report_directory'], 'account_payment-payment_order_report.'+format), 'wb+').write(data)

View File

@ -0,0 +1,30 @@
-
In order to test the process of cancelling the payment order,
-
I confirm payment order.
-
!workflow {model: payment.order, action: open, ref: payment_order_1}
-
I check that payment order is now "Confirmed".
-
!assert {model: payment.order, id: payment_order_1, severity: error, string: Payment Order should be 'Confirmed'.}:
- state == 'open'
-
Now, I cancel the payment order.
-
!workflow {model: payment.order, action: cancel, ref: payment_order_1}
-
I check that payment order is now "Cancelled".
-
!assert {model: payment.order, id: payment_order_1, severity: error, string: Payment Order should be 'Cancelled'.}:
- state == 'cancel'
-
I again set the payment order to draft.
-
!python {model: payment.order}: |
self.set_to_draft(cr, uid, [ref("payment_order_1")])
-
I check that payment order is now "Draft".
-
!assert {model: payment.order, id: payment_order_1, severity: error, string: Payment Order should be in 'Draft' state.}:
- state == 'draft'

View File

@ -0,0 +1,107 @@
-
In order to test the process of payment order, I start with the supplier invoice.
-
!python {model: account.invoice}: |
self.write(cr, uid, [ref('account.demo_invoice_0')], {'check_total': 14})
-
In order to test account move line of journal, I check that there is no move attached to the invoice.
-
!python {model: account.invoice}: |
invoice = self.browse(cr, uid, ref("account.demo_invoice_0"))
assert (not invoice.move_id), "Moves are wrongly created for invoice."
-
I open the invoice.
-
!workflow {model: account.invoice, action: invoice_open, ref: account.demo_invoice_0}
-
I check that the invoice state is now "Open".
-
!assert {model: account.invoice, id: account.demo_invoice_0, severity: error, string: Invoice should be in 'Open' state}:
- state == 'open'
-
I confirm the payment order.
-
!workflow {model: payment.order, action: open, ref: payment_order_1}
-
I check that payment order is now "Confirmed".
-
!assert {model: payment.order, id: payment_order_1, severity: error, string: Payment Order should be 'Confirmed'.}:
- state == 'open'
-
!record {model: payment.order.create, id: payment_order_create_0}:
duedate: !eval time.strftime('%Y-%m-%d')
-
I search for the invoice entries to make the payment.
-
!python {model: payment.order.create}: |
self.search_entries(cr, uid, [ref("payment_order_create_0")], {
"active_model": "payment.order", "active_ids": [ref("payment_order_1")],
"active_id": ref("payment_order_1"), })
-
I create payment lines entries.
-
!python {model: payment.order.create}: |
invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account.demo_invoice_0"))
move_line = invoice.move_id.line_id[0]
self.write(cr, uid, [ref("payment_order_create_0")], {'entries': [(6,0,[move_line.id])]})
self.create_payment(cr, uid, [ref("payment_order_create_0")], {
"active_model": "payment.order", "active_ids": [ref("payment_order_1")],
"active_id": ref("payment_order_1")})
-
I check that payment line is created with proper data.
-
!python {model: payment.order}: |
invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account.demo_invoice_0"))
payment = self.browse(cr, uid, ref("payment_order_1"))
payment_line = payment.line_ids[0]
assert payment_line.move_line_id, "move line is not created in payment line."
assert invoice.move_id.name == payment_line.ml_inv_ref.number, "invoice reference number is not same created."
assert invoice.partner_id == payment_line.partner_id, "Partner is not correct."
assert invoice.date_due == payment_line.ml_maturity_date, "Due date is not correct."
assert invoice.amount_total == payment_line.amount, "Payment amount is not correct."
-
After making all payments, I finish the payment order.
-
!python {model: payment.order}: |
self.set_done(cr, uid, [ref("payment_order_1")])
-
I check that payment order is now "Done".
-
!assert {model: payment.order, id: payment_order_1, severity: error, string: Payment Order should be in 'Done' state}:
- state == 'done'
-
I check that payment order is done with proper data.
-
!python {model: payment.order}: |
payment = self.browse(cr, uid, ref("payment_order_1"))
assert payment.date_done, "Date is not created."
-
I create a bank statement.
-
!record {model: account.bank.statement, id: account_bank_statement_1}:
balance_end_real: 0.0
balance_start: 0.0
date: !eval time.strftime('%Y-%m-%d')
journal_id: account.bank_journal
name: /
period_id: account.period_10
-
I import payment order lines for the bank statement.
-
!python {model: account.payment.populate.statement}: |
payment = self.pool.get('payment.order').browse(cr, uid, ref("payment_order_1"))
payment_line = payment.line_ids[0]
import_payment_id = self.create(cr, uid, {'lines': [(6,0,[payment_line.id])]})
self.populate_statement(cr, uid, [import_payment_id], {"statement_id": ref("account_bank_statement_1"),
"active_model": "account.bank.statement", "journal_type": "cash",
"active_id": ref("account_bank_statement_1")})
-
I am checking whether the calculations of Owner Account and Destination Account are done correctly or not in payment line.
-
!python {model: payment.line}: |
payment = self.pool.get('payment.order').browse(cr, uid, ref("payment_order_1"))
line_id = self.browse(cr, uid,payment.line_ids[0].id,context)
assert line_id.info_owner, "Owner Account not proper."
assert line_id.info_partner, "Destination Account not proper."
assert line_id.ml_inv_ref, "Invoice reference is not proper."

View File

@ -27,7 +27,8 @@
<field name="arch" type="xml">
<form string="Search Payment lines">
<group col="4" colspan="6">
<field name="entries"/>
<separator colspan="4" string="Entries"/>
<field name="entries" nolabel="1"/>
</group>
<separator colspan="4"/>
<group col="2" colspan="4">

View File

@ -21,6 +21,7 @@
from osv import osv
#TODO:REMOVE this wizard is not used
class account_payment_make_payment(osv.osv_memory):
_name = "account.payment.make.payment"
_description = "Account make payment"

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- TODO:REMOVE this wizard is not used -->
<record id="account_payment_make_payment_view" model="ir.ui.view">
<field name="name">account.payment.make.payment.form</field>
<field name="model">account.payment.make.payment</field>

View File

@ -0,0 +1,213 @@
# Arabic translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-05 14:58+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic <ar@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-01-06 04:50+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: account_sequence
#: view:account.sequence.installer:0
#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer
msgid "Account Sequence Application Configuration"
msgstr ""
#. module: account_sequence
#: constraint:account.move:0
msgid ""
"You can not create more than one move per period on centralized journal"
msgstr ""
#. module: account_sequence
#: help:account.move,internal_sequence_number:0
#: help:account.move.line,internal_sequence_number:0
msgid "Internal Sequence Number"
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,number_next:0
msgid "Next number of this sequence"
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,number_next:0
msgid "Next Number"
msgstr "العدد التالي"
#. module: account_sequence
#: field:account.sequence.installer,number_increment:0
msgid "Increment Number"
msgstr "مقدار الزيادة"
#. module: account_sequence
#: help:account.sequence.installer,number_increment:0
msgid "The next number of the sequence will be incremented by this number"
msgstr ""
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "Configure Your Account Sequence Application"
msgstr ""
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "Configure"
msgstr "تهيئة"
#. module: account_sequence
#: help:account.sequence.installer,suffix:0
msgid "Suffix value of the record for the sequence"
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,company_id:0
msgid "Company"
msgstr "شركة"
#. module: account_sequence
#: constraint:account.move.line:0
msgid "You can not create move line on closed account."
msgstr "لا يمكنك إنشاء حركة سطر علي حساب مغلق."
#. module: account_sequence
#: help:account.journal,internal_sequence_id:0
msgid ""
"This sequence will be used to maintain the internal number for the journal "
"entries related to this journal."
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,padding:0
msgid "Number padding"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_move_line
msgid "Journal Items"
msgstr "عناصر اليومية"
#. module: account_sequence
#: field:account.move,internal_sequence_number:0
#: field:account.move.line,internal_sequence_number:0
msgid "Internal Number"
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid "Company must be same for its related account and period."
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,padding:0
msgid ""
"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
"get the required padding size."
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,name:0
msgid "Name"
msgstr "الاسم"
#. module: account_sequence
#: constraint:account.move.line:0
msgid "The date of your Journal Entry is not in the defined period!"
msgstr ""
#. module: account_sequence
#: constraint:account.journal:0
msgid ""
"Configuration error! The currency chosen should be shared by the default "
"accounts too."
msgstr ""
#. module: account_sequence
#: sql_constraint:account.move.line:0
msgid "Wrong credit or debit value in accounting entry !"
msgstr "قيمة دائنة أو مدينة خاطئة في القيد المحاسبي !"
#. module: account_sequence
#: field:account.journal,internal_sequence_id:0
msgid "Internal Sequence"
msgstr ""
#. module: account_sequence
#: help:account.sequence.installer,prefix:0
msgid "Prefix value of the record for the sequence"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_move
msgid "Account Entry"
msgstr "قيد الحساب"
#. module: account_sequence
#: field:account.sequence.installer,suffix:0
msgid "Suffix"
msgstr "اللاحقة"
#. module: account_sequence
#: field:account.sequence.installer,config_logo:0
msgid "Image"
msgstr "صورة"
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "title"
msgstr "الاسم"
#. module: account_sequence
#: sql_constraint:account.journal:0
msgid "The name of the journal must be unique per company !"
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid ""
"The selected account of your Journal Entry must receive a value in its "
"secondary currency"
msgstr ""
#. module: account_sequence
#: field:account.sequence.installer,prefix:0
msgid "Prefix"
msgstr "بادئة"
#. module: account_sequence
#: sql_constraint:account.journal:0
msgid "The code of the journal must be unique per company !"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_sequence_installer
msgid "account.sequence.installer"
msgstr ""
#. module: account_sequence
#: model:ir.model,name:account_sequence.model_account_journal
msgid "Journal"
msgstr "يومية"
#. module: account_sequence
#: view:account.sequence.installer:0
msgid "You can enhance the Account Sequence Application by installing ."
msgstr ""
#. module: account_sequence
#: constraint:account.move.line:0
msgid "You can not create move line on view account."
msgstr ""
#~ msgid "Configuration Progress"
#~ msgstr "سير الإعدادات"

View File

@ -448,7 +448,7 @@ class account_voucher(osv.osv):
default['value']['account_id'] = account_id
default['value']['type'] = ttype or tr_type
vals = self.onchange_journal(cr, uid, ids, journal_id, line_ids, tax_id, partner_id, company_id, context)
vals = self.onchange_journal(cr, uid, ids, journal_id, line_ids, tax_id, partner_id, time.strftime('%Y-%m-%d'), price, ttype, company_id, context)
default['value'].update(vals.get('value'))
return default

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2009-02-03 06:24+0000\n"
"Last-Translator: <>\n"
"PO-Revision-Date: 2012-01-05 20:55+0000\n"
"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-12-23 07:07+0000\n"
"X-Generator: Launchpad (build 14560)\n"
"X-Launchpad-Export-Date: 2012-01-06 04:50+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: analytic_journal_billing_rate
#: sql_constraint:account.invoice:0
@ -24,12 +24,12 @@ msgstr ""
#. module: analytic_journal_billing_rate
#: field:analytic_journal_rate_grid,journal_id:0
msgid "Analytic Journal"
msgstr ""
msgstr "يومية تحليلية"
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_account_invoice
msgid "Invoice"
msgstr ""
msgstr "فاتورة"
#. module: analytic_journal_billing_rate
#: constraint:account.invoice:0
@ -45,7 +45,7 @@ msgstr ""
#: field:analytic_journal_rate_grid,account_id:0
#: model:ir.model,name:analytic_journal_billing_rate.model_account_analytic_account
msgid "Analytic Account"
msgstr ""
msgstr "حساب تحليلي"
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid
@ -62,7 +62,7 @@ msgstr ""
msgid ""
"Error! The currency has to be the same as the currency of the selected "
"company"
msgstr ""
msgstr "خطأ! العملة لابد و أن تكون مثل العملة للشركة المختارة"
#. module: analytic_journal_billing_rate
#: constraint:hr.analytic.timesheet:0
@ -77,7 +77,7 @@ msgstr ""
#. module: analytic_journal_billing_rate
#: constraint:account.analytic.account:0
msgid "Error! You can not create recursive analytic accounts."
msgstr ""
msgstr "خطأ! لا يمكنك إنشاء حسابات تحليلية متكررة."
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_hr_analytic_timesheet

View File

@ -0,0 +1,213 @@
# Arabic translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-05 20:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic <ar@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-01-06 04:50+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymize_wizard
msgid "ir.model.fields.anonymize.wizard"
msgstr ""
#. module: anonymization
#: field:ir.model.fields.anonymization,field_name:0
msgid "Field Name"
msgstr "اسم الحقل"
#. module: anonymization
#: field:ir.model.fields.anonymization,field_id:0
msgid "Field"
msgstr "حقل"
#. module: anonymization
#: field:ir.model.fields.anonymization.history,state:0
#: field:ir.model.fields.anonymize.wizard,state:0
msgid "State"
msgstr "الحالة"
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,file_import:0
msgid "Import"
msgstr "استيراد"
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization
msgid "ir.model.fields.anonymization"
msgstr ""
#. module: anonymization
#: field:ir.model.fields.anonymization.history,direction:0
msgid "Direction"
msgstr "الاتجاه"
#. module: anonymization
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymization_tree
#: view:ir.model.fields.anonymization:0
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_fields
msgid "Anonymized Fields"
msgstr ""
#. module: anonymization
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization
msgid "Database anonymization"
msgstr ""
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,direction:0
msgid "clear -> anonymized"
msgstr ""
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Anonymized"
msgstr ""
#. module: anonymization
#: field:ir.model.fields.anonymization,state:0
msgid "unknown"
msgstr "مجهول"
#. module: anonymization
#: field:ir.model.fields.anonymization,model_id:0
msgid "Object"
msgstr "كائن"
#. module: anonymization
#: field:ir.model.fields.anonymization.history,filepath:0
msgid "File path"
msgstr "مسار الملف"
#. module: anonymization
#: field:ir.model.fields.anonymization.history,date:0
msgid "Date"
msgstr "التاريخ"
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,file_export:0
msgid "Export"
msgstr "تصدير"
#. module: anonymization
#: view:ir.model.fields.anonymize.wizard:0
msgid "Reverse the Database Anonymization"
msgstr ""
#. module: anonymization
#: view:ir.model.fields.anonymize.wizard:0
msgid "Database Anonymization"
msgstr ""
#. module: anonymization
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_wizard
msgid "Anonymize database"
msgstr ""
#. module: anonymization
#: view:ir.model.fields.anonymization.history:0
#: field:ir.model.fields.anonymization.history,field_ids:0
msgid "Fields"
msgstr "حقول"
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Clear"
msgstr "مسح"
#. module: anonymization
#: view:ir.model.fields.anonymize.wizard:0
#: field:ir.model.fields.anonymize.wizard,summary:0
msgid "Summary"
msgstr "الملخص"
#. module: anonymization
#: view:ir.model.fields.anonymization:0
msgid "Anonymized Field"
msgstr ""
#. module: anonymization
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Unstable"
msgstr ""
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Exception occured"
msgstr ""
#. module: anonymization
#: selection:ir.model.fields.anonymization,state:0
#: selection:ir.model.fields.anonymize.wizard,state:0
msgid "Not Existing"
msgstr ""
#. module: anonymization
#: field:ir.model.fields.anonymization,model_name:0
msgid "Object Name"
msgstr "اسم الكائن"
#. module: anonymization
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymization_history_tree
#: view:ir.model.fields.anonymization.history:0
#: model:ir.ui.menu,name:anonymization.menu_administration_anonymization_history
msgid "Anonymization History"
msgstr ""
#. module: anonymization
#: model:ir.model,name:anonymization.model_ir_model_fields_anonymization_history
msgid "ir.model.fields.anonymization.history"
msgstr ""
#. module: anonymization
#: model:ir.actions.act_window,name:anonymization.action_ir_model_fields_anonymize_wizard
#: view:ir.model.fields.anonymize.wizard:0
msgid "Anonymize Database"
msgstr ""
#. module: anonymization
#: field:ir.model.fields.anonymize.wizard,name:0
msgid "File Name"
msgstr "اسم الملف"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,direction:0
msgid "anonymized -> clear"
msgstr ""
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Started"
msgstr "بدئت"
#. module: anonymization
#: selection:ir.model.fields.anonymization.history,state:0
msgid "Done"
msgstr "تم"
#. module: anonymization
#: view:ir.model.fields.anonymization.history:0
#: field:ir.model.fields.anonymization.history,msg:0
#: field:ir.model.fields.anonymize.wizard,msg:0
msgid "Message"
msgstr "رسالة"
#. module: anonymization
#: code:addons/anonymization/anonymization.py:55
#: sql_constraint:ir.model.fields.anonymization:0
#, python-format
msgid "You cannot have two fields with the same name on the same object!"
msgstr ""

View File

@ -0,0 +1,496 @@
# Arabic translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-05 21:23+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic <ar@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-01-06 04:50+0000\n"
"X-Generator: Launchpad (build 14637)\n"
#. module: base_action_rule
#: help:base.action.rule,act_mail_to_user:0
msgid ""
"Check this if you want the rule to send an email to the responsible person."
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_remind_partner:0
msgid "Remind Partner"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_partner_categ_id:0
msgid "Partner Category"
msgstr "فئة الشريك"
#. module: base_action_rule
#: field:base.action.rule,act_mail_to_watchers:0
msgid "Mail to Watchers (CC)"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_state_to:0
msgid "Button Pressed"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,model_id:0
msgid "Object"
msgstr "كائن"
#. module: base_action_rule
#: field:base.action.rule,act_mail_to_email:0
msgid "Mail to these Emails"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_state:0
msgid "Set State to"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_email_from:0
msgid "Email From"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Email Body"
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_range_type:0
msgid "Days"
msgstr "أيام"
#. module: base_action_rule
#: field:base.action.rule,last_run:0
msgid "Last Run"
msgstr ""
#. module: base_action_rule
#: code:addons/base_action_rule/base_action_rule.py:322
#, python-format
msgid "Error!"
msgstr "خطأ!"
#. module: base_action_rule
#: field:base.action.rule,act_reply_to:0
msgid "Reply-To"
msgstr "رد على"
#. module: base_action_rule
#: help:base.action.rule,act_email_cc:0
msgid ""
"These people will receive a copy of the future communication between partner "
"and users by email"
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_range_type:0
msgid "Minutes"
msgstr "دقائق"
#. module: base_action_rule
#: field:base.action.rule,name:0
msgid "Rule Name"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,act_remind_partner:0
msgid ""
"Check this if you want the rule to send a reminder by email to the partner."
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Conditions on Model Partner"
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_type:0
msgid "Deadline"
msgstr "الموعد النهائي"
#. module: base_action_rule
#: field:base.action.rule,trg_partner_id:0
msgid "Partner"
msgstr "شريك"
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_subject)s = Object subject"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Email Reminders"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Special Keywords to Be Used in The Body"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_state_from:0
msgid "State"
msgstr "الحالة"
#. module: base_action_rule
#: model:ir.actions.act_window,help:base_action_rule.base_action_rule_act
msgid ""
"Use automated actions to automatically trigger actions for various screens. "
"Example: a lead created by a specific user may be automatically set to a "
"specific sales team, or an opportunity which still has status pending after "
"14 days might trigger an automatic reminder email."
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,act_mail_to_email:0
msgid "Email-id of the persons whom mail is to be sent"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Action Rule"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Fields to Change"
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_type:0
msgid "Creation Date"
msgstr "تاريخ الإنشاء"
#. module: base_action_rule
#: selection:base.action.rule,trg_date_type:0
msgid "Last Action Date"
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_range_type:0
msgid "Hours"
msgstr "ساعات"
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_id)s = Object ID"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Delay After Trigger Date"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_remind_attach:0
msgid "Remind with Attachment"
msgstr ""
#. module: base_action_rule
#: constraint:ir.cron:0
msgid "Invalid arguments"
msgstr "معطيات غير سليمة"
#. module: base_action_rule
#: field:base.action.rule,act_user_id:0
msgid "Set Responsible to"
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_type:0
msgid "None"
msgstr "لا شئ"
#. module: base_action_rule
#: help:base.action.rule,act_email_to:0
msgid ""
"Use a python expression to specify the right field on which one than we will "
"use for the 'To' field of the header"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_user_phone)s = Responsible phone"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid ""
"The rule uses the AND operator. The model must match all non-empty fields so "
"that the rule executes the action described in the 'Actions' tab."
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_date_range_type:0
msgid "Delay type"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,regex_name:0
msgid ""
"Regular expression for matching name of the resource\n"
"e.g.: 'urgent.*' will search for records having name starting with the "
"string 'urgent'\n"
"Note: This is case sensitive search."
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_method:0
msgid "Call Object Method"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_email_to:0
msgid "Email To"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,act_mail_to_watchers:0
msgid ""
"Check this if you want the rule to mark CC(mail to any other person defined "
"in actions)."
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(partner)s = Partner name"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Note"
msgstr "ملاحظة"
#. module: base_action_rule
#: help:base.action.rule,act_email_from:0
msgid ""
"Use a python expression to specify the right field on which one than we will "
"use for the 'From' field of the header"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_date_range:0
msgid "Delay after trigger date"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Conditions"
msgstr "الشروط"
#. module: base_action_rule
#: help:base.action.rule,trg_date_range:0
msgid ""
"Delay After Trigger Date,specifies you can put a negative number. If you "
"need a delay before the trigger date, like sending a reminder 15 minutes "
"before a meeting."
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,active:0
msgid "Active"
msgstr "نشط"
#. module: base_action_rule
#: code:addons/base_action_rule/base_action_rule.py:323
#, python-format
msgid "No E-Mail ID Found for your Company address!"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_remind_user:0
msgid "Remind Responsible"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,sequence:0
msgid "Gives the sequence order when displaying a list of rules."
msgstr ""
#. module: base_action_rule
#: selection:base.action.rule,trg_date_range_type:0
msgid "Months"
msgstr "شهور"
#. module: base_action_rule
#: field:base.action.rule,filter_id:0
msgid "Filter"
msgstr "مُرشِّح"
#. module: base_action_rule
#: selection:base.action.rule,trg_date_type:0
msgid "Date"
msgstr "تاريخ"
#. module: base_action_rule
#: help:base.action.rule,server_action_id:0
msgid ""
"Describes the action name.\n"
"eg:on which object which action to be taken on basis of which condition"
msgstr ""
#. module: base_action_rule
#: model:ir.model,name:base_action_rule.model_ir_cron
msgid "ir.cron"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_description)s = Object description"
msgstr ""
#. module: base_action_rule
#: constraint:base.action.rule:0
msgid "Error: The mail is not well formated"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Email Actions"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Email Information"
msgstr ""
#. module: base_action_rule
#: model:ir.model,name:base_action_rule.model_base_action_rule
msgid "Action Rules"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,act_mail_body:0
msgid "Content of mail"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_user_id:0
msgid "Responsible"
msgstr "مسئول"
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(partner_email)s = Partner Email"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_date)s = Creation date"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_user_email)s = Responsible Email"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_mail_body:0
msgid "Mail body"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,act_remind_user:0
msgid ""
"Check this if you want the rule to send a reminder by email to the user."
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Server Action to be Triggered"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_mail_to_user:0
msgid "Mail to Responsible"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,act_email_cc:0
msgid "Add Watchers (Cc)"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Conditions on Model Fields"
msgstr ""
#. module: base_action_rule
#: model:ir.actions.act_window,name:base_action_rule.base_action_rule_act
#: model:ir.ui.menu,name:base_action_rule.menu_base_action_rule_form
msgid "Automated Actions"
msgstr "الإجراءات التلقائية"
#. module: base_action_rule
#: field:base.action.rule,server_action_id:0
msgid "Server Action"
msgstr "إجراء الخادم"
#. module: base_action_rule
#: field:base.action.rule,regex_name:0
msgid "Regex on Resource Name"
msgstr ""
#. module: base_action_rule
#: help:base.action.rule,act_remind_attach:0
msgid ""
"Check this if you want that all documents attached to the object be attached "
"to the reminder email sent."
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Conditions on Timing"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,sequence:0
msgid "Sequence"
msgstr "مسلسل"
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Actions"
msgstr "الإجراءات"
#. module: base_action_rule
#: help:base.action.rule,active:0
msgid ""
"If the active field is set to False, it will allow you to hide the rule "
"without removing it."
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "%(object_user)s = Responsible name"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,create_date:0
msgid "Create Date"
msgstr ""
#. module: base_action_rule
#: view:base.action.rule:0
msgid "Conditions on States"
msgstr ""
#. module: base_action_rule
#: field:base.action.rule,trg_date_type:0
msgid "Trigger Date"
msgstr ""

View File

@ -0,0 +1,32 @@
# Romanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2012-01-03 16:01+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-01-04 04:48+0000\n"
"X-Generator: Launchpad (build 14616)\n"
#. module: base_tools
#: model:ir.module.module,shortdesc:base_tools.module_meta_information
msgid "Common base for tools modules"
msgstr "Baza comuna pentru modulele unelte"
#. module: base_tools
#: model:ir.module.module,description:base_tools.module_meta_information
msgid ""
"\n"
" "
msgstr ""
"****\n"
" "

View File

@ -233,6 +233,7 @@
<field name="name" string="Subject" />
<field name="user_id"/>
<field name="date"/>
<field name="state"/>
<field name="duration" />
<field name="partner_id" string="Partner" />
<field name="location" />

View File

@ -66,8 +66,8 @@
<field name="view_type">form</field>
<field name="view_mode">tree,calendar</field>
<field name="view_id" ref="crm_case_inbound_phone_tree_view"/>
<field name="domain">[('state','=','done')]</field>
<field name="context" eval="'{\'search_default_section_id\':section_id, \'default_state\':\'done\'}'"/>
<field name="domain">[]</field>
<field name="context" eval="'{\'search_default_section_id\':section_id}'"/>
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
<field name="help">This tool allows you to log your inbound calls on the fly. Each call you get will appear on the partner form to trace every contact you have with a partner. From the phone call form, you can trigger a request for another call, a meeting or an opportunity.</field>

View File

@ -0,0 +1,841 @@
# Romanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-03 18:58+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-01-04 04:48+0000\n"
"X-Generator: Launchpad (build 14616)\n"
#. module: crm_fundraising
#: field:crm.fundraising,planned_revenue:0
msgid "Planned Revenue"
msgstr "Venituri planificate"
#. module: crm_fundraising
#: field:crm.fundraising.report,nbr:0
msgid "# of Cases"
msgstr "# de Cazuri"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: view:crm.fundraising.report:0
msgid "Group By..."
msgstr "Grupare după..."
#. module: crm_fundraising
#: field:crm.fundraising.report,probability:0
msgid "Avg. Probability"
msgstr "Probabilitatea medie"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "March"
msgstr "Martie"
#. module: crm_fundraising
#: field:crm.fundraising.report,delay_close:0
msgid "Delay to close"
msgstr "Întârziere la inchidere"
#. module: crm_fundraising
#: field:crm.fundraising,company_id:0
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,company_id:0
msgid "Company"
msgstr "Companie"
#. module: crm_fundraising
#: model:ir.actions.act_window,name:crm_fundraising.crm_fund_categ_action
msgid "Fundraising Categories"
msgstr "Categorii de strangere de fonduri"
#. module: crm_fundraising
#: field:crm.fundraising,email_cc:0
msgid "Watchers Emails"
msgstr "Email-uri supraveghetori"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Cases"
msgstr "Cazuri"
#. module: crm_fundraising
#: selection:crm.fundraising,priority:0
msgid "Highest"
msgstr "Cel mai ridicat (cea mai ridicata)"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,day:0
msgid "Day"
msgstr "Zi"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Add Internal Note"
msgstr "Adauga nota interna"
#. module: crm_fundraising
#: field:crm.fundraising,partner_mobile:0
msgid "Mobile"
msgstr "Mobil"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Notes"
msgstr "Note"
#. module: crm_fundraising
#: field:crm.fundraising,message_ids:0
msgid "Messages"
msgstr "Mesaje"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "My company"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Amount"
msgstr "Sumă"
#. module: crm_fundraising
#: selection:crm.fundraising,state:0
#: selection:crm.fundraising.report,state:0
msgid "Cancelled"
msgstr "Anulat(ă)"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,amount_revenue:0
msgid "Est.Revenue"
msgstr "Venit estimat"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Open Funds"
msgstr ""
#. module: crm_fundraising
#: field:crm.fundraising,ref:0
msgid "Reference"
msgstr "Referinţă"
#. module: crm_fundraising
#: field:crm.fundraising,type_id:0
msgid "Campaign"
msgstr "Campanie"
#. module: crm_fundraising
#: field:crm.fundraising,date_action_next:0
msgid "Next Action"
msgstr "Următoarea acţiune"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Reset to Draft"
msgstr "Resetare ca ciorna"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Extra Info"
msgstr "Informaţii suplimentare"
#. module: crm_fundraising
#: model:ir.model,name:crm_fundraising.model_crm_fundraising
#: model:ir.ui.menu,name:crm_fundraising.menu_config_fundrising
#: model:ir.ui.menu,name:crm_fundraising.menu_crm_case_fund_raise
msgid "Fund Raising"
msgstr "Strângerea de fonduri"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,partner_id:0
#: field:crm.fundraising.report,partner_id:0
msgid "Partner"
msgstr "Partener"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Funds raised in current year"
msgstr ""
#. module: crm_fundraising
#: model:ir.actions.act_window,name:crm_fundraising.action_report_crm_fundraising
#: model:ir.ui.menu,name:crm_fundraising.menu_report_crm_fundraising_tree
msgid "Fundraising Analysis"
msgstr "Analiza Strangere de fonduri"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Misc"
msgstr "Diverse"
#. module: crm_fundraising
#: field:crm.fundraising.report,section_id:0
msgid "Section"
msgstr "Secţiune"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,priority:0
msgid "Priority"
msgstr "Prioritate"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Send New Email"
msgstr "Trimite un e-mail nou"
#. module: crm_fundraising
#: model:crm.case.categ,name:crm_fundraising.categ_fund1
msgid "Social Rehabilitation And Rural Upliftment"
msgstr "Reabilitare sociala si Ridicare rurala"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Pending Funds"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising:0
#: view:crm.fundraising.report:0
msgid "Payment Mode"
msgstr "Modalitate de plată"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: selection:crm.fundraising,state:0
#: view:crm.fundraising.report:0
msgid "New"
msgstr ""
#. module: crm_fundraising
#: field:crm.fundraising,email_from:0
msgid "Email"
msgstr "Email"
#. module: crm_fundraising
#: selection:crm.fundraising,priority:0
msgid "Lowest"
msgstr "Cel mai scazut (cea mai scazuta)"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: view:crm.fundraising.report:0
msgid "My Sales Team(s)"
msgstr ""
#. module: crm_fundraising
#: field:crm.fundraising,create_date:0
msgid "Creation Date"
msgstr "Data creării"
#. module: crm_fundraising
#: field:crm.fundraising,date_deadline:0
msgid "Deadline"
msgstr "Data scadenta"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "July"
msgstr "Iulie"
#. module: crm_fundraising
#: model:ir.ui.menu,name:crm_fundraising.menu_crm_case_fundraising-act
msgid "Categories"
msgstr "Categorii"
#. module: crm_fundraising
#: field:crm.fundraising,stage_id:0
msgid "Stage"
msgstr "Etapă"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "History Information"
msgstr "Istoric Informatii"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Dates"
msgstr "Date"
#. module: crm_fundraising
#: field:crm.fundraising,partner_name2:0
msgid "Employee Email"
msgstr "Email angajat"
#. module: crm_fundraising
#: model:crm.case.categ,name:crm_fundraising.categ_fund2
msgid "Learning And Education"
msgstr "Invatare si educatie"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Contact"
msgstr "Contact"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Funds Form"
msgstr "Fonduri de la"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Fund Description"
msgstr "Descriere fond"
#. module: crm_fundraising
#: help:crm.fundraising.report,delay_close:0
msgid "Number of Days to close the case"
msgstr "Numarul de zile pana la inchiderea (rezolvarea) cazului"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Funds raised in current month"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "References"
msgstr "Referințe"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Fundraising"
msgstr "Strângere de fonduri"
#. module: crm_fundraising
#: model:ir.actions.act_window,help:crm_fundraising.action_report_crm_fundraising
msgid ""
"Have a general overview of all fund raising activities by sorting them with "
"specific criteria such as the estimated revenue, average success probability "
"and delay to close."
msgstr ""
"Aveti o vedere de ansamblu asupra tuturor activitatilor de stangere de "
"fonduri sortandu-le dupa criterii specifice precum venitul estimat, "
"probabilitatea medie de succes si intarzierea la inchidere."
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "September"
msgstr "Septembrie"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Communication"
msgstr "Comunicare"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Funds Tree"
msgstr "Arbore fonduri"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,month:0
msgid "Month"
msgstr "Luna"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Escalate"
msgstr "Promovează"
#. module: crm_fundraising
#: field:crm.fundraising,write_date:0
msgid "Update Date"
msgstr "Data actualizarii"
#. module: crm_fundraising
#: model:crm.case.resource.type,name:crm_fundraising.type_fund3
msgid "Credit Card"
msgstr "Card de credit"
#. module: crm_fundraising
#: model:ir.actions.act_window,name:crm_fundraising.crm_fundraising_stage_act
msgid "Fundraising Stages"
msgstr "Etapele strangerii de fonduri"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Salesman"
msgstr "Agent comercial"
#. module: crm_fundraising
#: field:crm.fundraising,ref2:0
msgid "Reference 2"
msgstr "Referinta 2"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Funds raised in last month"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,categ_id:0
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,categ_id:0
msgid "Category"
msgstr "Categorie"
#. module: crm_fundraising
#: model:crm.case.categ,name:crm_fundraising.categ_fund4
msgid "Arts And Culture"
msgstr "Arta si Cultura"
#. module: crm_fundraising
#: field:crm.fundraising,planned_cost:0
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,planned_cost:0
msgid "Planned Costs"
msgstr "Costuri planificate"
#. module: crm_fundraising
#: help:crm.fundraising,email_cc:0
msgid ""
"These email addresses will be added to the CC field of all inbound and "
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
"Aceste adrese de email vor fi adaugate in campul CC al tuturor email-urilor "
"primite si trimise pentru aceasta inregistrare inainte de a fi trimise. "
"Despartiti adresele de mail multiple cu o virgula"
#. module: crm_fundraising
#: selection:crm.fundraising.report,state:0
msgid "Draft"
msgstr "Ciornă"
#. module: crm_fundraising
#: selection:crm.fundraising,priority:0
msgid "Low"
msgstr "Scăzut(ă)"
#. module: crm_fundraising
#: field:crm.fundraising,date_closed:0
#: selection:crm.fundraising,state:0
#: selection:crm.fundraising.report,state:0
msgid "Closed"
msgstr "Închis"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: selection:crm.fundraising,state:0
#: view:crm.fundraising.report:0
#: selection:crm.fundraising.report,state:0
msgid "Pending"
msgstr "În așteptare"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Communication & History"
msgstr "Comunicare & Istoric"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "August"
msgstr "August"
#. module: crm_fundraising
#: selection:crm.fundraising,priority:0
msgid "Normal"
msgstr "Normal"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Global CC"
msgstr "CC global"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: model:ir.actions.act_window,name:crm_fundraising.crm_case_category_act_fund_all1
msgid "Funds"
msgstr "Fonduri"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "June"
msgstr "Iunie"
#. module: crm_fundraising
#: field:crm.fundraising,partner_phone:0
msgid "Phone"
msgstr "Telefon"
#. module: crm_fundraising
#: field:crm.fundraising.report,user_id:0
msgid "User"
msgstr "Utilizator"
#. module: crm_fundraising
#: model:crm.case.resource.type,name:crm_fundraising.type_fund2
msgid "Cheque"
msgstr "Cec"
#. module: crm_fundraising
#: field:crm.fundraising,active:0
msgid "Active"
msgstr "Activ"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "November"
msgstr "Noiembrie"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Extended Filters..."
msgstr "Filtre extinse..."
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Search"
msgstr "Căutare"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "October"
msgstr "Octombrie"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "January"
msgstr "Ianuarie"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "#Fundraising"
msgstr "#Strangere de fonduri"
#. module: crm_fundraising
#: model:ir.actions.act_window,help:crm_fundraising.crm_fund_categ_action
msgid ""
"Manage and define the fund raising categories you want to be maintained in "
"the system."
msgstr ""
"Gestionati si definiti categoriile strangerii de fonduri care doriti sa "
"ramana in sistem."
#. module: crm_fundraising
#: help:crm.fundraising,email_from:0
msgid "These people will receive email."
msgstr "Aceste persoane vor primi e-mail."
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Fund Category"
msgstr ""
#. module: crm_fundraising
#: field:crm.fundraising,date:0
msgid "Date"
msgstr "Dată"
#. module: crm_fundraising
#: model:crm.case.categ,name:crm_fundraising.categ_fund3
msgid "Healthcare"
msgstr "Servicii medicale"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "History"
msgstr "Istoric"
#. module: crm_fundraising
#: field:crm.fundraising,partner_address_id:0
msgid "Partner Contact"
msgstr "Contact partener"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Month of fundraising"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Estimates"
msgstr "Estimări"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,state:0
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,state:0
msgid "State"
msgstr "Stare"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Unassigned"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising:0
#: view:crm.fundraising.report:0
msgid "Done"
msgstr "Efectuat"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "December"
msgstr "Decembrie"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: view:crm.fundraising.report:0
msgid "Cancel"
msgstr "Anulează"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: view:crm.fundraising.report:0
#: selection:crm.fundraising.report,state:0
msgid "Open"
msgstr "Deschide"
#. module: crm_fundraising
#: selection:crm.fundraising,state:0
msgid "In Progress"
msgstr ""
#. module: crm_fundraising
#: model:ir.actions.act_window,help:crm_fundraising.crm_case_category_act_fund_all1
msgid ""
"If you need to collect money for your organization or a campaign, Fund "
"Raising allows you to track all your fund raising activities. In the search "
"list, filter by funds description, email, history and probability of success."
msgstr ""
"Daca trebuie sa strangeti bani pentru organizatia dumneavoastra sau pentru o "
"campanie, Strangerea de fonduri va permite sa tineti evidenta tuturor "
"activitatilor dumneavoastra de strangere de fonduri. In lista de cautare, "
"filtrati dupa descrierea fondurilor, emai, istoric si probabilitatea de "
"succes."
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,user_id:0
msgid "Responsible"
msgstr "Responsabil"
#. module: crm_fundraising
#: help:crm.fundraising,section_id:0
msgid ""
"Sales team to which Case belongs to. Define Responsible user and Email "
"account for mail gateway."
msgstr ""
"Echipa de vanzari careia ii apartine cazul. Definiti Utilizatorul "
"responsabil si contul de email pentru mail gateway."
#. module: crm_fundraising
#: model:ir.model,name:crm_fundraising.model_crm_fundraising_report
msgid "CRM Fundraising Report"
msgstr "Raport Strangere de Fonduri MRC"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Reply"
msgstr "Răspuns"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Date of fundraising"
msgstr ""
#. module: crm_fundraising
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,amount_revenue_prob:0
msgid "Est. Rev*Prob."
msgstr "Venit Estimat*Probabilitate"
#. module: crm_fundraising
#: field:crm.fundraising.report,type_id:0
msgid "Fundraising Type"
msgstr "Tipul Strangerii de fonduri"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "New Funds"
msgstr ""
#. module: crm_fundraising
#: model:ir.actions.act_window,help:crm_fundraising.crm_fundraising_stage_act
msgid ""
"Create and manage fund raising activity categories you want to be maintained "
"in the system."
msgstr ""
"Creati si gestionati categoriile activitatii de stranere de fonduri care "
"doriti sa ramana in sistem."
#. module: crm_fundraising
#: field:crm.fundraising,description:0
msgid "Description"
msgstr "Descriere"
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "May"
msgstr "Mai"
#. module: crm_fundraising
#: field:crm.fundraising,probability:0
msgid "Probability (%)"
msgstr "Probabilitate (%)"
#. module: crm_fundraising
#: field:crm.fundraising,partner_name:0
msgid "Employee's Name"
msgstr "Numele angajatului"
#. module: crm_fundraising
#: help:crm.fundraising,state:0
msgid ""
"The state is set to 'Draft', when a case is created. "
" \n"
"If the case is in progress the state is set to 'Open'. "
" \n"
"When the case is over, the state is set to 'Done'. "
" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
"Starea este setata pe 'Ciorna', atunci cand este creat un caz. "
" \n"
"Daca cazul este in desfasurare, starea este setata pe 'Deschis'. "
" \n"
"Atunci cand cazul este incheiat, starea este setata pe 'Efectuat'. "
" \n"
"Daca cazul trebuie revazut, atunci starea este setata pe 'In asteptare'."
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "February"
msgstr "Februarie"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,name:0
msgid "Name"
msgstr "Nume"
#. module: crm_fundraising
#: model:crm.case.resource.type,name:crm_fundraising.type_fund1
msgid "Cash"
msgstr "Numerar"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Funds by Categories"
msgstr "Fonduri dupa Categorii"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "Month-1"
msgstr ""
#. module: crm_fundraising
#: selection:crm.fundraising.report,month:0
msgid "April"
msgstr "Aprilie"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
msgid "My Case(s)"
msgstr "Cazul (cazurile) meu (mele)"
#. module: crm_fundraising
#: model:crm.case.resource.type,name:crm_fundraising.type_fund4
msgid "Demand Draft"
msgstr "Solicitare ciorna"
#. module: crm_fundraising
#: field:crm.fundraising,id:0
msgid "ID"
msgstr "ID"
#. module: crm_fundraising
#: view:crm.fundraising:0
msgid "Search Funds"
msgstr "Cautare Fonduri"
#. module: crm_fundraising
#: selection:crm.fundraising,priority:0
msgid "High"
msgstr "Ridicat(ă)"
#. module: crm_fundraising
#: view:crm.fundraising:0
#: field:crm.fundraising,section_id:0
#: view:crm.fundraising.report:0
msgid "Sales Team"
msgstr "Echipa de vânzări"
#. module: crm_fundraising
#: field:crm.fundraising.report,create_date:0
msgid "Create Date"
msgstr "Creare data"
#. module: crm_fundraising
#: field:crm.fundraising,date_action_last:0
msgid "Last Action"
msgstr "Ultima acțiune"
#. module: crm_fundraising
#: view:crm.fundraising.report:0
#: field:crm.fundraising.report,name:0
msgid "Year"
msgstr "An"
#. module: crm_fundraising
#: field:crm.fundraising,duration:0
msgid "Duration"
msgstr "Durată"
#~ msgid "CRM Fundraising"
#~ msgstr "Strangere de fonduri MRC"
#~ msgid " Month "
#~ msgstr " Luna "
#~ msgid "Channel"
#~ msgstr "Canal"
#~ msgid " Month-1 "
#~ msgstr " Luna-1 "
#~ msgid " Year "
#~ msgstr " An "
#~ msgid "Stages"
#~ msgstr "Etape"
#~ msgid "Stage of case"
#~ msgstr "Etapa cazului"
#~ msgid "Attachments"
#~ msgstr "Atașamente"
#~ msgid "Current"
#~ msgstr "Curent"
#~ msgid "Details"
#~ msgstr "Detalii"
#~ msgid ""
#~ "The channels represent the different communication modes available with the "
#~ "customer."
#~ msgstr ""
#~ "Canalele reprezinta diferitele moduri disponibile de comunicare cu clientul."

View File

@ -103,7 +103,7 @@ class delivery_carrier(osv.osv):
grid_line_pool = self.pool.get('delivery.grid.line')
grid_pool = self.pool.get('delivery.grid')
for record in self.browse(cr, uid, ids, context=context):
grid_id = grid_pool.search(cr, uid, [('carrier_id', '=', record.id),('sequence','=',9999)], context=context)
grid_id = grid_pool.search(cr, uid, [('carrier_id', '=', record.id)], context=context)
if grid_id and not (record.normal_price or record.free_if_more_than):
grid_pool.unlink(cr, uid, grid_id, context=context)
@ -115,7 +115,7 @@ class delivery_carrier(osv.osv):
record_data = {
'name': record.name,
'carrier_id': record.id,
'sequence': 9999,
'sequence': 10,
}
new_grid_id = grid_pool.create(cr, uid, record_data, context=context)
grid_id = [new_grid_id]

View File

@ -0,0 +1,142 @@
# Romanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-04 13:13+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-01-05 05:37+0000\n"
"X-Generator: Launchpad (build 14625)\n"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
msgid "Auto Directory Configuration"
msgstr "Configurare auto Director"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid ""
"Indicate the network address on which your OpenERP server should be "
"reachable for end-users. This depends on your network topology and "
"configuration, and will only affect the links displayed to the users. The "
"format is HOST:PORT and the default host (localhost) is only suitable for "
"access from the server machine itself.."
msgstr ""
"Indica adresa retelei in care serverul OpenERP ar trebui sa fie accesibil "
"utilizatorilor finali. Aceasta depinde de topologia si configurarea retelei "
"dumneavoastra, si va afecta doar link-urile afisate utilizatorilor. Formatul "
"este HOST:PORT, iar gazda predenifinta (localhost) (gazda locala) este "
"potrivita doar pentru accesul de la server.."
#. module: document_ftp
#: model:ir.actions.url,name:document_ftp.action_document_browse
msgid "Browse Files"
msgstr "Răsfoiește fișiere"
#. module: document_ftp
#: field:document.ftp.configuration,config_logo:0
msgid "Image"
msgstr "Imagine"
#. module: document_ftp
#: field:document.ftp.configuration,host:0
msgid "Address"
msgstr "Adresă"
#. module: document_ftp
#: field:document.ftp.browse,url:0
msgid "FTP Server"
msgstr "Server FTP"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
msgid "FTP Server Configuration"
msgstr "Configurare Server FTP"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "_Browse"
msgstr "_Răsfoiește"
#. module: document_ftp
#: help:document.ftp.configuration,host:0
msgid ""
"Server address or IP and port to which users should connect to for DMS access"
msgstr ""
"Adresa serverului sau IP si portul la care utilizatorii ar trebui sa se "
"conecteze pentru acces DMS"
#. module: document_ftp
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
msgid "Shared Repository (FTP)"
msgstr "Depozit comun"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "_Cancel"
msgstr "_Anulează"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Configure FTP Server"
msgstr "Configurare Server FTP"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "title"
msgstr "titlu"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_browse
msgid "Document FTP Browse"
msgstr "Rasfoire document FTP"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Knowledge Application Configuration"
msgstr "Cunostinte configurare aplicatie"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
msgid "Document Browse"
msgstr "Rasfoire document"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "Browse Document"
msgstr "Rasfoieste dcoumentul"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "res_config_contents"
msgstr "res_config_contents"
#~ msgid ""
#~ "This is a support FTP Interface with document management system.\n"
#~ " With this module you would not only be able to access documents through "
#~ "OpenERP\n"
#~ " but you would also be able to connect with them through the file system "
#~ "using the\n"
#~ " FTP client.\n"
#~ msgstr ""
#~ "Aceasta este o Interfata FTP suport cu sistemul managementului "
#~ "documentelor.\n"
#~ " Cu acest modul veti putea nu doar sa accesati documente prin OpenERP, "
#~ "ci\n"
#~ " va veti putea si conecta la ele prin sistemul de fisiere folosind\n"
#~ " clientul FTP.\n"
#~ msgid "Configuration Progress"
#~ msgstr "Progres configurare"
#~ msgid "Integrated FTP Server with Document Management System"
#~ msgstr "Server FTP integrat cu Sistemul Managementului Documentelor"

View File

@ -0,0 +1,206 @@
# Romanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-04 14:42+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-01-05 05:37+0000\n"
"X-Generator: Launchpad (build 14625)\n"
#. module: document_webdav
#: field:document.webdav.dir.property,create_date:0
#: field:document.webdav.file.property,create_date:0
msgid "Date Created"
msgstr "Data creată"
#. module: document_webdav
#: model:ir.ui.menu,name:document_webdav.menu_document_props
msgid "Documents"
msgstr ""
#. module: document_webdav
#: constraint:document.directory:0
msgid "Error! You can not create recursive Directories."
msgstr "Eroare! Nu puteti crea Directoare recursive."
#. module: document_webdav
#: view:document.webdav.dir.property:0
#: view:document.webdav.file.property:0
msgid "Search Document properties"
msgstr "Cautare Proprietati documente"
#. module: document_webdav
#: view:document.webdav.dir.property:0
#: field:document.webdav.dir.property,namespace:0
#: view:document.webdav.file.property:0
#: field:document.webdav.file.property,namespace:0
msgid "Namespace"
msgstr "Spațiu de nume"
#. module: document_webdav
#: field:document.directory,dav_prop_ids:0
msgid "DAV properties"
msgstr "Proprietati DAV"
#. module: document_webdav
#: model:ir.model,name:document_webdav.model_document_webdav_file_property
msgid "document.webdav.file.property"
msgstr "document.webdav.file.property (document.webdav.fisier.proprietate)"
#. module: document_webdav
#: view:document.webdav.dir.property:0
#: view:document.webdav.file.property:0
msgid "Group By..."
msgstr "Grupează după..."
#. module: document_webdav
#: view:document.directory:0
msgid "These properties will be added to WebDAV requests"
msgstr "Aceste proprietati vor fi adaugate cererilor WebDAV"
#. module: document_webdav
#: model:ir.actions.act_window,name:document_webdav.action_file_props_form
msgid "DAV Properties for Documents"
msgstr ""
#. module: document_webdav
#: code:addons/document_webdav/webdav.py:37
#, python-format
msgid "PyWebDAV Import Error!"
msgstr "Eroare Import PyWebDAV!"
#. module: document_webdav
#: view:document.webdav.file.property:0
#: field:document.webdav.file.property,file_id:0
msgid "Document"
msgstr "Document"
#. module: document_webdav
#: model:ir.ui.menu,name:document_webdav.menu_folder_props
msgid "Folders"
msgstr ""
#. module: document_webdav
#: sql_constraint:document.directory:0
msgid "Directory cannot be parent of itself!"
msgstr "Directorul nu poate fi parinte lui insusi"
#. module: document_webdav
#: view:document.directory:0
msgid "Dynamic context"
msgstr "Context dinamic"
#. module: document_webdav
#: view:document.directory:0
msgid "WebDAV properties"
msgstr "Proprietari WebDAV"
#. module: document_webdav
#: sql_constraint:document.directory:0
msgid "The directory name must be unique !"
msgstr "Numele directorului trebuie sa fie unic !"
#. module: document_webdav
#: code:addons/document_webdav/webdav.py:37
#, python-format
msgid ""
"Please install PyWebDAV from "
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
"0.9.4.tar.gz&can=2&q=/"
msgstr ""
"Va rugam sa instalati PyWebDAV de la "
"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-"
"0.9.4.tar.gz&can=2&q=/"
#. module: document_webdav
#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form
msgid "DAV Properties for Folders"
msgstr ""
#. module: document_webdav
#: view:document.directory:0
#: view:document.webdav.dir.property:0
#: view:document.webdav.file.property:0
msgid "Properties"
msgstr "Proprietăți"
#. module: document_webdav
#: field:document.webdav.dir.property,name:0
#: field:document.webdav.file.property,name:0
msgid "Name"
msgstr "Nume"
#. module: document_webdav
#: model:ir.model,name:document_webdav.model_document_webdav_dir_property
msgid "document.webdav.dir.property"
msgstr "document.webdav.dir.property"
#. module: document_webdav
#: field:document.webdav.dir.property,value:0
#: field:document.webdav.file.property,value:0
msgid "Value"
msgstr "Valoare"
#. module: document_webdav
#: field:document.webdav.dir.property,dir_id:0
#: model:ir.model,name:document_webdav.model_document_directory
msgid "Directory"
msgstr "Director"
#. module: document_webdav
#: field:document.webdav.dir.property,write_uid:0
#: field:document.webdav.file.property,write_uid:0
msgid "Last Modification User"
msgstr "Utilizatorul ultimei modificari"
#. module: document_webdav
#: view:document.webdav.dir.property:0
msgid "Dir"
msgstr "Director"
#. module: document_webdav
#: field:document.webdav.dir.property,write_date:0
#: field:document.webdav.file.property,write_date:0
msgid "Date Modified"
msgstr "Dată modificare"
#. module: document_webdav
#: field:document.webdav.dir.property,create_uid:0
#: field:document.webdav.file.property,create_uid:0
msgid "Creator"
msgstr "Creator"
#. module: document_webdav
#: model:ir.ui.menu,name:document_webdav.menu_properties
msgid "DAV Properties"
msgstr ""
#. module: document_webdav
#: sql_constraint:document.directory:0
msgid "Directory must have a parent or a storage"
msgstr "Directorul trebuie sa aiba un parinte sau o arhiva"
#. module: document_webdav
#: field:document.webdav.dir.property,do_subst:0
#: field:document.webdav.file.property,do_subst:0
msgid "Substitute"
msgstr "Inlocuire"
#~ msgid "DAV properties for documents"
#~ msgstr "Proprietati DAV pentru documente"
#~ msgid "DAV properties for folders"
#~ msgstr "Proprietăți DAV pentru fisiere"
#~ msgid "WebDAV server for Document Management"
#~ msgstr "Serverul WebDAV pentru Managementul documentelor"

View File

@ -15,7 +15,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-01-03 04:48+0000\n"
"X-Launchpad-Export-Date: 2012-01-04 04:48+0000\n"
"X-Generator: Launchpad (build 14616)\n"
#. module: hr

View File

@ -1,50 +1,31 @@
-
In order to test attendance process in OpenERP, at the time of login, I use "Sign In/Sign Out" wizard for attendances.
I click on this wizard to login.
In order to test attendance process in OpenERP, I entry of SignIn of employee.
-
!python {model: hr.sign.in.out}: |
hr_employee = self.pool.get('hr.employee')
uid = ref('base.user_al')
emp_ids = hr_employee.search(cr, uid, [('user_id', '=', uid)])
if emp_ids:
employee = hr_employee.browse(cr, uid, emp_ids)[0]
id = self.create(cr, uid, {'emp_id': employee.id, 'name': employee.name, 'state': employee.state})
self.si_check(cr, uid, [id])
context.update({'emp_id': [ref('hr.employee_al')]}) #TOFIX: emp_ids instead of 'emp_id'
-
!record {model: hr.sign.in.out, id: employee_sign_in}:
{}
-
Employee Signs In.
-
!python {model: hr.sign.in.out}: |
self.si_check(cr, uid, [ref("employee_sign_in")], context=context)
-
I check that Employee is "Present".
-
!assert {model: hr.employee, id: hr.employee_al, severity: error, string: Employee should be in present state}:
- state == 'present'
-
I click on "Sign In" button of this wizard, this will Open a new form which ask for Last Sign Out date.
After few seconds, employee sign's out.
-
!python {model: hr.sign.in.out}: |
hr_employee = self.pool.get('hr.employee')
uid = ref('base.user_al')
emp_ids = hr_employee.search(cr, uid, [('user_id', '=', uid)])
if emp_ids:
employee = hr_employee.browse(cr, uid, emp_ids)[0]
id = self.create(cr, uid, {'emp_id': employee.id, 'name': employee.name, 'state': employee.state})
self.si_check(cr, uid, [id])
-
I select Last Sign Out date.
-
!record {model: hr.sign.in.out.ask, id: hr_sign_in_out_ask_Antony}:
last_time: !eval time.strftime('%Y-%m-%d %H:%M:%S')
name: Antony
-
Now I click on "Sign In" button of this wizard.
-
!python {model: hr.sign.in.out.ask}: |
import time
hr_employee = self.pool.get('hr.employee')
uid = ref('base.user_al')
emp_ids = hr_employee.search(cr, uid, [('user_id', '=', uid)])
if emp_ids:
employee = hr_employee.browse(cr, uid, emp_ids)[0]
id = self.create(cr, uid, {'emp_id': employee.id, 'name': employee.name, 'last_time': time.strftime('%Y-%m-%d %H:%M:%S')})
time.sleep(2)
self.so_check(cr, uid, [ref("employee_sign_in")], context=context)
-
Finally i check the employee is present.
I check that Employee is "Absent".
-
!assert {model: hr.employee, id: hr.employee_al, severity: error, string: Employee should be in present state}:
- state == 'present'
!assert {model: hr.employee, id: hr.employee_al, severity: error, string: Employee should be in absent state}:
- state == 'absent'

View File

@ -0,0 +1,908 @@
# Arabic translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-03 12:54+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic <ar@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-01-04 04:48+0000\n"
"X-Generator: Launchpad (build 14616)\n"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_anonymous_manager:0
msgid "Send an anonymous summary to the manager"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Start Appraisal"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr.evaluation.report:0
#: view:hr_evaluation.plan:0
msgid "Group By..."
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Appraisal that overpassed the deadline"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.interview,request_id:0
#: field:hr.evaluation.report,request_id:0
msgid "Request_id"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,progress_bar:0
#: field:hr_evaluation.evaluation,progress:0
msgid "Progress"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "March"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,delay_date:0
msgid "Delay to Start"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Appraisal that are in waiting appreciation state"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:244
#: code:addons/hr_evaluation/hr_evaluation.py:320
#, python-format
msgid "Warning !"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan:0
#: field:hr_evaluation.plan,company_id:0
#: field:hr_evaluation.plan.phase,company_id:0
msgid "Company"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.interview,evaluation_id:0
#: field:hr_evaluation.plan.phase,survey_id:0
msgid "Appraisal Form"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,day:0
msgid "Day"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan:0
#: field:hr_evaluation.plan,phase_ids:0
msgid "Appraisal Phases"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan,month_first:0
msgid ""
"This number of months will be used to schedule the first evaluation date of "
"the employee when selecting an evaluation plan. "
msgstr ""
#. module: hr_evaluation
#: view:hr.employee:0
msgid "Notes"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "(eval_name)s:Appraisal Name"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,help:hr_evaluation.open_view_hr_evaluation_tree
msgid ""
"Each employee may be assigned an Appraisal Plan. Such a plan defines the "
"frequency and the way you manage your periodic personnel evaluation. You "
"will be able to define steps and attach interviews to each step. OpenERP "
"manages all kind of evaluations: bottom-up, top-down, self-evaluation and "
"final evaluation by the manager."
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Mail Body"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,wait:0
msgid "Wait Previous Phases"
msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation
msgid "Employee Appraisal"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
#: selection:hr_evaluation.evaluation,state:0
msgid "Cancelled"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Did not meet expectations"
msgstr ""
#. module: hr_evaluation
#: view:hr.employee:0
#: view:hr_evaluation.evaluation:0
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_tree
msgid "Appraisal"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Send to Managers"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,date_close:0
msgid "Ending Date"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.evaluation,note_action:0
msgid ""
"If the evaluation does not meet the expectations, you can proposean action "
"plan"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Send to Employees"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:82
#, python-format
msgid ""
"\n"
"Date: %(date)s\n"
"\n"
"Dear %(employee_name)s,\n"
"\n"
"I am doing an evaluation regarding %(eval_name)s.\n"
"\n"
"Kindly submit your response.\n"
"\n"
"\n"
"Thanks,\n"
"--\n"
"%(user_signature)s\n"
"\n"
" "
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Appraisal that are in Plan In Progress state"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Reset to Draft"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,deadline:0
msgid "Deadline"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid " Month "
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "In progress Evaluations"
msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_survey_request
msgid "survey.request"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "(date)s: Current Date"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_anonymous_employee:0
msgid "Send an anonymous summary to the employee"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:81
#, python-format
msgid "Regarding "
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,state:0
#: view:hr_evaluation.evaluation:0
#: field:hr_evaluation.evaluation,state:0
msgid "State"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,employee_id:0
#: view:hr_evaluation.evaluation:0
#: field:hr_evaluation.evaluation,employee_id:0
#: model:ir.model,name:hr_evaluation.model_hr_employee
msgid "Employee"
msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.evaluation,state:0
msgid "New"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,mail_body:0
msgid "Email"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Exceeds expectations"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,mail_feature:0
msgid ""
"Check this box if you want to send mail to employees coming under this phase"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Evaluation done in last month"
msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_mail_compose_message
msgid "E-mail composition wizard"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Creation Date"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_answer_manager:0
msgid "Send all answers to the manager"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
#: selection:hr_evaluation.evaluation,state:0
msgid "Plan In Progress"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Public Notes"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Send Reminder Email"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr_evaluation.evaluation,rating:0
msgid "Appreciation"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Print Interview"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Pending"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,closed:0
msgid "closed"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Meet expectations"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,nbr:0
msgid "# of Requests"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "July"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_plans_installer
msgid "Review Appraisal Plans"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid " Month-1 "
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Action to Perform"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,note_action:0
msgid "Action Plan"
msgstr ""
#. module: hr_evaluation
#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr_config
msgid "Periodic Appraisal"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Appraisal to close within the next 7 days"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Ending Summary"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Significantly exceeds expectations"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,help:hr_evaluation.action_hr_evaluation_interview_tree
msgid ""
"Interview Requests are generated automatically by OpenERP according to an "
"employee's Appraisal Plan. Each user receives automatic emails and requests "
"to evaluate their colleagues periodically."
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "In progress"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Interview Request"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,send_answer_employee:0
#: field:hr_evaluation.plan.phase,send_answer_manager:0
msgid "All Answers"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "September"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "December"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Evaluation done in current year"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,month:0
msgid "Month"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Group by..."
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Mail Settings"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.evaluation_reminders
msgid "Appraisal Reminders"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interview Question"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,wait:0
msgid ""
"Check this box if you want to wait that all preceding phases are finished "
"before launching this phase."
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Legend"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan,month_first:0
msgid "First Appraisal in (months)"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
msgid "Draft"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,send_anonymous_employee:0
#: field:hr_evaluation.plan.phase,send_anonymous_manager:0
msgid "Anonymous Summary"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "7 Days"
msgstr ""
#. module: hr_evaluation
#: field:hr.employee,evaluation_plan_id:0
#: view:hr_evaluation.plan:0
#: field:hr_evaluation.plan,name:0
#: field:hr_evaluation.plan.phase,plan_id:0
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan
msgid "Appraisal Plan"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "August"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "June"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Significantly bellow expectations"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid " (employee_name)s: Partner name"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,plan_id:0
#: view:hr_evaluation.evaluation:0
#: field:hr_evaluation.evaluation,plan_id:0
msgid "Plan"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan,active:0
msgid "Active"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "November"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Extended Filters..."
msgstr ""
#. module: hr_evaluation
#: constraint:hr.employee:0
msgid "Error ! You cannot create recursive Hierarchy of Employees."
msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan_phase
msgid "Appraisal Plan Phase"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "January"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.act_hr_employee_2_hr__evaluation_interview
msgid "Appraisal Interviews"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Date"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Survey"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.evaluation,rating:0
msgid "This is the appreciation on that summarize the evaluation"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,action:0
msgid "Action"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: selection:hr.evaluation.report,state:0
msgid "Final Validation"
msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.evaluation,state:0
msgid "Waiting Appreciation"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all
#: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all
msgid "Appraisal Analysis"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,date:0
msgid "Appraisal Deadline"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,rating:0
msgid "Overall Rating"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,email_subject:0
msgid "char"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interviewer"
msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_report
msgid "Evaluations Statistics"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Deadline Date"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/wizard/mail_compose_message.py:45
#, python-format
msgid ""
"Hello %s, \n"
"\n"
" Kindly post your response for '%s' survey interview. \n"
"\n"
" Thanks,"
msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Top-Down Appraisal Requests"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,help:hr_evaluation.action_evaluation_plans_installer
msgid ""
"You can define appraisal plans (ex: first interview after 6 months, then "
"every year). Then, each employee can be linked to an appraisal plan so that "
"OpenERP can automatically generate interview requests to managers and/or "
"subordinates."
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "General"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_answer_employee:0
msgid "Send all answers to the employee"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Appraisal Data"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: selection:hr.evaluation.report,state:0
#: view:hr_evaluation.evaluation:0
#: selection:hr_evaluation.evaluation,state:0
msgid "Done"
msgstr ""
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_plan_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_plan_tree
msgid "Appraisal Plans"
msgstr ""
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_interview
msgid "Appraisal Interview"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Cancel"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/wizard/mail_compose_message.py:49
#, python-format
msgid "Reminder to fill up Survey"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "In Progress"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "To Do"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Final Validation Evaluations"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,mail_feature:0
msgid "Send mail for this phase"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Late"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "October"
msgstr ""
#. module: hr_evaluation
#: help:hr.employee,evaluation_date:0
msgid ""
"The date of the next appraisal is computed by the appraisal plan's dates "
"(first appraisal + periodicity)."
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,overpass_delay:0
msgid "Overpassed Deadline"
msgstr ""
#. module: hr_evaluation
#: help:hr_evaluation.plan,month_next:0
msgid ""
"The number of month that depicts the delay between each evaluation of this "
"plan (after the first one)."
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan,month_next:0
msgid "Periodicity of Appraisal (months)"
msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Self Appraisal Requests"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,survey_request_ids:0
msgid "Appraisal Forms"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "May"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Internal Notes"
msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Final Interview"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,name:0
msgid "Phase"
msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Bottom-Up Appraisal Requests"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:244
#, python-format
msgid ""
"You cannot change state, because some appraisal in waiting answer or draft "
"state"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "February"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interview Appraisal"
msgstr ""
#. module: hr_evaluation
#: field:survey.request,is_evaluation:0
msgid "Is Appraisal?"
msgstr ""
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:320
#, python-format
msgid "You cannot start evaluation without Appraisal."
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Evaluation done in current month"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.interview,user_to_review_id:0
msgid "Employee to Interview"
msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "April"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Appraisal Plan Phases"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Validate Appraisal"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Search Appraisal"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,sequence:0
msgid "Sequence"
msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "(user_signature)s: User name"
msgstr ""
#. module: hr_evaluation
#: view:board.board:0
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_board
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_open_hr_evaluation_interview_requests
msgid "Interview Requests"
msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,create_date:0
msgid "Create Date"
msgstr ""
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,year:0
msgid "Year"
msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,note_summary:0
msgid "Appraisal Summary"
msgstr ""
#. module: hr_evaluation
#: field:hr.employee,evaluation_date:0
msgid "Next Appraisal Date"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -25,9 +25,18 @@ access_survey_page_hr_user,survey.page.hr.user,survey.model_survey_page,base.gro
access_survey_response_hr_user,survey.response.hr.user,survey.model_survey_response,base.group_hr_user,1,1,1,0
access_survey_history_hr_user,survey.history.hr.user,survey.model_survey_history,base.group_hr_user,1,1,1,0
access_survey_request_hr_user,survey.request.hr.user,survey.model_survey_request,base.group_hr_user,1,1,1,0
access_survey_request_hr_employee,survey.request.hr.employee,survey.model_survey_request,base.group_user,1,1,1,0
access_survey_question_column_heading_hr_user,survey.question.column.heading.hr.user,survey.model_survey_question_column_heading,base.group_hr_user,1,0,0,0
access_survey_response_line_hr_user,survey.response.line.hr.user,survey.model_survey_response_line,base.group_hr_user,1,1,1,0
access_survey_tbl_column_heading_hr_user,survey.tbl.column.heading.hr.user,survey.model_survey_tbl_column_heading,base.group_hr_user,1,1,1,0
access_base_calendar_attendee_survey_user,base.calendar.calendar.attendee.survey.user,base_calendar.model_calendar_attendee,base.group_survey_user,1,1,1,0
access_base_calendar_attendee_tool_user,base.calendar.calendar.attendee.tool.user,base_calendar.model_calendar_attendee,base.group_tool_user,1,1,1,0
access_survey_request_hr_employee,survey.request.hr.employee,survey.model_survey_request,base.group_user,1,1,1,0
access_survey_hr_employee,survey.hr.employee,survey.model_survey,base.group_user,1,1,0,0
access_survey_page_hr_employee,survey.page.hr.employee,survey.model_survey_page,base.group_user,1,0,0,0
access_survey_answer_hr_employee,survey.answer.employee,survey.model_survey_answer,base.group_user,1,0,0,0
access_survey_question_hr_employee,survey.question.employee,survey.model_survey_question,base.group_user,1,0,0,0
access_survey_response_hr_employee,survey.response.employee,survey.model_survey_response,base.group_user,1,1,1,0
access_survey_question_column_heading_hr_employee,survey.question.column.heading.employee,survey.model_survey_question_column_heading,base.group_user,1,0,0,0
access_survey_response_line_hr_employee,survey.response.line.employee,survey.model_survey_response_line,base.group_user,1,1,1,0
access_survey_response_answer_hr_employee,survey.response.answer.hr.employee,survey.model_survey_response_answer,base.group_user,1,1,1,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
25 access_survey_response_hr_user survey.response.hr.user survey.model_survey_response base.group_hr_user 1 1 1 0
26 access_survey_history_hr_user survey.history.hr.user survey.model_survey_history base.group_hr_user 1 1 1 0
27 access_survey_request_hr_user survey.request.hr.user survey.model_survey_request base.group_hr_user 1 1 1 0
access_survey_request_hr_employee survey.request.hr.employee survey.model_survey_request base.group_user 1 1 1 0
28 access_survey_question_column_heading_hr_user survey.question.column.heading.hr.user survey.model_survey_question_column_heading base.group_hr_user 1 0 0 0
29 access_survey_response_line_hr_user survey.response.line.hr.user survey.model_survey_response_line base.group_hr_user 1 1 1 0
30 access_survey_tbl_column_heading_hr_user survey.tbl.column.heading.hr.user survey.model_survey_tbl_column_heading base.group_hr_user 1 1 1 0
31 access_base_calendar_attendee_survey_user base.calendar.calendar.attendee.survey.user base_calendar.model_calendar_attendee base.group_survey_user 1 1 1 0
32 access_base_calendar_attendee_tool_user base.calendar.calendar.attendee.tool.user base_calendar.model_calendar_attendee base.group_tool_user 1 1 1 0
33 access_survey_request_hr_employee survey.request.hr.employee survey.model_survey_request base.group_user 1 1 1 0
34 access_survey_hr_employee survey.hr.employee survey.model_survey base.group_user 1 1 0 0
35 access_survey_page_hr_employee survey.page.hr.employee survey.model_survey_page base.group_user 1 0 0 0
36 access_survey_answer_hr_employee survey.answer.employee survey.model_survey_answer base.group_user 1 0 0 0
37 access_survey_question_hr_employee survey.question.employee survey.model_survey_question base.group_user 1 0 0 0
38 access_survey_response_hr_employee survey.response.employee survey.model_survey_response base.group_user 1 1 1 0
39 access_survey_question_column_heading_hr_employee survey.question.column.heading.employee survey.model_survey_question_column_heading base.group_user 1 0 0 0
40 access_survey_response_line_hr_employee survey.response.line.employee survey.model_survey_response_line base.group_user 1 1 1 0
41 access_survey_response_answer_hr_employee survey.response.answer.hr.employee survey.model_survey_response_answer base.group_user 1 1 1 0
42

View File

@ -172,7 +172,6 @@
<field name="name">Expenses</field>
<field name="res_model">hr.expense.expense</field>
<field name="view_type">form</field>
<field name="context">{"search_default_user_id":uid}</field>
<field name="search_view_id" ref="view_hr_expense_filter"/>
<field name="view_id" ref="view_expenses_tree"/>
<field name="help">The OpenERP expenses management module allows you to track the full flow. Every month, the employees record their expenses. At the end of the month, their managers validates the expenses sheets which creates costs on projects/analytic accounts. The accountant validates the proposed entries and the employee can be reimbursed. You can also reinvoice the customer at the end of the flow.</field>

View File

@ -312,7 +312,7 @@
<field name="name">Allocation Requests</field>
<field name="res_model">hr.holidays</field>
<field name="view_type">form</field>
<field name="context">{"search_default_my_leaves": 1,'default_type':'add',"search_default_department_id": department_id}</field>
<field name="context">{'default_type':'add',"search_default_department_id": department_id}</field>
<field name="domain">[('type','=','add')]</field>
<field name="view_id" ref="allocation_leave_new"/>
<field name="search_view_id" ref="view_hr_holidays_filter"/>
@ -340,7 +340,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" eval="view_holiday_simple"/>
<field name="context">{'search_default_my_leaves': 1, 'search_default_group_type': 1, 'search_default_validated': 1}</field>
<field name="context">{'search_default_group_type': 1, 'search_default_validated': 1}</field>
<field name="domain">[('holiday_type','=','employee')]</field>
<field name="search_view_id" ref="view_hr_holidays_filter"/>
</record>

View File

@ -585,14 +585,15 @@ class hr_payslip(osv.osv):
#check if the rule can be applied
if obj_rule.satisfy_condition(cr, uid, rule.id, localdict, context=context) and rule.id not in blacklist:
#compute the amount of the rule
amount, qty = obj_rule.compute_rule(cr, uid, rule.id, localdict, context=context)
amount, qty, rate = obj_rule.compute_rule(cr, uid, rule.id, localdict, context=context)
#check if there is already a rule computed with that code
previous_amount = rule.code in localdict and localdict[rule.code] or 0.0
#set/overwrite the amount computed for this rule in the localdict
localdict[rule.code] = amount * qty
tot_rule = amount * qty * rate / 100.0
localdict[rule.code] = tot_rule
rules[rule.code] = rule
#sum the amount for its salary category
localdict = _sum_salary_rule_category(localdict, rule.category_id, (amount * qty) - previous_amount)
localdict = _sum_salary_rule_category(localdict, rule.category_id, tot_rule - previous_amount)
#create/overwrite the rule in the temporary results
result_dict[key] = {
'salary_rule_id': rule.id,
@ -616,6 +617,7 @@ class hr_payslip(osv.osv):
'amount': amount,
'employee_id': contract.employee_id.id,
'quantity': qty,
'rate': rate,
}
else:
#blacklist this rule and its children
@ -780,7 +782,7 @@ class hr_salary_rule(osv.osv):
('code','Python Code'),
],'Amount Type', select=True, required=True, help="The computation method for the rule amount."),
'amount_fix': fields.float('Fixed Amount', digits_compute=dp.get_precision('Payroll'),),
'amount_percentage': fields.float('Percentage (%)', digits_compute=dp.get_precision('Payroll'), help='For example, enter 50.0 to apply a percentage of 50%'),
'amount_percentage': fields.float('Percentage (%)', digits_compute=dp.get_precision('Payroll Rate'), help='For example, enter 50.0 to apply a percentage of 50%'),
'amount_python_compute':fields.text('Python Code'),
'amount_percentage_base':fields.char('Percentage based on',size=1024, required=False, readonly=False, help='result will be affected to a variable'),
'child_ids':fields.one2many('hr.salary.rule', 'parent_rule_id', 'Child Salary Rule'),
@ -846,26 +848,26 @@ result = rules.NET > categories.NET * 0.10''',
#TODO should add some checks on the type of result (should be float)
def compute_rule(self, cr, uid, rule_id, localdict, context=None):
"""
@param rule_id: id of rule to compute
@param localdict: dictionary containing the environement in which to compute the rule
@return: returns the result of computation and the quantity as floats
:param rule_id: id of rule to compute
:param localdict: dictionary containing the environement in which to compute the rule
:return: returns a tuple build as the base/amount computed, the quantity and the rate
:rtype: (float, float, float)
"""
rule = self.browse(cr, uid, rule_id, context=context)
if rule.amount_select == 'fix':
try:
return rule.amount_fix, eval(rule.quantity, localdict)
return rule.amount_fix, eval(rule.quantity, localdict), 100.0
except:
raise osv.except_osv(_('Error'), _('Wrong quantity defined for salary rule %s (%s)')% (rule.name, rule.code))
elif rule.amount_select == 'percentage':
try:
amount = rule.amount_percentage * eval(rule.amount_percentage_base, localdict) / 100
return amount, eval(rule.quantity, localdict)
return eval(rule.amount_percentage_base, localdict), eval(rule.quantity, localdict), rule.amount_percentage
except:
raise osv.except_osv(_('Error'), _('Wrong percentage base or quantity defined for salary rule %s (%s)')% (rule.name, rule.code))
else:
try:
eval(rule.amount_python_compute, localdict, mode='exec', nocopy=True)
return localdict['result'], 'result_qty' in localdict and localdict['result_qty'] or 1.0
return localdict['result'], 'result_qty' in localdict and localdict['result_qty'] or 1.0, 'result_rate' in localdict and localdict['result_rate'] or 100.0
except:
raise osv.except_osv(_('Error'), _('Wrong python code defined for salary rule %s (%s) ')% (rule.name, rule.code))
@ -923,7 +925,7 @@ class hr_payslip_line(osv.osv):
if not ids: return {}
res = {}
for line in self.browse(cr, uid, ids, context=context):
res[line.id] = float(line.quantity) * line.amount
res[line.id] = float(line.quantity) * line.amount * line.rate / 100
return res
_columns = {
@ -931,6 +933,7 @@ class hr_payslip_line(osv.osv):
'salary_rule_id':fields.many2one('hr.salary.rule', 'Rule', required=True),
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
'contract_id':fields.many2one('hr.contract', 'Contract', required=True, select=True),
'rate': fields.float('Rate (%)', digits_compute=dp.get_precision('Payroll Rate')),
'amount': fields.float('Amount', digits_compute=dp.get_precision('Payroll')),
'quantity': fields.float('Quantity', digits_compute=dp.get_precision('Payroll')),
'total': fields.function(_calculate_total, method=True, type='float', string='Total', digits_compute=dp.get_precision('Payroll'),store=True ),
@ -938,6 +941,7 @@ class hr_payslip_line(osv.osv):
_defaults = {
'quantity': 1.0,
'rate': 100.0,
}
hr_payslip_line()

View File

@ -79,5 +79,11 @@
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_payroll_rate" model="decimal.precision">
<field name="name">Payroll Rate</field>
<field name="digits">4</field>
</record>
</data>
</openerp>

View File

@ -169,7 +169,8 @@
<field name="sequence" groups="base.group_extended"/>
<field name="name"/>
<field name="code"/>
<field name="quantity" string="Quantity/Rate"/>
<field name="quantity"/>
<field name="rate"/>
<field name="amount"/>
<field name="total"/>
<field name="amount_select" invisible="1"/>
@ -319,7 +320,8 @@
<field name="code"/>
<field name="category_id"/>
<field name="sequence" invisible="1"/>
<field name="quantity" string="Quantity/Rate"/>
<field name="quantity"/>
<field name="rate"/>
<field name="amount"/>
<field name="total"/>
</tree>
@ -329,7 +331,8 @@
<field name="code" select="1"/>
<field name="category_id"/>
<field name="sequence" groups="base.group_extended"/>
<field name="quantity" string="Quantity/Rate"/>
<field name="quantity"/>
<field name="rate"/>
<field name="amount"/>
<field name="total"/>
<field name="salary_rule_id" groups="base.group_extended"/>

1200
addons/hr_payroll/i18n/ar.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,140 @@
# Arabic translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-22 18:44+0000\n"
"PO-Revision-Date: 2012-01-03 12:54+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic <ar@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-01-04 04:48+0000\n"
"X-Generator: Launchpad (build 14616)\n"
#. module: hr_payroll_account
#: field:hr.payslip,move_id:0
msgid "Accounting Entry"
msgstr ""
#. module: hr_payroll_account
#: field:hr.salary.rule,account_tax_id:0
msgid "Tax Code"
msgstr ""
#. module: hr_payroll_account
#: field:hr.payslip,journal_id:0
#: field:hr.payslip.run,journal_id:0
msgid "Expense Journal"
msgstr ""
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:157
#: code:addons/hr_payroll_account/hr_payroll_account.py:173
#, python-format
msgid "Adjustment Entry"
msgstr ""
#. module: hr_payroll_account
#: field:hr.contract,analytic_account_id:0
#: field:hr.salary.rule,analytic_account_id:0
msgid "Analytic Account"
msgstr ""
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule
msgid "hr.salary.rule"
msgstr ""
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run
msgid "Payslip Batches"
msgstr ""
#. module: hr_payroll_account
#: field:hr.contract,journal_id:0
msgid "Salary Journal"
msgstr ""
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_payslip
msgid "Pay Slip"
msgstr ""
#. module: hr_payroll_account
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
msgstr ""
#. module: hr_payroll_account
#: help:hr.payslip,period_id:0
msgid "Keep empty to use the period of the validation(Payslip) date."
msgstr ""
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:171
#, python-format
msgid ""
"The Expense Journal \"%s\" has not properly configured the Debit Account!"
msgstr ""
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:155
#, python-format
msgid ""
"The Expense Journal \"%s\" has not properly configured the Credit Account!"
msgstr ""
#. module: hr_payroll_account
#: field:hr.salary.rule,account_debit:0
msgid "Debit Account"
msgstr ""
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:102
#, python-format
msgid "Payslip of %s"
msgstr ""
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_contract
msgid "Contract"
msgstr ""
#. module: hr_payroll_account
#: constraint:hr.contract:0
msgid "Error! contract start-date must be lower then contract end-date."
msgstr ""
#. module: hr_payroll_account
#: field:hr.payslip,period_id:0
msgid "Force Period"
msgstr ""
#. module: hr_payroll_account
#: field:hr.salary.rule,account_credit:0
msgid "Credit Account"
msgstr ""
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees
msgid "Generate payslips for all selected employees"
msgstr ""
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:155
#: code:addons/hr_payroll_account/hr_payroll_account.py:171
#, python-format
msgid "Configuration Error!"
msgstr ""
#. module: hr_payroll_account
#: view:hr.contract:0
#: view:hr.salary.rule:0
msgid "Accounting"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -89,7 +89,7 @@
<field name="res_model">hr.analytic.timesheet</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{"search_default_user_id":uid, "search_default_today":1}</field>
<field name="context">{"search_default_today":1}</field>
<field name="search_view_id" ref="hr_timesheet_line_search"/>
<field name="help">Through this menu you can register and follow your workings hours by project every day.</field>
</record>

View File

@ -26,7 +26,7 @@
'description': """The module adds google contact in partner address and add google calendar events details in Meeting""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
'depends': ['base', 'google_base_account','crm'],
'depends': ['base', 'import_base', 'google_base_account','crm'],
'init_xml': [],
'update_xml': ['security/ir.model.access.csv',
'sync_google_calendar_view.xml',

View File

@ -22,10 +22,6 @@
import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
import PIL
import io
import base64
import StringIO
import netsvc
from osv import fields, osv
@ -282,7 +278,7 @@ class pos_order(osv.osv):
('user_id', '=', uid),
('state', '=', 'open')], context=context)
if len(statement_id) == 0:
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox.'))
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox'))
if statement_id:
statement_id = statement_id[0]
args['statement_id'] = statement_id
@ -731,40 +727,11 @@ class pos_category(osv.osv):
}
pos_category()
_IMAGE_SIZE = 100,120
class product_product(osv.osv):
_inherit = 'product.product'
def _get_img(self, cr, uid, ids, field_name, arg, context=None):
context = context or {}
bin_size = context.get('bin_size', False)
context = dict(context, bin_size = False)
products = self.browse(cr, uid, ids, context=context)
result = {}
for product in products:
image64 = product.product_image
if not image64:
result[product.id] = False
continue
image_bin = base64.decodestring(image64)
image_stream = io.BytesIO(image_bin)
im = PIL.Image.open(image_stream)
im.thumbnail(_IMAGE_SIZE, PIL.Image.ANTIALIAS)
nimage_stream = StringIO.StringIO()
im.save(nimage_stream, format="JPEG")
nimage_bin = nimage_stream.getvalue()
if not bin_size:
result[product.id] = base64.encodestring(nimage_bin)
else:
result[product.id] = nimage_bin.length
return result
_columns = {
'income_pdt': fields.boolean('PoS Cash Input', help="This is a product you can use to put cash into a statement for the point of sale backend."),
'expense_pdt': fields.boolean('PoS Cash Output', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."),
'img': fields.function(_get_img, method=True, type="binary", string='Product Image',
store = {'product.product': (lambda self, cr, uid, ids, c=None: ids, ['product_image'], 10)}),
'pos_categ_id': fields.many2one('pos.category','PoS Category',
help="If you want to sell this product through the point of sale, select the category it belongs to.")
}

View File

@ -18,7 +18,8 @@
<record model="workflow.activity" id="act_paid">
<field name="wkf_id" ref="wkf_pos"/>
<field name="name">paid</field>
<field name="kind">dummy</field>
<field name="action">write({'state':'paid'})</field>
<field name="kind">function</field>
</record>
<record model="workflow.activity" id="act_done">

View File

@ -82,6 +82,9 @@
height: 35px;
padding: 10px;
}
.point-of-sale #rightheader {
float: none;
}
.point-of-sale #branding {
border-right: 1px solid #373737;
text-align: center;

View File

@ -86,7 +86,7 @@ openerp.point_of_sale = function(db) {
}, this));
}, this));
$.when(this.fetch('pos.category', ['name', 'parent_id', 'child_id']),
this.fetch('product.product', ['name', 'list_price', 'pos_categ_id', 'taxes_id', 'img'], [['pos_categ_id', '!=', 'false']]),
this.fetch('product.product', ['name', 'list_price', 'pos_categ_id', 'taxes_id', 'product_image'], [['pos_categ_id', '!=', 'false']]),
this.fetch('account.bank.statement', ['account_id', 'currency', 'journal_id', 'state', 'name'],
[['state', '=', 'open'], ['user_id', '=', this.session.uid]]),
this.fetch('account.journal', ['auto_cash', 'check_dtls', 'currency', 'name', 'type']),
@ -591,7 +591,7 @@ openerp.point_of_sale = function(db) {
},
clickAppendNewChar: function(event) {
var newChar;
newChar = event.currentTarget.innerText;
newChar = event.currentTarget.innerText || event.currentTarget.textContent;
return this.state.appendNewChar(newChar);
},
clickChangeMode: function(event) {

View File

@ -18,16 +18,16 @@
<input type="radio" id="receipt-step-button" class="step-button" data-step='receipt' name="radio" />
<label for="receipt-step-button">Receipt</label>
</div>
<div id="loggedas">
<span class="oe_pos_synch-notification"></span>
<button>Close</button>
</div>
<div id="rightheader">
<div id="order-selector">
<button id="neworder-button">+</button>
<ol id="orders"></ol>
</div>
</div>
<div id="loggedas">
<span class="oe_pos_synch-notification"></span>
<button>Close</button>
</div>
</div>
<div id="content">
@ -188,7 +188,7 @@
<t t-name="pos-product-template">
<a href="#">
<div class="product-img">
<img t-att-src="'data:image/gif;base64,'+ img" />
<img t-att-src="'data:image/gif;base64,'+ product_image" />
<span class="price-tag">
<t t-esc="format_amount(list_price)"/>
</span>

View File

@ -98,6 +98,7 @@ class portal(osv.osv):
def do_create_menu(self, cr, uid, ids, context=None):
""" create a parent menu for the given portals """
menu_obj = self.pool.get('ir.ui.menu')
ir_data = self.pool.get('ir.model.data')
menu_root = self._res_xml_id(cr, uid, 'portal', 'portal_menu')
for p in self.browse(cr, uid, ids, context):
@ -110,7 +111,13 @@ class portal(osv.osv):
menu_id = menu_obj.create(cr, uid, menu_values, context)
# set the parent_menu_id to item_id
self.write(cr, uid, [p.id], {'parent_menu_id': menu_id}, context)
menu_values.pop('parent_id')
menu_values.pop('groups_id')
menu_values.update({'model': 'ir.ui.menu',
'module': 'portal',
'res_id': menu_id,
'noupdate': 'True'})
data_id = ir_data.create(cr, uid, menu_values, context)
return True
def _assign_menu(self, cr, uid, ids, context=None):

View File

@ -567,4 +567,12 @@ class stock_warehouse_orderpoint(osv.osv):
return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context=context)
stock_warehouse_orderpoint()
class product_product(osv.osv):
_inherit="product.product"
_columns = {
'orderpoint_ids': fields.one2many('stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rule')
}
product_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -275,5 +275,30 @@
<menuitem id="menu_stock_procurement" name="Automatic Procurements" parent="stock.menu_stock_configuration" sequence="5"/>
<menuitem action="action_orderpoint_form" id="menu_stock_order_points" parent="menu_stock_procurement" sequence="10"/>
<record id="product_normal_form_view" model="ir.ui.view">
<field name="name">product.normal.form.orderpoint.inherit</field>
<field name="model">product.product</field>
<field name="type">form</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<group name="misc" position="after">
<group col="2" colspan="2" attrs="{'invisible':[('type', '=', 'service')]}">
<separator string="Minimum Stock Rules" colspan="2"/>
<field name="orderpoint_ids" context="{'default_product_uom': uom_id}" nolabel="1">
<tree string="Minimum Stock Rule" editable="bottom">
<field name="warehouse_id" on_change="onchange_warehouse_id(warehouse_id)" widget="selection"/>
<field name="location_id" groups="base.group_extended"/>
<field name="product_min_qty"/>
<field name="product_max_qty"/>
<field name="product_uom" groups="base.group_extended"/>
</tree>
</field>
</group>
</group>
</field>
</record>
</data>
</openerp>

View File

@ -61,7 +61,11 @@ Print product labels with barcode.
'partner_view.xml',
'process/product_process.xml'
],
'test':['test/product_report.yml','test/product_test.yml'],
'test': [
'product_pricelist_demo.yml',
'test/product_uom.yml',
'test/product_pricelist.yml',
],
'installable': True,
'active': False,
'certificate': '0068861431437',

View File

@ -271,7 +271,7 @@ class product_pricelist(osv.osv):
if price is not False:
price_limit = price
price = price * (1.0+(res['price_discount'] or 0.0))
price = rounding(price, res['price_round'])
price = rounding(price, res['price_round']) #TOFIX: rounding with tools.float_rouding
price += (res['price_surcharge'] or 0.0)
if res['price_min_margin']:
price = max(price, price_limit+res['price_min_margin'])

View File

@ -218,6 +218,8 @@ class product_category(osv.osv):
'child_id': fields.one2many('product.category', 'parent_id', string='Child Categories'),
'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of product categories."),
'type': fields.selection([('view','View'), ('normal','Normal')], 'Category Type'),
'parent_left': fields.integer('Left Parent', select=1),
'parent_right': fields.integer('Right Parent', select=1),
}
@ -225,7 +227,11 @@ class product_category(osv.osv):
'type' : lambda *a : 'normal',
}
_order = "sequence, name"
_parent_name = "parent_id"
_parent_store = True
_parent_order = 'sequence, name'
_order = 'parent_left'
def _check_recursion(self, cr, uid, ids, context=None):
level = 100
while len(ids):
@ -406,10 +412,11 @@ class product_product(osv.osv):
context = {}
quantity = context.get('quantity') or 1.0
pricelist = context.get('pricelist', False)
partner = context.get('partner', False)
if pricelist:
for id in ids:
try:
price = self.pool.get('product.pricelist').price_get(cr,uid,[pricelist], id, quantity, context=context)[pricelist]
price = self.pool.get('product.pricelist').price_get(cr,uid,[pricelist], id, quantity, partner=partner, context=context)[pricelist]
except:
price = 0.0
res[id] = price

View File

@ -321,6 +321,7 @@
<field name="type">product</field>
<field name="categ_id" ref="product_category_10"/>
</record>
<record id="product_product_tow1" model="product.product">
<field name="default_code">TOW1</field>
<field name="list_price">37.5</field>

View File

@ -0,0 +1,62 @@
-
!record {model: product.product, id: product_product_pc2}:
uom_id: product_uom_unit
categ_id: product_category_pc
-
!record {model: product.pricelist, id: customer_pricelist}:
name: Customer Pricelist
type: sale
version_id:
- name: v1.0
date_start: 2012-01-01
items_id:
- name: Default pricelist
base: -1
base_pricelist_id: list0
- name: 10% Discount on PC2
sequence: 1
product_id: product_product_pc2
base: !eval (ref('product.list_price'))
price_discount: -0.10
- name: 1 surchange on PC3
sequence: 1
product_id: product_product_pc3
base: !eval (ref('product.list_price'))
price_surcharge: 1
- name: 5% Discount on all IT components
sequence: 1
min_quantity: 2
base: !eval (ref('product.list_price'))
categ_id: product_category_10
price_discount: -0.05
- name: v2.0 (Special Discount on all products during last 5 days in current year)
date_start: 2011-12-27
date_end: 2011-12-31
items_id:
- name: 30% Discount on all products
price_discount: -0.30
sequence: 1
base: !eval (ref('product.list_price'))
-
!record {model: product.pricelist, id: supplier_pricelist}:
name: Supplier Pricelist
type: sale
version_id:
- name: v1.0
items_id:
- name: 20% Discount given by my supplier
sequence: 1
price_min_margin: 2
price_max_margin: -5
product_id: product_product_pc2
base: -2
-
!record {model: pricelist.partnerinfo, id: supplier_pricelist0_product_pc2}:
suppinfo_id: supplierinfo6
min_quantity: 3
price: 405
-
!record {model: pricelist.partnerinfo, id: supplier_pricelist1_product_pc2}:
suppinfo_id: supplierinfo6
min_quantity: 1
price: 455

View File

@ -0,0 +1,75 @@
-
In order to check the calculation of price of the products according to pricelist,
-
I check sale price of PC2.
-
!python {model: product.product}: |
context.update({'pricelist': ref("customer_pricelist"), 'quantity':1})
product = self.browse(cr, uid, ref("product_product_pc2"), context=context)
assert product.price == product.lst_price-product.lst_price*(0.10), "Sell price is not correspond."
-
I check sale price of PC3.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref("product_product_pc3"), context=context)
assert product.price == product.lst_price + 1, "Sell price is not correspond."
-
I check sale price of IT componet.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref("product_product_mb1"), context=context)
assert product.price == product.lst_price, "Sell price is not correspond."
-
I check sale price of IT componet if more than 3 PCE.
-
!python {model: product.product}: |
context.update({'quantity':5})
product = self.browse(cr, uid, ref("product_product_mb1"), context=context)
assert product.price == product.lst_price-product.lst_price*(0.05), "Sell price is not correspond."
-
I check sale price of PC4.
-
!python {model: product.product}: |
context.update({'quantity':1})
product = self.browse(cr, uid, ref("product_product_pc4"), context=context)
assert product.price == product.lst_price, "Sell price is not correspond."
-
I check sale price of PC4 on end of year.
-
!python {model: product.product}: |
context.update({'quantity':1, 'date': '2011-12-31'})
product = self.browse(cr, uid, ref("product_product_pc4"), context=context)
assert product.price == product.lst_price-product.lst_price*(0.30), "Sell price is not correspond."
-
I check cost price of PC2.
-
!python {model: product.product}: |
context.update({'quantity':1, 'date': False, 'partner': ref('base.res_partner_4'), 'pricelist': ref("supplier_pricelist")})
product = self.browse(cr, uid, ref("product_product_pc2"), context=context)
assert product.price == 450, "cost price is not correspond."
-
I check cost price of PC2 if more than 3 PCE.
-
!python {model: product.product}: |
context.update({'quantity':3})
product = self.browse(cr, uid, ref("product_product_pc2"), context=context)
assert product.price == 400, "cost price is not correspond."
-
I print the sale prices report.
-
!python {model: product.product}: |
ctx = {'model': 'product.product', 'date': '2011-12-30', 'active_ids': [ref('product.product_product_pc1'), ref('product.product_product_pc2'), ref('product.product_product_pc3'), ref('product.product_product_pc4')]}
data_dict = {
'qty1': 1,
'qty2': 5,
'qty3': 10,
'qty4': 15,
'qty5': 30,
'price_list':ref('customer_pricelist'),
}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_product_price_list',wiz_data=data_dict, context=ctx, our_module='product')

View File

@ -1,16 +0,0 @@
-
Print the Products Pricelists Report through the wizard
-
!python {model: product.product}: |
ctx={}
ctx.update({'model': 'product.product','active_ids': [ref('product.product_product_pc1'), ref('product.product_product_pc3')]})
data_dict = {'qty1': 1,
'qty2': 5,
'qty3': 10,
'qty4': 0,
'qty5': 0,
'price_list':ref('product.list0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_product_price_list',wiz_data=data_dict, context=ctx, our_module='product')

View File

@ -1,33 +0,0 @@
-
In order to test product,I start by creating a 20KG UOM for 'Sugar'
-
!record {model: product.uom, id: product_20k_uom_sugar}:
name: 20KG
uom_type: bigger
category_id: product.product_uom_categ_kgm
factor_inv: 20
-
I create a 10KG UOM for 'Sugar'
-
!record {model: product.uom, id: product_10k_uom_sugar}:
name: 10KG
uom_type: bigger
category_id: product.product_uom_categ_kgm
factor_inv: 10
-
I create a new product 'Sugar' in 20KG UOM.
-
!record {model: product.product, id: product_sugar_id1}:
categ_id: 'product.product_category_rawmaterial0'
name: Sugar 20KG
procure_method: make_to_order
standard_price: 400.0
uom_id: product.product_20k_uom_sugar
uom_po_id: product.product_20k_uom_sugar
-
I test onchanged on UOM, Create Duplicate Product and Delete original Product.
-
!python {model: product.product}: |
self.onchange_uom(cr ,uid, [ref("product_sugar_id1")], ref("product.product_20k_uom_sugar"), ref("product.product_10k_uom_sugar"))
self.copy(cr, uid, ref("product_sugar_id1"))
self.unlink(cr, uid, [ref("product_sugar_id1")])

View File

@ -0,0 +1,15 @@
-
In order to test conversation of UOM,
-
I convert Grams into TON with price.
-
!python {model: product.uom}: |
from_uom_id = ref("product_uom_gram")
to_uom_id = ref("product_uom_ton")
price = 2
qty = 1020000
price = self._compute_price(cr, uid, from_uom_id, price, to_uom_id)
qty = self._compute_qty(cr, uid, from_uom_id, qty, to_uom_id)
assert qty == 1.02, "Qty is not correspond."
assert price == 2000000.0, "Price is not correspond."

View File

@ -17,3 +17,4 @@ access_account_analytic_line_project,account.analytic.line project,analytic.mode
access_project_task_history,project.task.history project,project.model_project_task_history,project.group_project_user,1,1,1,0
access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_manager,1,0,0,0
access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0
access_mail_message_project_user,project.mail.message.user,mail.model_mail_message,project.group_project_user,1,1,1,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
17 access_project_task_history project.task.history project project.model_project_task_history project.group_project_user 1 1 1 0
18 access_project_task_history_cumulative project.task.history project project.model_project_task_history_cumulative project.group_project_manager 1 0 0 0
19 access_resource_calendar project.resource_calendar manager resource.model_resource_calendar project.group_project_manager 1 0 0 0
20 access_mail_message_project_user project.mail.message.user mail.model_mail_message project.group_project_user 1 1 1 0

View File

@ -76,10 +76,10 @@ Dashboard for Sales Manager that includes:
'company_view.xml',
'sale_workflow.xml',
'sale_sequence.xml',
'sale_report.xml',
'sale_data.xml',
'sale_view.xml',
'report/sale_report_view.xml',
'sale_report.xml',
'stock_view.xml',
'process/sale_process.xml',
'board_sale_view.xml',

View File

@ -102,12 +102,16 @@
<field name="arch" type="xml">
<form string="Sales Order">
<group col="6" colspan="4">
<field name="name"/>
<field name="date_order"/>
<field name="invoiced"/>
<field name="shop_id" on_change="onchange_shop_id(shop_id)" widget="selection"/>
<field name="client_order_ref"/>
<field name="shipped"/>
<group col="4" colspan="4">
<field name="name"/>
<field name="date_order"/>
<field name="shop_id" on_change="onchange_shop_id(shop_id)" widget="selection" groups="base.group_extended"/>
<field name="client_order_ref"/>
</group>
<group col="2" colspan="2">
<field name="invoiced"/>
<field name="shipped"/>
</group>
</group>
<notebook colspan="5">
<page string="Sales Order">
@ -118,7 +122,7 @@
<field domain="[('type','=','sale')]" name="pricelist_id" groups="base.group_extended" on_change="onchange_pricelist_id(pricelist_id,order_line)"/>
<field name="project_id" context="{'partner_id':partner_id, 'contact_id':partner_order_id, 'pricelist_id':pricelist_id, 'default_name':name}" groups="analytic.group_analytic_accounting" domain="[('parent_id','!=',False)]"/>
<newline/>
<field colspan="4" mode="tree,form,graph" name="order_line" nolabel="1" widget="one2many_list">
<field colspan="4" name="order_line" nolabel="1" widget="one2many_list">
<form string="Sales Order Lines">
<notebook>
<page string="Order Line">
@ -195,18 +199,20 @@
<button name="button_dummy" states="draft" string="Compute" type="object" icon="gtk-execute"/>
<button name="%(action_view_sale_advance_payment_inv)d" string="Advance Invoice" type="action" icon="gtk-execute" states="draft,manual" groups="base.group_extended"/>
</group>
<group col="13" colspan="4">
<group col="17" colspan="4">
<field name="state" widget="statusbar" statusbar_visible="draft,progress,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/>
<button name="invoice_recreate" states="invoice_except" string="Recreate Invoice" icon="gtk-go-forward"/>
<button name="invoice_corrected" states="invoice_except" string="Ignore Exception" icon="gtk-apply"/>
<button name="ship_recreate" states="shipping_except" string="Recreate Packing" icon="gtk-ok"/>
<button name="ship_corrected" states="shipping_except" string="Ignore Exception" icon="gtk-apply"/>
<button name="action_cancel" states="manual,progress" string="Cancel Order" type="object" icon="gtk-cancel"/>
<button name="%(report_sale_order)d" string="Print Order" type="action" icon="gtk-print" states="waiting_date,manual,progress,done,shipping_except,invoice_except"/>
<button name="manual_invoice" states="manual" string="Create Final Invoice" icon="gtk-go-forward" type="object"/>
<button name="ship_cancel" states="shipping_except" string="Cancel Order" icon="gtk-cancel"/>
<button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
<button name="cancel" states="draft" string="Cancel Order" icon="gtk-cancel"/>
<button name="invoice_cancel" states="invoice_except" string="Cancel Order" icon="gtk-cancel"/>
<button name="%(report_sale_order)d" string="Print Quotation" type="action" icon="gtk-print" states="draft"/>
<button name="order_confirm" states="draft" string="Confirm Order" icon="gtk-apply"/>
</group>
</page>

View File

@ -51,7 +51,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
"init_xml" : [],
"demo_xml" : [
"stock_demo.xml",
"stock_demo_picking.yml",
"stock_demo.yml",
],
"update_xml" : [
"security/stock_security.xml",
@ -82,10 +82,9 @@ Thanks to the double entry management, the inventory controlling is powerful and
"board_warehouse_view.xml",
],
'test': [
'test/stock_test.yml',
'test/opening_stock.yml',
'test/shipment.yml',
'test/stock_report.yml',
'test/stock_test_wizard.yml',
'test/stock_demo_backorder.yml'
],
'installable': True,
'application': True,

View File

@ -447,14 +447,12 @@ class stock_location(osv.osv):
""",
(id, id, product_id))
results += cr.dictfetchall()
total = 0.0
results2 = 0.0
for r in results:
amount = self.pool.get('product.uom')._compute_qty(cr, uid, r['product_uom'], r['product_qty'], context.get('uom', False))
results2 += amount
total += amount
if total <= 0.0:
continue
@ -822,6 +820,7 @@ class stock_picking(osv.osv):
""" Tests whether the move is in assigned state or not.
@return: True or False
"""
#TOFIX: assignment of move lines should be call before testing assigment otherwise picking never gone in assign state
ok = True
for pick in self.browse(cr, uid, ids):
mt = pick.move_type
@ -2321,6 +2320,7 @@ class stock_move(osv.osv):
@param context: context arguments
@return: Scraped lines
"""
#quantity should in MOVE UOM
if quantity <= 0:
raise osv.except_osv(_('Warning!'), _('Please provide a positive quantity to scrap!'))
res = []
@ -2421,6 +2421,7 @@ class stock_move(osv.osv):
@param context: context arguments
@return: Consumed lines
"""
#quantity should in MOVE UOM
if context is None:
context = {}
if quantity <= 0:
@ -2439,13 +2440,14 @@ class stock_move(osv.osv):
quantity = move.product_qty
uos_qty = quantity / move_qty * move.product_uos_qty
location_dest_id = move.product_id.property_stock_production or move.location_dest_id
if quantity_rest > 0:
default_val = {
'product_qty': quantity,
'product_uos_qty': uos_qty,
'state': move.state,
'location_id': location_id or move.location_id.id,
'location_dest_id': location_dest_id.id,
}
current_move = self.copy(cr, uid, move.id, default_val)
res += [current_move]
@ -2461,7 +2463,8 @@ class stock_move(osv.osv):
update_val = {
'product_qty' : quantity_rest,
'product_uos_qty' : uos_qty_rest,
'location_id': location_id or move.location_id.id
'location_id': location_id or move.location_id.id,
'location_dest_id': location_dest_id.id,
}
self.write(cr, uid, [move.id], update_val)
@ -2675,6 +2678,7 @@ class stock_inventory(osv.osv):
message = _("Inventory '%s' is done.") %(inv.name)
self.log(cr, uid, inv.id, message)
self.write(cr, uid, [inv.id], {'state': 'confirm', 'move_ids': [(6, 0, move_ids)]})
self.pool.get('stock.move').action_confirm(cr, uid, move_ids, context=context)
return True
def action_cancel_draft(self, cr, uid, ids, context=None):
@ -2686,7 +2690,7 @@ class stock_inventory(osv.osv):
self.write(cr, uid, [inv.id], {'state':'draft'}, context=context)
return True
def action_cancel_inventary(self, cr, uid, ids, context=None):
def action_cancel_inventory(self, cr, uid, ids, context=None):
""" Cancels both stock move and inventory
@return: True
"""

View File

@ -42,6 +42,7 @@
<field name="name">Shelf 1</field>
<field name="location_id" ref="stock_location_stock"/>
</record>
<!--
Resource: stock.inventory
@ -49,10 +50,7 @@
<record id="stock_inventory_0" model="stock.inventory">
<field name="name">Starting Inventory</field>
<field name="date_done">2005-08-02 13:42:43</field>
<field name="state">done</field>
</record>
<!--
Resource: stock.inventory.line
-->

102
addons/stock/stock_demo.yml Normal file
View File

@ -0,0 +1,102 @@
-
!record {model: stock.location, id: location_refrigerator}:
name: Refrigerator
usage: internal
-
!record {model: stock.location, id: location_delivery_counter}:
name: Delivery Counter
usage: internal
-
!record {model: stock.location, id: location_refrigerator_small}:
name: Small Refrigerator
usage: internal
location_id: location_refrigerator
-
!record {model: stock.location, id: location_opening}:
name: opening
usage: inventory
-
!record {model: stock.location, id: location_convenience_shop}:
name: Convenient Store
chained_auto_packing: auto
chained_location_type: fixed
usage: supplier
chained_location_id: location_refrigerator
location_id: stock_location_suppliers
-
!record {model: stock.warehouse, id: warehouse_icecream}:
name: Ice Cream Shop
lot_input_id: location_refrigerator
lot_stock_id: location_refrigerator
lot_output_id: location_delivery_counter
-
!record {model: product.product, id: product_icecream}:
default_code: 001
name: Ice Cream
type: product
categ_id: product.cat1
supply_method: buy
list_price: 100.0
standard_price: 70.0
uom_id: product.product_uom_kgm
uom_po_id: product.product_uom_kgm
procure_method: make_to_stock
property_stock_inventory: location_opening
property_stock_account_input: location_refrigerator
property_stock_account_output: location_delivery_counter
description: Ice cream can be mass-produced and thus is widely available in developed parts of the world. Ice cream can be purchased in large cartons (vats and squrounds) from supermarkets and grocery stores, in smaller quantities from ice cream shops, convenience stores, and milk bars, and in individual servings from small carts or vans at public events.
-
!record {model: stock.production.lot, id: lot_icecream_0}:
name: Lot0 for Ice cream
product_id: product_icecream
-
!record {model: stock.production.lot, id: lot_icecream_1}:
name: Lot1 for Ice cream
product_id: product_icecream
-
!record {model: stock.inventory, id: stock_inventory_icecream}:
name: Inventory for icecream
-
!record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot0}:
product_id: product_icecream
product_uom: product.product_uom_kgm
inventory_id: stock_inventory_icecream
product_qty: 50.0
prod_lot_id: lot_icecream_0
location_id: location_refrigerator
-
!record {model: stock.inventory.line, id: stock_inventory_line_icecream_lot1}:
product_id: product_icecream
product_uom: product.product_uom_kgm
inventory_id: stock_inventory_icecream
product_qty: 40.0
prod_lot_id: lot_icecream_1
location_id: location_refrigerator
-
!record {model: stock.picking, id: outgoing_shipment}:
type: out
location_dest_id: location_delivery_counter
-
!record {model: stock.move, id: outgoing_shipment_icecream}:
picking_id: outgoing_shipment
product_id: product_icecream
product_uom: product.product_uom_kgm
product_qty: 130.0
location_id: location_refrigerator
location_dest_id: location_delivery_counter
-
!record {model: stock.picking, id: incomming_shipment}:
type: in
invoice_state: 2binvoiced
address_id: base.res_partner_address_9
location_dest_id: location_refrigerator
-
!record {model: stock.move, id: incomming_shipment_icecream}:
picking_id: incomming_shipment
product_id: product_icecream
product_uom: product.product_uom_kgm
product_qty: 50.0
location_id: location_convenience_shop
location_dest_id: location_refrigerator

View File

@ -1,25 +0,0 @@
-
!record {model: stock.picking, id: stock_picking_1}:
type: out
company_id: base.main_company
address_id: res_partner_address_fabien0
-
!record {model: stock.move, id: stock_move_1}:
product_id: product.product_product_cpu1
product_uom: product.product_uom_unit
product_uos_qty: 5.0
product_qty: 5.0
location_dest_id: stock.stock_location_customers
location_id: stock.stock_location_stock
name: CPU1, Processor AMD Athlon XP 1800
picking_id: stock_picking_1
-
!record {model: stock.move, id: stock_move_2}:
product_id: product.product_product_cpu3
product_uom: product.product_uom_unit
product_uos_qty: 5.0
product_qty: 5.0
location_dest_id: stock.stock_location_customers
location_id: stock.stock_location_stock
name: CPU3, Processor AMD Athlon XP 1800
picking_id: stock_picking_1

View File

@ -171,7 +171,7 @@
<field name="state"/>
</group>
<group col="3" colspan="2">
<button name="action_cancel_inventary" states="draft,confirm,done" string="Cancel Inventory" type="object" icon="gtk-cancel"/>
<button name="action_cancel_inventory" states="draft,confirm,done" string="Cancel Inventory" type="object" icon="gtk-cancel"/>
<button name="action_confirm" states="draft" string="Confirm Inventory" type="object" icon="gtk-apply"/>
<button name="action_done" states="confirm" string="Validate Inventory" type="object" icon="gtk-jump-to"/>
<button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
@ -709,7 +709,7 @@
</group>
<notebook colspan="4">
<page string="Products">
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_in_id': address_id}">
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" context="{'address_in_id': address_id}">
<tree colors="grey:scrapped == True" string="Stock Moves">
<field name="product_id"/>
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
@ -902,7 +902,7 @@
</group>
<notebook colspan="4">
<page string="Products">
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id, 'picking_type': type}" >
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" context="{'address_out_id': address_id, 'picking_type': type}" >
<tree colors="grey:scrapped==True" string="Stock Moves">
<field name="product_id"/>
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
@ -1058,7 +1058,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar</field>
<field name="domain">[('type','=','out')]</field>
<field name="context">{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_available': 1}</field>
<field name="context">{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_confirmed': 1, 'search_default_available': 1}</field>
<field name="search_view_id" ref="view_picking_out_search"/>
<field name="help">This is the list of all delivery orders that have to be prepared, according to your different sales orders and your logistics rules.</field>
</record>
@ -1123,7 +1123,7 @@
</group>
<notebook colspan="4">
<page string="General Information">
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_in_id': address_id, 'picking_type': type}" >
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" context="{'address_in_id': address_id, 'picking_type': type}" >
<tree colors="grey:scrapped==True" string="Stock Moves">
<field name="product_id" />
<field name="product_qty" />

View File

@ -0,0 +1,131 @@
-
I update the price of the Ice-cream.
-
!python {model: stock.change.standard.price}: |
context.update({'active_model':'product.product', 'active_id': ref('product_icecream'), 'active_ids':[ref('product_icecream')]})
-
!record {model: stock.change.standard.price, id: change_price}:
new_price: 120
-
!python {model: stock.change.standard.price}: |
self.change_price(cr, uid, [ref('change_price')], context=context)
-
I check price of Ice-cream after update price.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
assert product.standard_price == 120, "Price is not updated."
-
I update the current stock of the Ice-cream with 10 kgm in Small Refrigerator in lot0.
-
!record {model: stock.change.product.qty, id: change_qty}:
location_id: location_refrigerator_small
new_quantity: 10
product_id: product_icecream
prodlot_id: lot_icecream_1
-
!python {model: stock.change.product.qty}: |
self.change_product_qty(cr, uid, [ref('change_qty')], context=context)
-
I check available stock of Ice-cream after update stock.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
assert product.qty_available == 10, "Stock is not updated."
-
I merge inventory.
-
!python {model: stock.inventory.merge }: |
context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]})
-
!record {model: stock.inventory.merge, id: merge_inventory}:
-
!python {model: stock.inventory.merge }: |
self.do_merge(cr, uid, [ref('merge_inventory')], context=context)
-
I cancel inventory.
-
!python {model: stock.inventory}: |
self.action_cancel_inventory(cr, uid, [ref('stock_inventory_icecream')])
-
I reset to draft inventory.
-
!python {model: stock.inventory}: |
self.action_cancel_draft(cr, uid, [ref('stock_inventory_icecream')])
-
I confirm physical inventory of Ice-cream which are came in different lots.
-
!python {model: stock.inventory}: |
self.action_confirm(cr, uid, [ref('stock_inventory_icecream')], context=context)
-
I check move details after confirmed physical inventory.
-
!python {model: stock.inventory}: |
inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context)
assert len(inventory.move_ids) == len(inventory.inventory_line_id), "moves are not correspond."
for move_line in inventory.move_ids:
for line in inventory.inventory_line_id:
if move_line.product_id.id == line.product_id.id and move_line.prodlot_id.id == line.prod_lot_id.id:
location_id = line.product_id.product_tmpl_id.property_stock_inventory.id
assert move_line.product_qty == line.product_qty, "Qty is not correspond."
assert move_line.product_uom.id == line.product_uom.id, "UOM is not correspond."
assert move_line.date == inventory.date, "Date is not correspond."
assert move_line.location_id.id == location_id, "Source location is not correspond."
assert move_line.location_dest_id.id == line.location_id.id, "Destination location is not correspond."
assert move_line.state == 'confirmed', "Move is not confirmed."
-
I split inventory line.
-
!python {model: stock.inventory.line.split}: |
context.update({'active_model': 'stock.inventory.line', 'active_id': ref('stock_inventory_line_icecream_lot0'), 'active_ids': [ref('stock_inventory_line_icecream_lot0')]})
-
!record {model: stock.inventory.line.split, id: split_inventory_lot0}:
use_exist: True
line_exist_ids:
- quantity: 6
prodlot_id: lot_icecream_0
- quantity: 4
prodlot_id: lot_icecream_0
-
!python {model: stock.inventory.line.split }: |
self.split_lot(cr, uid, [ref('split_inventory_lot0')], context=context)
-
I fill inventory line.
-
!python {model: stock.fill.inventory}: |
context.update({'active_model': 'stock.inventory', 'active_id': ref('stock_inventory_icecream'), 'active_ids': [ref('stock_inventory_icecream')]})
-
!record {model: stock.fill.inventory, id: fill_inventory}:
location_id: location_refrigerator
recursive: True
-
!python {model: stock.fill.inventory }: |
self.fill_inventory(cr, uid, [ref('fill_inventory')], context=context)
-
Now I check vitual stock of Ice-cream after confirmed physical inventory.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
assert product.virtual_available == 100, "Vitual stock is not updated."
-
I close physical inventory of Ice-cream.
-
!python {model: stock.inventory}: |
self.action_done(cr, uid, [ref('stock_inventory_icecream')], context=context)
-
I check closed move and real stock of Ice-cream after closed physical inventory.
-
!python {model: stock.inventory}: |
inventory = self.browse(cr, uid, ref('stock_inventory_icecream'), context=context)
assert inventory.state == 'done', "inventory is not closed."
for move_line in inventory.move_ids:
assert move_line.state == 'done', "Move is not closed."
product = self.pool.get('product.product').browse(cr, uid, ref('product_icecream'), context=context)
product.qty_available == 100, "Real stock is not updated."
-
I check stock in lot.
-
!python {model: stock.production.lot}: |
lot = self.browse(cr, uid, ref('lot_icecream_0'), context=context)
assert lot.stock_available == 50, "Stock in lot is not correspond."

View File

@ -0,0 +1,263 @@
-
I confirm outgoing shipment of 130 kgm Ice-cream.
-
!workflow {model: stock.picking, action: button_confirm, ref: outgoing_shipment}
-
I check shipment details after confirmed.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("outgoing_shipment"))
assert shipment.state == "confirmed", "Shipment should be confirmed."
for move_line in shipment.move_lines:
assert move_line.state == "confirmed", "Move should be confirmed."
-
Now I check vitual stock of Ice-cream after confirmed outgoing shipment.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
product.virtual_available == -30, "Vitual stock is not updated."
-
I confirm incomming shipment of 50 kgm Ice-cream.
-
!workflow {model: stock.picking, action: button_confirm, ref: incomming_shipment}
-
I receive 40kgm Ice-cream so I make backorder of incomming shipment for 40 kgm.
-
!python {model: stock.partial.picking}: |
context.update({'active_model': 'stock.picking', 'active_id': ref('incomming_shipment'), 'active_ids': [ref('incomming_shipment')]})
-
!record {model: stock.partial.picking, id: partial_incomming}:
move_ids:
- quantity: 40
product_id: product_icecream
product_uom: product.product_uom_kgm
move_id: incomming_shipment_icecream
location_id: location_convenience_shop
location_dest_id: location_refrigerator
-
!python {model: stock.partial.picking }: |
self.do_partial(cr, uid, [ref('partial_incomming')], context=context)
-
I check backorder shipment after received partial shipment.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("incomming_shipment"))
backorder = shipment.backorder_id
assert backorder, "Backorder should be created after partial shipment."
assert backorder.state == 'done', "Backorder should be close after received."
for move_line in backorder.move_lines:
assert move_line.product_qty == 40, "Qty in backorder is not correspond."
assert move_line.state == 'done', "Move line of backorder should be closed."
-
I receive another 10kgm Ice-cream.
-
!record {model: stock.partial.picking, id: partial_incomming}:
move_ids:
- quantity: 10
product_id: product_icecream
product_uom: product.product_uom_kgm
move_id: incomming_shipment_icecream
location_id: location_convenience_shop
location_dest_id: location_refrigerator
-
!python {model: stock.partial.picking }: |
self.do_partial(cr, uid, [ref('partial_incomming')], context=context)
-
I check incomming shipment after received.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("incomming_shipment"))
assert shipment.state == 'done', "shipment should be close after received."
for move_line in shipment.move_lines:
assert move_line.product_qty == 10, "Qty is not correspond."
assert move_line.state == 'done', "Move line should be closed."
-
I return last incomming shipment for 10 kgm Ice-cream.
-
!record {model: stock.return.picking, id: return_incomming}:
invoice_state: none
-
!python {model: stock.return.picking }: |
self.create_returns(cr, uid, [ref('return_incomming')], context=context)
-
I cancel incomming shipment after return it.
-
!python {model: stock.picking}: |
self.action_cancel(cr, uid, [ref("incomming_shipment")], context=context)
-
I make invoice of backorder of incomming shipment.
-
!python {model: stock.invoice.onshipping}: |
shipment = self.pool.get('stock.picking').browse(cr, uid, ref("incomming_shipment"))
context.update({'active_model': 'stock.picking', 'active_id': shipment.backorder_id.id, 'active_ids': [shipment.backorder_id.id]})
-
!record {model: stock.invoice.onshipping, id: invoice_incomming}:
group: False
-
!python {model: stock.invoice.onshipping }: |
self.create_invoice(cr, uid, [ref('invoice_incomming')], context=context)
-
I check invoice state of backorder of incomming shipment.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("incomming_shipment"))
assert shipment.backorder_id.invoice_state == 'invoiced', 'Invoice state is not upadted.'
-
I check availabile stock after received incomming shipping.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
assert product.qty_available == 140, "Stock is not correspond."
assert product.virtual_available == 10, "Vitual stock is not correspond."
-
I split incomming shipment into lots. each lot contain 10 kgm Ice-cream.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("incomming_shipment"))
move_ids = [x.id for x in shipment.backorder_id.move_lines]
context.update({'active_model': 'stock.move', 'active_id': move_ids[0], 'active_ids': move_ids})
-
!record {model: stock.move.split, id: split_lot_incomming}:
line_ids:
- name: incoming_lot0
quantity: 10
- name: incoming_lot1
quantity: 10
- name: incoming_lot2
quantity: 10
- name: incoming_lot3
quantity: 10
-
!python {model: stock.move.split }: |
self.split_lot(cr, uid, [ref('split_lot_incomming')], context=context)
-
I check move lines after spliting
-
!python {model: stock.move}: |
lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context)
lot_ids = self.pool.get('stock.production.lot').search(cr, uid, [('name','in',[x.name for x in lot.line_ids])])
assert len(lot_ids) == 4, 'lots of incomming shipment are not correspond.'
move_ids = self.search(cr, uid, [('location_dest_id','=',ref('location_refrigerator')),('prodlot_id','in',lot_ids)])
assert len(move_ids) == 4, 'move lines are not correspond per prodcution lot after splited.'
for move in self.browse(cr, uid, move_ids, context=context):
assert move.prodlot_id.name in ['incoming_lot0', 'incoming_lot1', 'incoming_lot2', 'incoming_lot3'], "lot is not correspond."
assert move.product_qty == 10, "qty is not correspond per production lot."
context.update({'active_model':'stock.move', 'active_id':move_ids[0],'active_ids': move_ids})
-
I consume 1 kgm ice-cream from each incoming lots into internal production.
-
!record {model: stock.move.consume, id: consume_lot_incomming}:
product_qty: 1
location_id: location_refrigerator
-
!python {model: stock.move.consume}: |
self.do_move_consume(cr, uid, [ref('consume_lot_incomming')], context=context)
-
I scrap 10 gm ice-cream from each incoming lots into scrap location.
-
!record {model: stock.move.scrap, id: scrap_lot_incomming}:
product_qty: 0.010
-
!python {model: stock.move.scrap}: |
self.move_scrap(cr, uid, [ref('scrap_lot_incomming')], context=context)
-
I check stock in scrap location and refrigerator location.
-
!python {model: stock.location}: |
ctx = {'product_id': ref('product_icecream')}
refrigerator_location = self.browse(cr, uid, ref('location_refrigerator'), context=ctx)
assert refrigerator_location.stock_real == 131.96, 'stock is not correspond in refrigerator location.'
scrapped_location = self.browse(cr, uid, ref('stock_location_scrapped'), context=ctx)
assert scrapped_location.stock_real == 0.010*4, 'scraped stock is not correspond in scrap location.'
production_location = self.browse(cr, uid, ref('location_production'), context=ctx)
assert production_location.stock_real == 1*4, 'consume stock is not correspond in production location.' #TOFIX: consume stock is not updated in default production location of product.
-
I check availabile stock after consumed and scraped.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
assert product.qty_available == 131.96, "Stock is not correspond."
assert round(product.virtual_available, 2) == 1.96, "Vitual stock is not correspond."
-
I trace all incoming lots.
-
!python {model: stock.production.lot }: |
lot = self.pool.get('stock.move.split').browse(cr, uid, ref('split_lot_incomming'), context=context)
lot_ids = self.search(cr, uid, [('name', 'in', [x.name for x in lot.line_ids])])
self.action_traceability(cr, uid, lot_ids, context=context)
-
I check outgoing shipment after stock availablity in refrigerator.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context)
self.pool.get('stock.move').action_assign(cr, uid, [x.id for x in shipment.move_lines]) #TOFIX: assignment of move lines should be call before testing assigment otherwise picking never gone in assign state
#TOFIX: shipment should be assigned if stock available
#assert shipment.state == "assigned", "Shipment should be assigned."
#for move_line in shipment.move_lines:
# assert move_line.state == "assigned", "Move should be assigned."
self.force_assign(cr, uid, [shipment.id])
-
I deliver 5kgm Ice-cream to customer so I make partial deliver
-
!python {model: stock.partial.move}: |
context.update({'active_model': 'stock.move', 'active_id': ref('outgoing_shipment_icecream'), 'active_ids': [ref('outgoing_shipment_icecream')]})
-
!record {model: stock.partial.move, id: partial_outgoing_icecream}:
move_ids:
- quantity: 5
product_id: product_icecream
product_uom: product.product_uom_kgm
move_id: outgoing_shipment_icecream
location_id: location_refrigerator
location_dest_id: location_delivery_counter
-
!python {model: stock.partial.move }: |
self.do_partial(cr, uid, [ref('partial_outgoing_icecream')], context=context)
-
I packing outgoing shipment into box per 10kgm with unique tracking lot.
-
!python {model: stock.move}: |
stock_split = self.pool.get('stock.split.into')
move = self.browse(cr, uid, ref('outgoing_shipment_icecream'), context=context)
context.update({'active_model': 'stock.move', 'active_id': move.id, 'active_ids': [move.id]})
total_qty = move.product_qty
split_qty = 10
while(total_qty>0):
split_id = stock_split.create(cr, uid, {'quantity': split_qty}, context=context)
stock_split.split(cr, uid, [split_id], context=context)
total_qty -= split_qty
-
I deliver outgoing shipment.
-
!python {model: stock.partial.picking}: |
context.update({'active_model': 'stock.picking', 'active_id': ref('outgoing_shipment'), 'active_ids': [ref('outgoing_shipment')]})
-
!record {model: stock.partial.picking, id: partial_outgoing}:
picking_id: outgoing_shipment
-
!python {model: stock.partial.picking }: |
self.do_partial(cr, uid, [ref('partial_outgoing')], context=context)
-
I check outgoing shipment after deliver.
-
!python {model: stock.picking}: |
shipment = self.browse(cr, uid, ref("outgoing_shipment"), context=context)
assert shipment.state == "done", "Shipment should be closed."
for move_line in shipment.move_lines:
assert move_line.state == "done", "Move should be closed."
-
I check availabile stock after deliver.
-
!python {model: product.product}: |
product = self.browse(cr, uid, ref('product_icecream'), context=context)
assert round(product.qty_available, 2) == 1.96, "Stock is not correspond."
assert round(product.virtual_available, 2) == 1.96, "Vitual stock is not correspond."

View File

@ -1,65 +0,0 @@
-
In order to test partial delivery and back orders, I will use a delivery order with 5 CPU1 and 5 CPU3
-
I confirm and force the availability of all products on the picking OUT001
-
!python {model: stock.picking}: |
self.draft_force_assign(cr, uid, [ref('stock.stock_picking_1')], {})
self.force_assign(cr, uid, [ref('stock.stock_picking_1')], {})
-
After having confirmed the picking and its two lines, I add a new move line in draft state with 7 FAN2
-
!record {model: stock.move, id: stock_move_3}:
product_id: product.product_product_fan2
product_uom: product.product_uom_unit
product_uos_qty: 7.0
product_qty: 7.0
location_dest_id: stock.stock_location_customers
location_id: stock.stock_location_stock
name: CPU3, Processor AMD Athlon XP 1800
picking_id: stock_picking_1
- |
I click on 'Process Now' to process the delivery order and I change quantities to:
7 CPU1, 0 CPU3, 3 FAN2 and a new product of 4 PC1
-
!python {model: stock.picking}: |
result = self.action_process(cr, uid, [ref('stock.stock_picking_1')], {})['res_id']
pick = self.pool.get('stock.partial.picking').browse(cr, uid, result, {})
lobj = self.pool.get('stock.partial.picking.line')
for line in pick.move_ids:
if line.product_id.id == ref('product.product_product_cpu3'):
lobj.write(cr, uid, [line.id], {
'quantity': 0.0
}, {})
elif line.product_id.id == ref('product.product_product_cpu1'):
lobj.write(cr, uid, [line.id], {
'quantity': 7.0
}, {})
elif line.product_id.id == ref('product.product_product_fan2'):
lobj.write(cr, uid, [line.id], {
'quantity': 3.0
}, {})
lobj.create(cr, uid, {
'product_id': ref('product.product_product_pc1'),
'quantity': 2.0,
'product_uom': ref('product.product_uom_unit'),
'location_id': ref('stock.stock_location_stock'),
'location_dest_id': ref('stock.stock_location_customers'),
'wizard_id': result
}, {})
self.pool.get('stock.partial.picking').do_partial(cr, uid, [result], {})
-
I test that the back order contains 5 CPU3, 4 FAN2 and nothing else
-
!python {model: stock.picking}: |
pick = self.browse(cr, uid, ref('stock.stock_picking_1'), {})
for line in pick.move_lines:
if line.product_id.id == ref('product.product_product_cpu3'):
assert line.product_qty == 5.0, "Wrong quantity %.2f for CPU3 back order" % (line.product_qty,)
elif line.product_id.id == ref('product.product_product_fan2'):
assert line.product_qty == 4.0, "Wrong quantity %.2f for FAN2 back order" % (line.product_qty,)
elif line.product_id.id == ref('product.product_product_pc1'):
assert line.product_qty == 0.0, "Wrong quantity for PC1 back order"
else:
assert line.product_qty == 0.0, "Wrong quantity for %s back order" % (line.product_id.code,)

View File

@ -1,40 +1,41 @@
-
In order to test the PDF reports defined on a stock, we will print a Stock Overviewall(children) report
I print a stock overview report of location.
-
!python {model: stock.location}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('stock.stock_location_stock')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on stock inventory, we will print a Stock Inventory Move report
-
!python {model: stock.inventory}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock.stock_inventory_0')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a stock, we will print a Stock Overview report
-
!python {model: stock.location}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('stock.stock_location_14')], {}, {})
(data, format) = netsvc.LocalService('report.lot.stock.overview').create(cr, uid, [ref('location_refrigerator')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-overview'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a stock, we will print a Stock Picking List report
I print a Stock Overview report of location with child location.
-
!python {model: stock.location}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.lot.stock.overview_all').create(cr, uid, [ref('location_refrigerator')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-overviewall'+format), 'wb+').write(data)
-
I print a Stock Inventory report.
-
!python {model: stock.inventory}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.stock.inventory.move').create(cr, uid, [ref('stock_inventory_icecream')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-stock_inventory_move.'+format), 'wb+').write(data)
-
I print a outgoing shipment report.
-
!python {model: stock.picking}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('stock.stock_picking_0')], {}, {})
(data, format) = netsvc.LocalService('report.stock.picking.list').create(cr, uid, [ref('outgoing_shipment')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-picking_list'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a Stock, we will print Product Stock Report
I print stock Report.
-
!python {model: product.product}: |
import netsvc, tools, os
(data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product.product_product_pc1')], {}, {})
(data, format) = netsvc.LocalService('report.stock.product.history').create(cr, uid, [ref('product_icecream')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'stock-product_stock_report.'+format), 'wb+').write(data)

View File

@ -1,424 +0,0 @@
-
In order to test the stock module, I will create product,
create physical inventory ,fill inventory lines from location,split inventory line into production lot
-
I create Stock Production Lot for product PC3
-
!record {model: stock.production.lot, id: stock_production_lot0}:
product_id: product.product_product_pc3
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
name: 0000001
-
I trace the Stock Production Lot for product PC3.
-
!python {model: stock.production.lot }: |
self.action_traceability(cr,uid,[ref('stock_production_lot0')], {'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
-
I create change product quantity for product PC3.
-
!record {model: stock.change.product.qty, id: stock_change_product_qty0}:
product_id: product.product_product_pc3
new_quantity: 100
location_id: stock.stock_location_stock
prodlot_id: stock.stock_production_lot0
-
I apply the new quantity on product PC3.
-
!python {model: stock.change.product.qty }: |
context = {"lang": 'en_US', "active_model":
"product.product", "active_ids": [ref("product.product_product_pc3")], "tz": False, "active_id":ref('product.product_product_pc3')}
self.default_get(cr, uid, ["prodlot_id", "location_id", "new_quantity", "product_id"], context)
self.fields_view_get(cr, uid, ref("stock.view_change_product_quantity"),"form", context)
self.change_product_qty(cr, uid, [ref("stock_change_product_qty0")], {"lang": 'en_US', "active_model":
"stock.change.product.qty", "active_ids": ref("product.product_product_pc3"), "tz": False, "active_id":ref('product.product_product_pc3')})
-
I check that the quantity on product PC3 is updated.
-
!python {model: product.product }: |
pro_obj = self.browse(cr, uid, ref("product.product_product_pc3"))
assert (pro_obj.qty_available >= 100) , "The quantity of PC3 is not updated!"
-
I Read quantity on product PC3.
-
!python {model: stock.location }: |
self.read(cr, uid, [ref("stock.stock_location_stock")],['stock_real_value','stock_virtual'], {'lang': 'en_GB', 'tz': False, 'active_model': 'product.product', 'bin_size': True, 'active_ids': [ref("product.product_product_pc3")], 'product_id':ref("product.product_product_pc3"), 'active_id': ref("product.product_product_pc3")})
-
I Creating a chained stock.location record
-
!record {model: stock.location, id: stock_location_loc0}:
chained_auto_packing: auto
chained_delay: 0.0
chained_location_id: stock.stock_location_customers
chained_location_type: fixed
location_id: stock.stock_location_company
name: chain location
parent_left: 2
parent_right: 3
usage: internal
-
I create Product By location chart for stock.location.product Object.
-
!record {model: stock.location.product, id: stock_location_product0}:
from_date: '2011-07-01 00:00:00'
to_date: '2011-07-31 23:59:00'
-
I open product chart.
-
!python {model: stock.location.product }: |
self.action_open_window(cr, uid, [ref("stock_location_product0")], {'lang': 'en_US', 'full': 1, 'tz': False, 'active_model': 'stock.location', 'search_default_in_location': 1, 'active_ids': [ref("stock.stock_location_stock")], 'active_id': ref("stock.stock_location_stock")})
-
I open product form from stock.location object .
-
!python {model: product.product }: |
self.fields_view_get(cr, uid, False, "tree", {'lang': 'en_US', 'full': 1, 'tz': False, 'active_model': 'stock.location', 'location': ref('stock.stock_location_stock'), 'search_default_in_location': 1, 'active_ids': [ref("stock.stock_location_stock")], 'active_id': ref("stock.stock_location_stock")})
-
I create change product standard price for product PC3.
-
!record {model: stock.change.standard.price, id: stock_change_standard_price0}:
new_price: 1515
stock_account_input: account.a_recv
stock_account_output: account.a_pay
stock_journal: account.expenses_journal
enable_stock_in_out_acc: True
-
I apply the new product standard price on product PC3.
-
!python {model: stock.change.standard.price }: |
context = {"lang": 'en_US', "active_model":
"product.product", "active_ids": [ref("product.product_product_pc3")], "tz": False, "active_id":ref('product.product_product_pc3')}
self.default_get(cr, uid, ["new_price"], context)
self.change_price(cr, uid, [ref("stock_change_product_qty0")], context)
-
I create Physical Inventory for the products.
-
!record {model: stock.inventory, id: stock_inventory_physicalinventoy0}:
company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
inventory_line_id:
- company_id: base.main_company
location_id: stock.stock_location_stock
product_id: product.product_product_pc3
product_qty: 10.0
product_uom: product.product_uom_unit
- company_id: base.main_company
location_id: stock.stock_location_stock
product_id: product.product_product_pc1
product_qty: 10.0
product_uom: product.product_uom_unit
name: Physical inventory
state: draft
-
I create merge Inventory for the products.
-
!record {model: stock.inventory, id: stock_inventory_mergeinventoy0}:
company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
inventory_line_id:
- company_id: base.main_company
location_id: stock.stock_location_stock
product_id: product.product_product_pc3
product_qty: 20.0
product_uom: product.product_uom_unit
- company_id: base.main_company
location_id: stock.stock_location_stock
product_id: product.product_product_pc1
product_qty: 20.0
product_uom: product.product_uom_unit
name: Physical inventory
state: draft
-
I merge inventory .
-
!python {model: stock.inventory.merge}: |
context = {"lang": 'en_US',
"full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
[ref("stock_inventory_physicalinventoy0"), ref("stock_inventory_mergeinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0"), }
self.fields_view_get(cr, uid, False, "form", context)
self.do_merge(cr, uid, [ref("stock_inventory_mergeinventoy0")], context)
-
I create stock.inventory.line record.
-
!record {model: stock.inventory.line, id: stock_inventory_line}:
product_id: product.product_product_pc1
product_uom: product.product_uom_unit
product_qty: 10
inventory_id: stock_inventory_mergeinventoy0
location_id: stock.stock_location_stock
-
I Change a Product oF stock.inventory.line record.
-
!python {model: stock.inventory.line}: |
self.on_change_product_id(cr, uid, [ref("stock_inventory_line")], ref('stock.stock_location_stock'), ref('product.product_product_pc3'), False, False)
-
I create stock.fill.inventory .
-
!record {model: stock.fill.inventory, id: stock_fill_inventory_0}:
location_id: stock.stock_location_stock
recursive: False
set_stock_zero: False
-
I fill inventory for PC3.
-
!python {model: stock.fill.inventory}: |
context = {"lang": 'en_US',"full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
[ref("stock_inventory_physicalinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0")}
self.view_init(cr, uid, ["set_stock_zero", "location_id", "recursive"], context)
self.fill_inventory(cr, uid, [ref("stock_fill_inventory_0")], context)
-
I split the PC3 inventory line to create 5 PC3 with production lot 00002-stock-test
-
!record {model: stock.inventory.line.split, id: stock_inventory_line_0}:
line_ids:
- name: '00002-stock-test'
quantity: 5
product_id: product.product_product_pc1
product_uom: product.product_uom_unit
use_exist: False
qty: 10
-
I confirm the split operation
-
!python {model: stock.inventory.line}: |
line_ids = self.search(cr, uid, [('inventory_id','=',ref('stock_inventory_physicalinventoy0')),
('product_id','=',ref('product.product_product_pc1'))])
assert line_ids, 'Inventory lines are missing'
self.pool.get('stock.inventory.line.split').split_lot(cr, uid, [ref("stock_inventory_line_0")],
{'active_model': 'stock.inventory.line',
'active_ids': [line_ids[0]]})
-
I confirm the Inventory for PC3.
-
!python {model: stock.inventory}: |
self.action_confirm(cr,uid,[ref('stock_inventory_physicalinventoy0')])
self.action_done(cr,uid,[ref('stock_inventory_physicalinventoy0')])
-
I cancel the Inventory for PC3.
-
!python {model: stock.inventory}: |
self.action_cancel_inventary(cr,uid,[ref('stock_inventory_physicalinventoy0')])
-
I change inventory state to draft for PC3.
-
!python {model: stock.inventory}: |
self.action_cancel_draft(cr,uid,[ref('stock_inventory_physicalinventoy0')])
-
In Order to test the picking I create picking with move lines.
-
!record {model: stock.picking, id: stock_picking_0}:
name: test_picking
address_id: base.res_partner_address_4
company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
invoice_state: 2binvoiced
move_lines:
- company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
location_dest_id: stock.stock_location_loc0
location_id: stock.stock_location_stock
name: PC3
product_id: product.product_product_pc3
product_qty: 100.0
product_uom: product.product_uom_unit
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
product_uos_qty: 100.0
move_type: direct
type: out
-
I split the picking with a first batch of 20 PCs
-
!python {model: stock.picking }: |
pick=self.browse(cr,uid,ref('stock_picking_0'))
split_obj=self.pool.get('stock.split.into')
partial_datas={}
move=pick.move_lines[0]
partial_datas= {
'quantity': 20,
}
split_id = self.pool.get('stock.split.into').create(cr, uid, partial_datas)
split_obj.split(cr, uid, [split_id], {"lang": "en_US", "tz":
False, "active_model": "stock.move", "active_ids": [move.id],
"active_id": move.id, })
-
I click on draft_force_assign on picking.
-
!python {model: stock.picking}: |
self.draft_force_assign(cr, uid, [ref("stock_picking_0")], {"lang": "en_US", "active_model":
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
ref("stock.menu_action_picking_tree6"), })
-
I click on action_assign on picking.
-
!python {model: stock.picking}: |
self.action_assign(cr, uid, [ref("stock_picking_0")], {"lang": "en_US", "active_model":
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
ref("stock.menu_action_picking_tree6"), })
-
I process the partial picking with 20 PCE
-
!python {model: stock.picking }: |
pick = self.browse(cr,uid,ref('stock_picking_0'))
stock_partial_move = self.pool.get('stock.partial.move')
partial_id = stock_partial_move.create(cr, uid, {},
context={'active_model': 'stock.move',
'active_ids': [x.id for x in pick.move_lines]})
stock_partial_move.do_partial(cr, uid, [partial_id])
-
I Performing an osv_memory action split_lot on module stock.move.split
-
!python {model: stock.picking }: |
split_obj=self.pool.get('stock.move.split')
split_move_lines=self.pool.get('stock.move.split.lines')
pick=self.browse(cr,uid,ref('stock_picking_0'))
partial_datas={}
move=pick.move_lines[0]
partial_datas= {
'product_id': move.product_id.id,
'qty': 80,
'product_uom': move.product_uom.id,
'use_exist': move.picking_id and move.picking_id.type=='out' and True or False
}
split_id = self.pool.get('stock.move.split').create(cr, uid, partial_datas, context={})
split_move_data= {
'quantity': 10,
'name': 'lot',
}
split_move_id = split_move_lines.create(cr, uid, split_move_data, context={})
split_obj.default_get(cr, uid, ["product_id", "product_uom", "line_exist_ids", "qty",
"line_ids", "use_exist"], {'lang': 'en_US', 'default_location_dest_id': ref('stock.stock_location_stock'), 'tz': False, 'active_model': 'stock.move', 'search_default_receive': 1, 'product_receive': True, 'active_ids': [move.id], 'default_location_id': ref('stock.stock_location_locations'), 'active_id': move.id})
split_obj.split_lot(cr, uid, [split_id], context={"lang": "en_US", "tz":
False, "active_model": "stock.move", "scrap": True, "active_ids": [move.id],
"active_id": move.id, })
-
I Performed an osv_memory action move_scrap on module stock.move.scrap
-
!python {model: stock.picking }: |
location_obj = self.pool.get('stock.location')
scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
pick=self.browse(cr,uid,ref('stock_picking_0'))
scrap_obj=self.pool.get('stock.move.scrap')
partial_datas={}
move=pick.move_lines[0]
partial_datas= {
'product_id': move.product_id.id,
'location_id': scrpaed_location_ids[0],
'product_qty': 1,
'product_uom': move.product_uom.id,
}
scrap_id = scrap_obj.create(cr, uid, partial_datas)
context = {"lang": "en_US", "tz": False, "active_model": "stock.move",
"scrap": True, "active_ids": [move.id], "active_id": move.id, }
scrap_obj.default_get(cr, uid, ["location_id", "product_id", "product_uom", "product_qty"], context)
scrap_obj.move_scrap(cr, uid, [scrap_id], context)
-
I Performed an osv_memory do move consume on module stock.move.consume
-
!python {model: stock.picking }: |
location_obj = self.pool.get('stock.location')
scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
pick=self.browse(cr,uid,ref('stock_picking_0'))
consume_obj=self.pool.get('stock.move.consume')
partial_datas={}
move=pick.move_lines[0]
partial_datas= {
'product_id': move.product_id.id,
'location_id': scrpaed_location_ids[0],
'product_qty': 1,
'product_uom': move.product_uom.id,
}
context = {"lang": "en_US", "tz": False, "active_model": "stock.move",
"scrap": True, "active_ids": [move.id], "active_id": move.id, }
consume_id = consume_obj.create(cr, uid, partial_datas)
consume_obj.default_get(cr, uid, ["location_id", "product_id", "product_uom", "product_qty"], context)
consume_obj.do_move_consume(cr, uid, [consume_id], context)
-
I process the picking with the 80 remaining PCs
-
!python {model: stock.picking}: |
stock_partial_picking = self.pool.get('stock.partial.picking')
partial_id = stock_partial_picking.create(cr, uid, {},
context={'active_model': 'stock.picking',
'active_ids': [ref('stock_picking_0')]})
stock_partial_picking.do_partial(cr, uid, [partial_id])
-
I Performing an osv_memory action create_invoice on module stock.invoice.onshipping
-
!python {model: stock.invoice.onshipping}: |
invoice_line_id = self.create(cr, uid,{}, {"lang": 'en_US', "active_model":
"stock.picking", "active_ids": [ref("stock_picking_0")], "tz": False, "active_id":ref("stock_picking_0")})
self.open_invoice(cr, uid, [invoice_line_id], {"lang": "en_US",
"search_default_available": 1, "inv_type": "in_invoice" , "tz": False, "active_model": "stock.picking",
"contact_display": "partner_address", "active_ids": [ref("stock_picking_0")],
"active_id": ref("stock_picking_0")})
self._get_journal_id(cr, uid, {"lang": "en_US", "search_default_available": 1, "tz": False, "active_model": "stock.picking",
"contact_display": "partner_address", "active_ids": [ref("stock_picking_0")],
"active_id": ref("stock_picking_0"), })
-
I create a record of stock.picking and unlink a record
-
!python {model: stock.picking}: |
copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
ctx = {"lang": "en_US", "active_model":
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
ref("stock.menu_action_picking_tree6"), }
self.draft_force_assign(cr, uid, [copy_id], ctx)
self.unlink(cr, uid, [copy_id], ctx)
-
I create a record of stock.picking and cancel a record
-
!python {model: stock.picking}: |
copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
self.draft_validate(cr, uid, [copy_id], {"lang": "en_US", "search_default_available":
1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner_address",
"active_ids": [ref("stock.menu_action_picking_tree4")], "active_id": ref("stock.menu_action_picking_tree4"),
})
self.allow_cancel(cr, uid, [copy_id], context= None)
-
I process a copy of the picking and I return it
-
!python {model: stock.picking}: |
copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
self.draft_force_assign(cr, uid, [copy_id])
self.force_assign(cr, uid, [copy_id])
stock_partial_picking = self.pool.get('stock.partial.picking')
context = {'active_model': 'stock.picking',
'active_ids': [copy_id],
'active_id': copy_id}
partial_id = stock_partial_picking.create(cr, uid, {}, context=context)
stock_partial_picking.do_partial(cr, uid, [partial_id], context)
return_pick_id = self.pool.get('stock.return.picking').create(cr, uid,{}, context)
self.pool.get('stock.return.picking').create_returns(cr, uid, [return_pick_id], context)

View File

@ -1,78 +0,0 @@
-
I create stock.tracking record.
-
!record {model: stock.tracking, id: stock_tracking_0}:
move_ids:
- product_id: product.product_product_pc1
product_qty: 5.0
product_uom: product.product_uom_unit
location_id : stock.stock_location_suppliers
location_dest_id: stock.stock_location_shop0
name : '[PC1] Basic PC'
date_expected : !eval time.strftime('%Y-%m-%d %H:%M:%S')
name: 0000007
active: True
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
-
I trace the information of a product.
-
!python {model: stock.tracking}: |
self.name_get(cr, uid, [ref('stock_tracking_0')],{'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
self.action_traceability(cr,uid,[ref('stock_tracking_0')], {'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
-
I creat stock.move Record
-
!record {model: stock.move, id: stock_move_test0}:
location_dest_id: stock.stock_location_shop0
product_id: product.product_product_pc1
product_qty: 5.0
product_uom: product.product_uom_unit
date_expected : !eval time.strftime('%Y-%m-%d %H:%M:%S')
location_id : stock.stock_location_suppliers
name : '[PC1] Basic PC'
company_id: base.main_company
product_uos_qty : 5.0
name: IN/00010
state: assigned
-
I Check onchange function of stock.move object
-
!python {model: stock.move }: |
self.onchange_lot_id(cr, uid, [ref("stock_move_test0")], ref("stock.stock_production_lot0"), 5, ref("stock.stock_location_suppliers"), ref("product.product_product_pc1"), ref("product.product_uom_unit"), None)
self.onchange_quantity(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), 10, ref("product.product_uom_unit"), ref("product.product_uom_unit"))
self.onchange_uos_quantity(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), 10, ref("product.product_uom_unit"), ref("product.product_uom_unit"))
self.onchange_product_id(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), ref("stock.stock_location_suppliers"), ref("stock.stock_location_shop0"), False)
-
I Check _getSSCC and action_partial_move function of stock.move object
-
!python {model: stock.move }: |
context = {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
"stock.move", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_test0")], "tz": False, "active_id":ref("stock_move_test0")}
self._getSSCC(cr, uid , context)
self.action_partial_move(cr, uid , [ref("stock_move_test0")], context)
-
I check write function
-
!python {model: stock.move }: |
vals = {"product_qty" : 2, "product_uos_qty": 2}
self.write(cr, uid, [ref("stock_move_test0")], vals, {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
"ir.ui.menu", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_tree")], "tz": False, "active_id":ref("stock_move_tree")})
-
I check default function
-
!python {model: stock.move }: |
self.name_get(cr, uid, [ref("stock_move_test0")], {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
"stock.move", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_test0")], "tz": False, "active_id":ref("stock_move_test0")})
ctx = {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
"ir.ui.menu", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("view_move_form_reception_picking")], "tz": False, "active_id":ref("view_move_form_reception_picking")}
self._default_location_destination(cr, uid, ctx)
self._default_location_source(cr, uid, ctx)

View File

@ -81,7 +81,7 @@ class stock_fill_inventory(osv.osv_memory):
if fill_inventory.recursive:
location_ids = location_obj.search(cr, uid, [('location_id',
'child_of', [fill_inventory.location_id.id])], order="id",
'child_of', [fill_inventory.location_id.id])], order="id",
context=context)
else:
location_ids = [fill_inventory.location_id.id]

View File

@ -34,6 +34,7 @@ class stock_move_consume(osv.osv_memory):
'location_id': fields.many2one('stock.location', 'Location', required=True)
}
#TOFIX: product_uom should not have differemt category of default UOM of product. Qty should be convert into UOM of original move line before going in consume and scrap
def default_get(self, cr, uid, fields, context=None):
""" Get default values
@param self: The object pointer.

View File

@ -42,8 +42,8 @@ class action_traceability(osv.osv_memory):
lot_id = ids
if context is None:
context = {}
type1 = context['type'] or 'move_history_ids2'
field = context['field'] or 'tracking_id'
type1 = context.get('type', 'move_history_ids2')
field = context.get('field', 'tracking_id')
obj = self.pool.get('stock.move')
ids = obj.search(cr, uid, [(field, 'in',lot_id)])
cr.execute('select id from ir_ui_view where model=%s and field_parent=%s and type=%s', ('stock.move', type1, 'tree'))

View File

@ -6,20 +6,15 @@
-
!record {model: stock.picking, id: stock_picking_out0}:
address_id: base.res_partner_address_3000
company_id: base.main_company
invoice_state: 2binvoiced
move_lines:
- company_id: base.main_company
date_expected: !eval time.strftime('%Y-%m-%d %H:%M:%S')
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
location_id: stock.stock_location_stock
product_id: product.product_product_pc1
product_qty: 3.0
product_uom: product.product_uom_unit
location_dest_id: stock.stock_location_customers
name: '[PC1] Basic PC'
move_type: direct
name: OUT/00006
type: out
-
I need to check the availability of the product so I make my picking order for processing later.

View File

@ -12,7 +12,7 @@
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.attachment</field>
<field name="view_type">form</field>
<field name="domain" eval="[('parent_id','=',ref('dir_sale'))]"></field>
<field name="context" eval="{'default_parent_id':ref('dir_sale')}"/>
<field name="help">Documents give you access to all files attached to any record. It is a repository of all documents such as emails, project-related attachments or any other documents. From this view, you can search through the content of the documents. OpenERP automatically assign meta data based on the record like the related partner and indexes the content of .DOC, .ODT, .TXT, .SXW and .PDF documents.</field>
</record>