[MEREGE]: Merge with lp:~openerp-dev/openobject-addons/trunk-dev-addons1

bzr revid: sbh@tinyerp.com-20100511065232-2af5g8z4m7r2myxw
This commit is contained in:
sbh (Open ERP)
2010-05-11 12:22:32 +05:30
101 changed files with 4291 additions and 1682 deletions
+28 -28
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-09 14:40+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-05-09 18:34+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.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: 2010-04-17 04:06+0000\n"
"X-Launchpad-Export-Date: 2010-05-10 04:17+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -312,7 +312,7 @@ msgstr "Päritolu"
#. module: account
#: rml:account.analytic.account.journal:0
msgid "Move Name"
msgstr ""
msgstr "Liiguta nime"
#. module: account
#: xsl:account.transfer:0
@@ -422,12 +422,12 @@ msgstr "Negatiivne"
#. module: account
#: rml:account.partner.balance:0
msgid "(Account/Partner) Name"
msgstr ""
msgstr "(Konto/partneri) nimi"
#. module: account
#: selection:account.move,type:0
msgid "Contra"
msgstr ""
msgstr "Vastu"
#. module: account
#: field:account.analytic.account,state:0
@@ -454,7 +454,7 @@ msgstr "Eriline arvutamine"
#. module: account
#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
msgid "Confirm statement with/without reconciliation from draft statement"
msgstr ""
msgstr "Kinnita avaldus koos/ilma alates leppimise avalduse esitamisest"
#. module: account
#: wizard_view:account.move.bank.reconcile,init:0
@@ -784,7 +784,7 @@ msgstr "Partneri konto"
#. module: account
#: wizard_view:account.subscription.generate,init:0
msgid "Generate entries before:"
msgstr ""
msgstr "Genereerida kirjed enne:"
#. module: account
#: rml:account.analytic.account.cost_ledger:0
@@ -912,7 +912,7 @@ msgstr ""
#. module: account
#: wizard_field:account.open_closed_fiscalyear,init,fyear_id:0
msgid "Fiscal Year to Open"
msgstr ""
msgstr "Finantsaasta avada"
#. module: account
#: view:account.config.wizard:0
@@ -1320,7 +1320,7 @@ msgstr ""
#. module: account
#: view:wizard.company.setup:0
msgid "Message"
msgstr ""
msgstr "Sõnum"
#. module: account
#: model:process.node,note:account.process_node_supplierpaymentorder0
@@ -1387,7 +1387,7 @@ msgstr "Maksuread"
#. module: account
#: field:ir.sequence,fiscal_ids:0
msgid "Sequences"
msgstr ""
msgstr "Järjekorrad"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_type_form
@@ -1473,7 +1473,7 @@ msgstr ""
#. module: account
#: wizard_button:account.fiscalyear.close.state,init,close:0
msgid "Close states"
msgstr ""
msgstr "Suletud seisud"
#. module: account
#: model:ir.model,name:account.model_wizard_company_setup
@@ -1704,7 +1704,7 @@ msgstr "Annab järjekorra kui näidatakse konto nimelirja tüüpe."
#. module: account
#: view:account.invoice:0
msgid "Re-Open"
msgstr ""
msgstr "Ava uuesti"
#. module: account
#: wizard_view:account.fiscalyear.close,init:0
@@ -1741,7 +1741,7 @@ msgstr "Kulupäevik perioodiks"
#: model:ir.actions.act_window,name:account.action_bank_statement_tree2
#: model:ir.ui.menu,name:account.menu_bank_statement_tree2
msgid "New Statement"
msgstr ""
msgstr "Uus teatis"
#. module: account
#: wizard_field:account.analytic.account.chart,init,from_date:0
@@ -1984,7 +1984,7 @@ msgstr " Alguskuupäev"
#. module: account
#: wizard_view:account.analytic.account.journal.report,init:0
msgid "Analytic Journal Report"
msgstr ""
msgstr "Analüütilise päeviku raport"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree3
@@ -2000,7 +2000,7 @@ msgstr "Maksu summa"
#. module: account
#: rml:account.analytic.account.quantity_cost_ledger:0
msgid "J.C./Move name"
msgstr ""
msgstr "J.C./liiguta nime"
#. module: account
#: field:account.journal.period,name:0
@@ -2058,7 +2058,7 @@ msgstr ""
#. module: account
#: wizard_view:account.automatic.reconcile,init:0
msgid "Options"
msgstr ""
msgstr "Seaded"
#. module: account
#: model:process.process,name:account.process_process_invoiceprocess0
@@ -2085,12 +2085,12 @@ msgstr "Kinnita kontoliikumised"
#. module: account
#: selection:account.subscription,period_type:0
msgid "days"
msgstr ""
msgstr "päevad"
#. module: account
#: selection:account.aged.trial.balance,init,direction_selection:0
msgid "Past"
msgstr ""
msgstr "Endine"
#. module: account
#: field:account.analytic.account,company_currency_id:0
@@ -2126,7 +2126,7 @@ msgstr ""
#: model:ir.actions.act_window,name:account.action_subscription_form_new
#: model:ir.ui.menu,name:account.menu_action_subscription_form_new
msgid "New Subscription"
msgstr ""
msgstr "Uus tellimus"
#. module: account
#: view:account.payment.term:0
@@ -2136,7 +2136,7 @@ msgstr ""
#. module: account
#: view:account.analytic.line:0
msgid "Analytic Entry"
msgstr ""
msgstr "Analüütiline kirje"
#. module: account
#: view:res.company:0 field:res.company,overdue_msg:0
@@ -2162,7 +2162,7 @@ msgstr ""
#. module: account
#: field:account.invoice,address_contact_id:0
msgid "Contact Address"
msgstr ""
msgstr "Kontaktaadress"
#. module: account
#: view:account.fiscalyear:0
@@ -2172,7 +2172,7 @@ msgstr "Loo 3 kuupikkused perioodid"
#. module: account
#: view:account.invoice:0
msgid "(keep empty to use the current period)"
msgstr ""
msgstr "(jätke tühjaks, et kasutada praegusel perioodil)"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree8
@@ -2188,7 +2188,7 @@ msgstr ""
#. module: account
#: selection:account.account.type,close_method:0
msgid "Detail"
msgstr ""
msgstr "Detail"
#. module: account
#: selection:account.account,type:0
@@ -2226,13 +2226,13 @@ msgstr "Kontoplaan"
#. module: account
#: model:account.journal,name:account.check_journal
msgid "x Checks Journal"
msgstr ""
msgstr "x Tšekkide päevik"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_generate_subscription
#: model:ir.ui.menu,name:account.menu_generate_subscription
msgid "Create subscription entries"
msgstr ""
msgstr "Koosta tellimus sissekanded"
#. module: account
#: wizard_field:account.fiscalyear.close,init,journal_id:0
@@ -2271,7 +2271,7 @@ msgstr "Kohustus"
#. module: account
#: selection:account.automatic.reconcile,init,power:0
msgid "2"
msgstr ""
msgstr "2"
#. module: account
#: wizard_view:account.chart,init:0
@@ -2306,7 +2306,7 @@ msgstr "Kuupäev"
#. module: account
#: field:account.invoice,reference_type:0
msgid "Reference Type"
msgstr ""
msgstr "Viite tüüp"
#. module: account
#: wizard_button:account.move.line.unreconcile,init,unrec:0
+4 -4
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-04-26 07:46+0000\n"
"PO-Revision-Date: 2010-05-10 08:37+0000\n"
"Last-Translator: eLBati - albatos.com <lorenzo.battistini@albatos.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: 2010-04-28 03:44+0000\n"
"X-Launchpad-Export-Date: 2010-05-11 04:18+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -1192,7 +1192,7 @@ msgstr "Report tassa"
#: wizard_button:account.analytic.account.chart,init,open:0
#: wizard_button:account.chart,init,open:0
msgid "Open Charts"
msgstr "Apri"
msgstr "Apri conti"
#. module: account
#: wizard_view:account.fiscalyear.close.state,init:0
@@ -4162,7 +4162,7 @@ msgstr "Fattura"
#: wizard_button:account.open_closed_fiscalyear,init,open:0
#: wizard_button:account_use_models,create,open_move:0
msgid "Open"
msgstr "Apri"
msgstr "Aperto"
#. module: account
#: model:ir.ui.menu,name:account.next_id_29
+3 -3
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-05-05 14:54+0000\n"
"PO-Revision-Date: 2010-05-06 09:55+0000\n"
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-05-06 04:04+0000\n"
"X-Launchpad-Export-Date: 2010-05-07 04:03+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -2768,7 +2768,7 @@ msgstr "O_k"
#. module: account
#: field:account.invoice,amount_untaxed:0
msgid "Untaxed"
msgstr "Nieopodatkowane"
msgstr "Netto"
#. module: account
#: model:ir.actions.report.xml,name:account.account_analytic_account_inverted_balance
+2 -2
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-05-06 01:44+0000\n"
"PO-Revision-Date: 2010-05-06 05:39+0000\n"
"Last-Translator: digitalsatori <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-05-06 04:04+0000\n"
"X-Launchpad-Export-Date: 2010-05-07 04:03+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report auto="False" id="fiscal_statements" model="account.report.report" name="accounting.report" rml="account_report/report/accounting_report.rml" string="Fiscal Statements"/>
<report auto="False" id="fiscal_statements" model="account.report.report" name="accounting.report" rml="account_report/report/accounting_report.rml" string="Financial Statements"/>
<report auto="False" id="report_print_indicators" model="account.report.history" name="print.indicators" rml="account_report/report/print_indicator.rml" string="Indicators"/>
+10 -10
View File
@@ -8,46 +8,46 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-02-26 06:55+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2010-05-09 21:19+0000\n"
"Last-Translator: MoLE <Unknown>\n"
"Language-Team: English (Australia) <en_AU@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: 2010-04-17 04:05+0000\n"
"X-Launchpad-Export-Date: 2010-05-10 04:17+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_tax_include
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
msgstr "Invalid XML for View Architecture!"
#. module: account_tax_include
#: field:account.invoice,price_type:0
msgid "Price method"
msgstr ""
msgstr "Price method"
#. module: account_tax_include
#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
msgid "Invoices and prices with taxes included"
msgstr ""
msgstr "Invoices and prices with taxes included"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax included"
msgstr ""
msgstr "Tax included"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax excluded"
msgstr ""
msgstr "Tax excluded"
#. module: account_tax_include
#: view:account.tax:0
msgid "Compute Code for Taxes included prices"
msgstr ""
msgstr "Compute Code for Taxes included prices"
#. module: account_tax_include
#: field:account.invoice.line,price_subtotal_incl:0
msgid "Subtotal"
msgstr ""
msgstr "Subtotal"
+53
View File
@@ -0,0 +1,53 @@
# English (United Kingdom) translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-05-09 21:20+0000\n"
"Last-Translator: MoLE <Unknown>\n"
"Language-Team: English (United Kingdom) <en_GB@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: 2010-05-10 04:17+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_tax_include
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Invalid XML for View Architecture!"
#. module: account_tax_include
#: field:account.invoice,price_type:0
msgid "Price method"
msgstr "Price method"
#. module: account_tax_include
#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
msgid "Invoices and prices with taxes included"
msgstr "Invoices and prices with taxes included"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax included"
msgstr "Tax included"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax excluded"
msgstr "Tax excluded"
#. module: account_tax_include
#: view:account.tax:0
msgid "Compute Code for Taxes included prices"
msgstr "Compute Code for Taxes included prices"
#. module: account_tax_include
#: field:account.invoice.line,price_subtotal_incl:0
msgid "Subtotal"
msgstr "Subtotal"
@@ -15,7 +15,7 @@
<child1>
<action colspan="4" height="200" name="%(mrp.mrp_production_action2)d" string="Next production orders" width="510"/>
<action colspan="4" name="%(stock.action_picking_all)d" string="Deliveries (Out picking)" domain="[('state','=','assigned'),('type','=','out')]"/>
<action colspan="4" name="%(mrp.mrp_procurement_action4)d" string="Procurements in Exception"/>
<action colspan="4" name="%(mrp_procurement.mrp_procurement_action4)d" string="Procurements in Exception"/>
</child1>
@@ -23,7 +23,7 @@
<form string="Warehouse board">
<hpaned position="100">
<child1>
<action colspan="4" name="%(mrp.mrp_procurement_action5)d" string="Procurement Exceptions" width="510" />
<action colspan="4" name="%(mrp_procurement.mrp_procurement_action5)d" string="Procurement Exceptions" width="510" />
<action colspan="4" name="%(action_reception_picking_move_board)d" string="Products To Receive" />
</child1>
+21 -21
View File
@@ -7,25 +7,25 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-09 13:36+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-05-10 10:27+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.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: 2010-04-17 04:00+0000\n"
"X-Launchpad-Export-Date: 2010-05-11 04:18+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: event
#: field:event.event,date_end:0
#: field:report.event.registration,date_end:0
msgid "Ending date"
msgstr ""
msgstr "Lõpu kuupäev"
#. module: event
#: field:event.event,register_min:0
msgid "Minimum Registrations"
msgstr ""
msgstr "Miinimum registreerimised"
#. module: event
#: constraint:ir.actions.act_window:0
@@ -35,17 +35,17 @@ msgstr "Vigane mudeli nimi toimingu definitsioonis."
#. module: event
#: field:event.event,mail_registr:0
msgid "Registration Email"
msgstr ""
msgstr "Registreerimise Email"
#. module: event
#: model:crm.case.section,name:event.event_0_crm_case_section
msgid "Concert of Bon Jovi"
msgstr ""
msgstr "Bon Jovi kontsert"
#. module: event
#: field:event.event,mail_confirm:0
msgid "Confirmation Email"
msgstr ""
msgstr "Kinnitus Email"
#. module: event
#: constraint:crm.case.section:0
@@ -55,7 +55,7 @@ msgstr "Viga! Sa ei saa luua rekursiivseid sektsioone."
#. module: event
#: model:ir.model,name:event.model_event_registration
msgid "Event Registration"
msgstr ""
msgstr "Sündmuse registreerimine"
#. module: event
#: model:ir.actions.wizard,name:event.event_reg_invoice
@@ -65,52 +65,52 @@ msgstr ""
#. module: event
#: field:report.event.type.registration,draft_state:0
msgid "Draft Registrations"
msgstr ""
msgstr "Registreerimiste mustand"
#. module: event
#: view:report.event.registration:0
msgid "Event on Registration"
msgstr ""
msgstr "Registreerimise sündmus"
#. module: event
#: wizard_button:event.reg_make_invoice,init,end:0
msgid "Ok"
msgstr ""
msgstr "Ok"
#. module: event
#: field:event.event,mail_auto_confirm:0
msgid "Mail Auto Confirm"
msgstr ""
msgstr "Autokinnituse meil"
#. module: event
#: model:product.template,name:event.event_product_1_product_template
msgid "Ticket for Opera"
msgstr ""
msgstr "Ooperi pilet"
#. module: event
#: wizard_field:event.reg_make_invoice,init,inv_rejected:0
msgid "Invoice Rejected"
msgstr ""
msgstr "Arve väljapraagitud"
#. module: event
#: view:event.event:0
msgid "Confirm Event"
msgstr ""
msgstr "Kinnita sündmus"
#. module: event
#: model:crm.case.section,name:event.event_1_crm_case_section
msgid "Opera of Verdi"
msgstr ""
msgstr "Verdi ooper"
#. module: event
#: field:report.event.registration,draft_state:0
msgid "Draft Registration"
msgstr ""
msgstr "Registreerimise mustand"
#. module: event
#: wizard_view:event.reg_make_invoice,init:0
msgid "Create Invoices"
msgstr ""
msgstr "Loo arved"
#. module: event
#: model:ir.module.module,description:event.module_meta_information
@@ -134,12 +134,12 @@ msgstr ""
#. module: event
#: view:event.registration:0
msgid "Extra Info"
msgstr ""
msgstr "Täiendav info"
#. module: event
#: view:event.registration:0
msgid "Registration"
msgstr ""
msgstr "Registreerimine"
#. module: event
#: field:event.type,name:0
+29 -14
View File
@@ -184,7 +184,7 @@ class email_server(osv.osv):
history_pool = self.pool.get('mail.server.history')
msg_txt = email.message_from_string(message)
message_id = msg_txt.get('Message-ID', False)
msg = {}
if not message_id:
return False
@@ -193,24 +193,28 @@ class email_server(osv.osv):
msg['id'] = message_id
msg['message-id'] = message_id
def _decode_header(txt):
txt = txt.replace('\r', '')
return ' '.join(map(lambda (x, y): unicode(x, y or 'ascii'), decode_header(txt)))
if 'Subject' in fields:
msg['subject'] = msg_txt.get('Subject')
msg['subject'] = _decode_header(msg_txt.get('Subject'))
if 'Content-Type' in fields:
msg['content-type'] = msg_txt.get('Content-Type')
if 'From' in fields:
msg['from'] = msg_txt.get('From')
msg['from'] = _decode_header(msg_txt.get('From'))
if 'Delivered-To' in fields:
msg['to'] = msg_txt.get('Delivered-To')
msg['to'] = _decode_header(msg_txt.get('Delivered-To'))
if 'Cc' in fields:
msg['cc'] = msg_txt.get('Cc')
msg['cc'] = _decode_header(msg_txt.get('Cc'))
if 'Reply-To' in fields:
msg['reply'] = msg_txt.get('Reply-To')
msg['reply'] = _decode_header(msg_txt.get('Reply-To'))
if 'Date' in fields:
msg['date'] = msg_txt.get('Date')
@@ -228,7 +232,10 @@ class email_server(osv.osv):
msg['priority'] = msg_txt.get('X-priority', '3 (Normal)').split(' ')[0]
if not msg_txt.is_multipart() or 'text/plain' in msg.get('content-type', None):
encoding = msg_txt.get_content_charset()
msg['body'] = msg_txt.get_payload(decode=True)
if encoding:
msg['body'] = msg['body'].decode(encoding).encode('utf-8')
attachents = {}
if msg_txt.is_multipart() or 'multipart/alternative' in msg.get('content-type', None):
@@ -238,27 +245,35 @@ class email_server(osv.osv):
if part.get_content_maintype() == 'multipart':
continue
encoding = part.get_content_charset()
if part.get_content_maintype()=='text':
content = part.get_payload(decode=True)
if part.get_content_subtype() == 'html':
body = html2plaintext(content)
elif part.get_content_subtype() == 'plain':
body = content
filename = part.get_filename()
if filename :
attachents[filename] = part.get_payload(decode=True)
attachents[filename] = content
else:
if encoding:
content = unicode(content, encoding)
if part.get_content_subtype() == 'html':
body = html2plaintext(content)
elif part.get_content_subtype() == 'plain':
body = content
elif part.get_content_maintype()=='application' or part.get_content_maintype()=='image' or part.get_content_maintype()=='text':
filename = part.get_filename();
if filename :
attachents[filename] = part.get_payload(decode=True)
else:
body += part.get_payload(decode=True)
res = part.get_payload(decode=True)
if encoding:
res = res.decode(encoding).encode('utf-8')
body += res
msg['body'] = body
msg['attachments'] = attachents
res_id = False
if msg.get('references', False):
id = False
+5 -5
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-02-14 21:34+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-05-10 13:18+0000\n"
"Last-Translator: Angel Spy <melissadilara@yahoo.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: 2010-04-17 04:16+0000\n"
"X-Launchpad-Export-Date: 2010-05-11 04:19+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr
@@ -62,7 +62,7 @@ msgstr ""
#. module: hr
#: view:hr.department:0
msgid "Department"
msgstr ""
msgstr "Bölüm"
#. module: hr
#: model:process.transition,name:hr.process_transition_contactofemployee0
@@ -340,7 +340,7 @@ msgstr "Firmalar"
#. module: hr
#: selection:hr.timesheet,dayofweek:0
msgid "Wednesday"
msgstr "Carsamba"
msgstr "Çarşamba"
#. module: hr
#: model:ir.actions.act_window,name:hr.open_view_categ_form
+2 -2
View File
@@ -86,7 +86,7 @@ class hr_contract(osv.osv):
'job_id': fields.many2one('hr.job', 'Job Title'),
'date_start': fields.date('Start Date', required=True),
'date_end': fields.date('End Date'),
'working_hours': fields.many2one('resource.calendar','Working hours'),
'working_hours': fields.many2one('resource.calendar','Working Schedule'),
'wage_type_id': fields.many2one('hr.contract.wage.type', 'Wage Type', required=True),
'wage': fields.float('Wage', digits=(16,2), required=True),
'advantages': fields.text('Advantages'),
@@ -99,4 +99,4 @@ class hr_contract(osv.osv):
}
hr_contract()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+117 -117
View File
@@ -7,24 +7,24 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-09 13:37+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-05-07 14:57+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.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: 2010-04-17 04:15+0000\n"
"X-Launchpad-Export-Date: 2010-05-08 04:05+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_ask_holidays_new
msgid "New Holidays Request"
msgstr ""
msgstr "Uus puhkusetaotlus"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_all_holiday
msgid "All Holidays Requests"
msgstr ""
msgstr "Kõik puhkusetaotlus"
#. module: hr_holidays
#: constraint:ir.actions.act_window:0
@@ -34,44 +34,44 @@ msgstr "Vigane mudeli nimi toimingu definitsioonis."
#. module: hr_holidays
#: field:hr.holidays.per.user,remaining_leaves:0
msgid "Remaining Leaves"
msgstr ""
msgstr "Järelejäänud puhkusepäevi"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_holiday_waiting
msgid "Requests Awaiting for Validation"
msgstr ""
msgstr "Valideerimist ootavad taotlused"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Blue"
msgstr ""
msgstr "Helesinine"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Brown"
msgstr ""
msgstr "Pruun"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "of the"
msgstr ""
msgstr "."
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "Off-Days' Summary"
msgstr ""
msgstr "Töövabade päevade kokkuvõte"
#. module: hr_holidays
#: view:hr.holidays:0
#: view:hr.holidays.per.user:0
#: model:process.transition,name:hr_holidays.process_transition_employeeholidays0
msgid "Employee Holidays"
msgstr ""
msgstr "Töötaja Puhkused"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Set to Draft"
msgstr ""
msgstr "Sea mustandiks"
#. module: hr_holidays
#: view:hr.holidays.per.user:0
@@ -79,27 +79,27 @@ msgstr ""
#: model:ir.model,name:hr_holidays.model_hr_holidays
#: model:process.node,name:hr_holidays.process_node_holidays0
msgid "Holidays"
msgstr ""
msgstr "Pühad"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "to"
msgstr ""
msgstr "kuni"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Cyan"
msgstr ""
msgstr "Heletsüaan"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Green"
msgstr ""
msgstr "Heleroheline"
#. module: hr_holidays
#: model:process.transition,name:hr_holidays.process_transition_employeedeclaration0
msgid "Employee Declaration"
msgstr ""
msgstr "Töötaja deklaratsioon"
#. module: hr_holidays
#: view:hr.holidays:0
@@ -111,7 +111,7 @@ msgstr "Valideeri"
#. module: hr_holidays
#: model:process.transition,name:hr_holidays.process_transition_refusedrequest0
msgid "Refused Request"
msgstr ""
msgstr "Tagasilükatud palved"
#. module: hr_holidays
#: model:process.node,name:hr_holidays.process_node_approved0
@@ -121,113 +121,113 @@ msgstr "Heakskiidetud"
#. module: hr_holidays
#: selection:hr.holidays.summary.employee,init,holiday_type:0
msgid "Both"
msgstr ""
msgstr "Mõlemad"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Refuse"
msgstr ""
msgstr "Keeldu"
#. module: hr_holidays
#: wizard_button:hr.holidays.summary,notify,end:0
#: wizard_button:hr.holidays.summary.employee,notify,end:0
msgid "Ok"
msgstr ""
msgstr "Ok"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_my_holiday
msgid "My Holidays Requests"
msgstr ""
msgstr "Minu puhkusetaotlused"
#. module: hr_holidays
#: field:hr.holidays,notes:0
#: field:hr.holidays.per.user,notes:0
msgid "Notes"
msgstr ""
msgstr "Märkmed"
#. module: hr_holidays
#: field:hr.holidays,holiday_status:0
#: field:hr.holidays.log,holiday_status:0
#: field:hr.holidays.per.user,holiday_status:0
msgid "Holiday's Status"
msgstr ""
msgstr "Puhkuste staatus"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_refusedrequest0
msgid "Request is refused."
msgstr ""
msgstr "Taotlus on tagasi lükatud."
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_ask_holidays
msgid "Holidays Management"
msgstr ""
msgstr "Puhkuste haldus"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "Analyze from"
msgstr ""
msgstr "Analüüs alates"
#. module: hr_holidays
#: model:ir.actions.report.xml,name:hr_holidays.report_holidays_summary
msgid "Summary Of Holidays"
msgstr ""
msgstr "Puhkuste kokkuvõte"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_calendar0
msgid "The holiday is set in the calendar"
msgstr ""
msgstr "Puhkus on kalendrisse seatud"
#. module: hr_holidays
#: view:hr.holidays.status:0
msgid "Holiday status"
msgstr ""
msgstr "Puhkuse staatus"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_status
msgid "Holidays Status"
msgstr ""
msgstr "Puhkuste Staatus"
#. module: hr_holidays
#: field:hr.holidays,date_to:0
msgid "Vacation end day"
msgstr ""
msgstr "Puhkuse lõpp"
#. module: hr_holidays
#: view:hr.holidays.per.user:0
msgid "Holidays Allowed"
msgstr ""
msgstr "Puhkused Lubatud"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_legaldeclaration0
msgid "Legal Declaration Document to declare new employee"
msgstr ""
msgstr "Õigusdeklaratsiooni dokument uue töötaja deklareerimiseks"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Magenta"
msgstr ""
msgstr "Fuksiinpunane"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_per_user
msgid "Holidays Per User"
msgstr ""
msgstr "Puhkused kasutaja kohta"
#. module: hr_holidays
#: view:hr.holidays.status:0
msgid "Define holiday status"
msgstr ""
msgstr "Defineeri puhkuse Staatus"
#. module: hr_holidays
#: selection:hr.holidays.summary,init,holiday_type:0
#: selection:hr.holidays.summary.employee,init,holiday_type:0
msgid "Confirmed"
msgstr ""
msgstr "Kinnitatud"
#. module: hr_holidays
#: wizard_field:hr.holidays.summary,init,date_from:0
#: wizard_field:hr.holidays.summary.employee,init,date_from:0
msgid "From"
msgstr ""
msgstr "Alates"
#. module: hr_holidays
#: view:hr.holidays:0
@@ -239,24 +239,24 @@ msgstr "Kinnita"
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday_waiting
#: model:ir.ui.menu,name:hr_holidays.menu_action_my_holiday_waiting
msgid "My Awaiting Confirmation Holidays Requests"
msgstr ""
msgstr "Minu kinnitamist ootavad puhkusetaotlused"
#. module: hr_holidays
#: field:hr.holidays,user_id:0
msgid "Employee_id"
msgstr ""
msgstr "Töötaja_id"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_holidaysdefinition0
msgid "Encoding of annual available holidays."
msgstr ""
msgstr "Igaastase saadaoleva puhkuse arvutamine"
#. module: hr_holidays
#: field:hr.holidays,employee_id:0
#: field:hr.holidays.log,employee_id:0
#: field:hr.holidays.per.user,employee_id:0
msgid "Employee"
msgstr ""
msgstr "Töötaja"
#. module: hr_holidays
#: selection:hr.holidays,state:0
@@ -271,41 +271,41 @@ msgstr ""
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Salmon"
msgstr ""
msgstr "Helekollane"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Wheat"
msgstr ""
msgstr "Nisukarva"
#. module: hr_holidays
#: field:hr.holidays.log,nb_holidays:0
msgid "Number of Holidays Requested"
msgstr ""
msgstr "Taodeldud puhkuste arv"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.act_hr_employee_holiday_request
msgid "My Holiday Requests"
msgstr ""
msgstr "Minu puhkusetaotlused"
#. module: hr_holidays
#: view:hr.holidays:0
#: view:hr.holidays.per.user:0
msgid "Number of Days"
msgstr ""
msgstr "Päevade arv"
#. module: hr_holidays
#: field:hr.holidays.status,name:0
#: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status
#: model:ir.ui.menu,name:hr_holidays.menu_open_view_holiday_status
msgid "Holiday Status"
msgstr ""
msgstr "Puhkuse Staatus"
#. module: hr_holidays
#: wizard_view:hr.holidays.summary,init:0
#: wizard_view:hr.holidays.summary.employee,init:0
msgid "Report Options"
msgstr ""
msgstr "Aruande valikud"
#. module: hr_holidays
#: constraint:ir.ui.view:0
@@ -315,44 +315,44 @@ msgstr "Vigane XML vaate arhitektuurile!"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_approved0
msgid "His manager approves the request"
msgstr ""
msgstr "Tema juhataja kiidab taotluse heaks"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_holidaysdefrequest0
msgid "If holidays available, employee can take it and fill it."
msgstr ""
msgstr "Kui puhkused on saadaval, saab töötaja neid võtta ja täita."
#. module: hr_holidays
#: wizard_view:hr.holidays.summary.employee,notify:0
msgid "You have to select at least 1 Employee. Try again."
msgstr ""
msgstr "Pead valima vähemalt 1 Töötaja. Proovi uuesti."
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_my_holiday_validate
msgid "My Validated Holidays Requests"
msgstr ""
msgstr "Minu valideeritud puhkusetaotlused"
#. module: hr_holidays
#: wizard_field:hr.holidays.summary.employee,init,emp:0
msgid "Employee(s)"
msgstr ""
msgstr "Töötaja(d)"
#. module: hr_holidays
#: field:hr.holidays,number_of_days:0
msgid "Number of Days in this Holiday Request"
msgstr ""
msgstr "Päevade arv selles puhkusetaotluses"
#. module: hr_holidays
#: view:hr.holidays.per.user:0
#: model:ir.actions.act_window,name:hr_holidays.action_holidays_per_user
#: model:ir.ui.menu,name:hr_holidays.menu_open_holidays_per_user
msgid "Holidays Per Employee"
msgstr ""
msgstr "Puhkusi töötaja kohta"
#. module: hr_holidays
#: field:hr.holidays.status,limit:0
msgid "Allow to override Limit"
msgstr ""
msgstr "Luba tühistada limiiti"
#. module: hr_holidays
#: field:hr.holidays.log,holiday_user_id:0
@@ -362,27 +362,27 @@ msgstr ""
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Lavender"
msgstr ""
msgstr "Lavendel (Kahvatulilla)"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_log
msgid "hr.holidays.log"
msgstr ""
msgstr "hr.holidays.log"
#. module: hr_holidays
#: model:ir.actions.wizard,name:hr_holidays.wizard_holidays_summary
msgid "Print Summary of Employee's Holidays"
msgstr ""
msgstr "Prindi töötajate puhkuste kokkuvõte"
#. module: hr_holidays
#: model:process.node,name:hr_holidays.process_node_calendar0
msgid "Calendar"
msgstr ""
msgstr "Kalender"
#. module: hr_holidays
#: field:hr.holidays,date_from:0
msgid "Vacation start day"
msgstr ""
msgstr "Puhkuse algus"
#. module: hr_holidays
#: model:ir.module.module,description:hr_holidays.module_meta_information
@@ -425,159 +425,159 @@ msgstr ""
#: wizard_view:hr.holidays.summary,notify:0
#: wizard_view:hr.holidays.summary.employee,notify:0
msgid "Notification"
msgstr ""
msgstr "Teavitus"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_holidaysrequest0
msgid "Employee fills in a request for holidays"
msgstr ""
msgstr "Töötaja täidab puhkusetaotluse"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_setholiday0
msgid "Holiday is set in the calendar."
msgstr ""
msgstr "Puhkus on kalendrisse seatud"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Coral"
msgstr ""
msgstr "Hele korall"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday_available
#: model:ir.ui.menu,name:hr_holidays.menu_action_my_holiday_available
msgid "My Available Holidays"
msgstr ""
msgstr "Minu Saadaolevad Puhkused"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Black"
msgstr ""
msgstr "Must"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_my_holiday_refuse
msgid "My Refused Holidays Requests"
msgstr ""
msgstr "Minu tagasi lükatud puhkusetaotlused"
#. module: hr_holidays
#: model:process.transition,name:hr_holidays.process_transition_setholiday0
msgid "Set Holiday"
msgstr ""
msgstr "Sea Puhkus"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_my_holiday_draft
msgid "My Draft Holidays Requests"
msgstr ""
msgstr "Minu puhkusetaotluste mustandid"
#. module: hr_holidays
#: field:hr.holidays.per.user,max_leaves:0
msgid "Maximum Leaves Allowed"
msgstr ""
msgstr "Maks. lubatud puhkusepäevi"
#. module: hr_holidays
#: field:hr.holidays,state:0
msgid "Status"
msgstr ""
msgstr "Staatus"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Ivory"
msgstr ""
msgstr "Elevandiluu"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday
msgid "My Holidays Request"
msgstr ""
msgstr "Minu puhkusetaotlused"
#. module: hr_holidays
#: field:hr.holidays.status,color_name:0
msgid "Color of the status"
msgstr ""
msgstr "Staatuse värv"
#. module: hr_holidays
#: selection:hr.holidays.summary,init,holiday_type:0
msgid "Both Validated and Confirmed"
msgstr ""
msgstr "Valideeritud ja kinnitatud"
#. module: hr_holidays
#: field:hr.holidays.per.user,leaves_taken:0
msgid "Leaves Already Taken"
msgstr ""
msgstr "Juba võetud puhkusepäevad"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "holidays."
msgstr ""
msgstr "puhkused."
#. module: hr_holidays
#: selection:hr.holidays,state:0
msgid "draft"
msgstr ""
msgstr "mustand"
#. module: hr_holidays
#: field:hr.holidays.per.user,user_id:0
msgid "User"
msgstr ""
msgstr "Kasutaja"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_employeedeclaration0
msgid "Document for employee"
msgstr ""
msgstr "Dokument töötajale"
#. module: hr_holidays
#: field:hr.holidays.log,date:0
msgid "Date"
msgstr ""
msgstr "Kuupäev"
#. module: hr_holidays
#: model:process.transition.action,name:hr_holidays.process_transition_action_reufse0
msgid "Reufse"
msgstr ""
msgstr "Lükka tagasi"
#. module: hr_holidays
#: field:hr.holidays.status,section_id:0
msgid "Section"
msgstr ""
msgstr "Sektsioon"
#. module: hr_holidays
#: field:hr.holidays,manager_id:0
msgid "Holiday manager"
msgstr ""
msgstr "Puhkuste haldur"
#. module: hr_holidays
#: field:hr.holidays.per.user,active:0
#: field:hr.holidays.status,active:0
msgid "Active"
msgstr ""
msgstr "Aktiivne"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday_draft
msgid "My Holidays Request Draft"
msgstr ""
msgstr "Minu puhkusetaotluste mustandid"
#. module: hr_holidays
#: model:process.transition,name:hr_holidays.process_transition_approvedrequest0
msgid "Approved Request"
msgstr ""
msgstr "Heaks kiidetud taotlus"
#. module: hr_holidays
#: model:process.node,name:hr_holidays.process_node_holidaysrequest0
msgid "Holidays Request"
msgstr ""
msgstr "Puhkusetaotlus"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_holiday_waiting
msgid "Holidays Requests Awaiting for Validation"
msgstr ""
msgstr "Kinnitamist ootavad puhkusetaotlused"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "General"
msgstr ""
msgstr "Üldine"
#. module: hr_holidays
#: view:hr.holidays.per.user:0
msgid "General Information"
msgstr ""
msgstr "Üldine info"
#. module: hr_holidays
#: view:hr.holidays:0
@@ -585,7 +585,7 @@ msgstr ""
#: wizard_button:hr.holidays.summary,init,end:0
#: wizard_button:hr.holidays.summary.employee,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Katkesta"
#. module: hr_holidays
#: model:process.transition,name:hr_holidays.process_transition_holidaysdefrequest0
@@ -596,12 +596,12 @@ msgstr ""
#: selection:hr.holidays.summary,init,holiday_type:0
#: selection:hr.holidays.summary.employee,init,holiday_type:0
msgid "Validated"
msgstr ""
msgstr "Kinnitatud"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday_refuse
msgid "My Holidays Request Refused"
msgstr ""
msgstr "Minu tagasi lükatud puhkusetaotlused"
#. module: hr_holidays
#: constraint:ir.model:0
@@ -614,23 +614,23 @@ msgstr ""
#: wizard_button:hr.holidays.summary,init,checkdept:0
#: wizard_button:hr.holidays.summary.employee,init,checkemp:0
msgid "Print"
msgstr ""
msgstr "Prindi"
#. module: hr_holidays
#: model:ir.actions.wizard,name:hr_holidays.holidays_summary
#: model:ir.ui.menu,name:hr_holidays.menu_holidays_summary
msgid "Print Summary of Holidays"
msgstr ""
msgstr "Prindi puhkuste kokkuvõte"
#. module: hr_holidays
#: wizard_field:hr.holidays.summary,init,depts:0
msgid "Department(s)"
msgstr ""
msgstr "Osakon(na)d"
#. module: hr_holidays
#: field:hr.holidays,name:0
msgid "Description"
msgstr ""
msgstr "Kirjeldus"
#. module: hr_holidays
#: selection:hr.holidays,state:0
@@ -641,23 +641,23 @@ msgstr "Tagasi lükatud"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_approvedrequest0
msgid "Request is approved."
msgstr ""
msgstr "Taotlus on heaks kiidetud."
#. module: hr_holidays
#: model:process.node,name:hr_holidays.process_node_holidaysdefinition0
msgid "Holidays Definition"
msgstr ""
msgstr "Puhkuste definitsioon"
#. module: hr_holidays
#: wizard_field:hr.holidays.summary,init,holiday_type:0
#: wizard_field:hr.holidays.summary.employee,init,holiday_type:0
msgid "Select Holiday Type"
msgstr ""
msgstr "Vali Puhkuse Tüüp"
#. module: hr_holidays
#: field:hr.holidays,case_id:0
msgid "Case"
msgstr ""
msgstr "Juhtum"
#. module: hr_holidays
#: field:hr.holidays,holiday_user_id:0
@@ -667,22 +667,22 @@ msgstr ""
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_holidays0
msgid "Encode number of available holidays"
msgstr ""
msgstr "Arvuta saadaolevate puhkuste arv"
#. module: hr_holidays
#: model:process.node,name:hr_holidays.process_node_legaldeclaration0
msgid "Secretariat Social"
msgstr ""
msgstr "Sotsiaalsekretariaat"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Violet"
msgstr ""
msgstr "Violetne"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Red"
msgstr ""
msgstr "Punane"
#. module: hr_holidays
#: model:ir.module.module,shortdesc:hr_holidays.module_meta_information
@@ -692,34 +692,34 @@ msgstr ""
#. module: hr_holidays
#: model:process.process,name:hr_holidays.process_process_holidaysprocess0
msgid "Holidays Process"
msgstr ""
msgstr "Holidays Process"
#. module: hr_holidays
#: wizard_view:hr.holidays.summary,notify:0
msgid "You have to select at least 1 Department. Try again."
msgstr ""
msgstr "Sa pead valima vähemalt ühe osakonna. Proovi uuesti."
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday_validate
msgid "My Holidays Request Validated"
msgstr ""
msgstr "Minu valideeritud puhkusetaotlused"
#. module: hr_holidays
#: field:hr.holidays.log,holiday_req_id:0
msgid "Holiday Request ID"
msgstr ""
msgstr "Puhkusetaotluse ID"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Yellow"
msgstr ""
msgstr "Helekollane"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Pink"
msgstr ""
msgstr "Heleroosa"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_refused0
msgid "His manager refuses the request"
msgstr ""
msgstr "Tema juhataja lükkab taotluse tagasi"
+4 -4
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-03-24 10:38+0000\n"
"Last-Translator: Drazen Bosak <Unknown>\n"
"PO-Revision-Date: 2010-05-10 06:56+0000\n"
"Last-Translator: nafterburner <nafterburner@gmail.com>\n"
"Language-Team: Vinteh\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-04-17 04:10+0000\n"
"X-Launchpad-Export-Date: 2010-05-11 04:19+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"Language: hr\n"
@@ -336,7 +336,7 @@ msgstr "Kreator"
#. module: idea
#: model:ir.ui.menu,name:idea.menu_tools
msgid "Tools"
msgstr "Pomagala"
msgstr "Alati"
#. module: idea
#: field:idea.comment,idea_id:0
+4 -4
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2008-10-13 00:48+0000\n"
"Last-Translator: Marius Marolla <mariusmarolla@areablu.net>\n"
"PO-Revision-Date: 2010-05-08 11:08+0000\n"
"Last-Translator: eLBati - albatos.com <lorenzo.battistini@albatos.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: 2010-04-17 04:09+0000\n"
"X-Launchpad-Export-Date: 2010-05-10 04:17+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: idea
@@ -44,7 +44,7 @@ msgstr "Le Mie Idee"
#. module: idea
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Nome del modello non valido nella definizione dell'azione."
#. module: idea
#: selection:idea.idea,my_vote:0
+2 -1
View File
@@ -26,5 +26,6 @@ import installer
import wizard
import report
import company
import schedulers
import mrp_procurement
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+2 -5
View File
@@ -26,7 +26,7 @@
"author" : "Tiny",
"website" : "http://www.openerp.com",
"category" : "Generic Modules/Production",
"depends" : ["stock", "resource", "purchase", "product","process"],
"depends" : ["mrp_procurement", "stock", "resource", "purchase", "product","process"],
"description": """
This is the base module to manage the manufacturing process in Open ERP.
@@ -61,15 +61,11 @@
'mrp_workflow.xml',
'mrp_data.xml',
'wizard/mrp_product_produce_view.xml',
'wizard/make_procurement_view.xml',
'wizard/mrp_procurement_view.xml',
'wizard/change_production_qty_view.xml',
'wizard/orderpoint_procurement_view.xml',
'wizard/mrp_price_view.xml',
'wizard/mrp_workcenter_load_view.xml',
# 'wizard/mrp_track_prod_view.xml',
'mrp_view.xml',
'wizard/schedulers_all_view.xml',
'mrp_wizard.xml',
'mrp_report.xml',
'company_view.xml',
@@ -81,6 +77,7 @@
'report/mrp_production_order_view.xml',
],
'demo_xml': ['mrp_demo.xml', 'mrp_order_point.xml'],
# 'test': ['test/mrp_phantom_bom.yml','test/mrp_production_order.yml'],
'installable': True,
'active': False,
'certificate': '0032052481373',
-12
View File
@@ -24,22 +24,10 @@ from osv import osv,fields
class company(osv.osv):
_inherit = 'res.company'
_columns = {
'schedule_range': fields.float('Scheduler Range', required=True,
help="This is the time frame analysed by the scheduler when "\
"computing procurements. All procurements that are not between "\
"today and today+range are skipped for futur computation."),
'po_lead': fields.float('Purchase Lead Time', required=True,
help="This is the leads/security time for each purchase order."),
'security_lead': fields.float('Security Days', required=True,
help="This is the days added to what you promise to customers "\
"for security purpose"),
'manufacturing_lead': fields.float('Manufacturing Lead Time', required=True,
help="Security days for each manufacturing operation."),
}
_defaults = {
'schedule_range': lambda *a: 80.0,
'po_lead': lambda *a: 1.0,
'security_lead': lambda *a: 5.0,
'manufacturing_lead': lambda *a: 1.0,
}
company()
-5
View File
@@ -9,12 +9,7 @@
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<page string="Configuration" position="inside">
<separator string="MRP &amp; Logistic Scheduler" colspan="4"/>
<field name="schedule_range"/>
<field name="po_lead"/>
<field name="security_lead"/>
<field name="manufacturing_lead"/>
<newline/>
</page>
</field>
</record>
-543
View File
@@ -64,35 +64,6 @@ class mrp_workcenter(osv.osv):
mrp_workcenter()
class mrp_property_group(osv.osv):
"""
Group of mrp properties.
"""
_name = 'mrp.property.group'
_description = 'Property Group'
_columns = {
'name': fields.char('Property Group', size=64, required=True),
'description': fields.text('Description'),
}
mrp_property_group()
class mrp_property(osv.osv):
"""
Properties of mrp.
"""
_name = 'mrp.property'
_description = 'Property'
_columns = {
'name': fields.char('Name', size=64, required=True),
'composition': fields.selection([('min','min'),('max','max'),('plus','plus')], 'Properties composition', required=True, help="Not used in computations, for information purpose only."),
'group_id': fields.many2one('mrp.property.group', 'Property Group', required=True),
'description': fields.text('Description'),
}
_defaults = {
'composition': lambda *a: 'min',
}
mrp_property()
class mrp_routing(osv.osv):
"""
For specifying the routings of workcenters.
@@ -996,520 +967,6 @@ class mrp_production_product_line(osv.osv):
}
mrp_production_product_line()
# ------------------------------------------------------------------
# Procurement
# ------------------------------------------------------------------
#
# Produce, Buy or Find products and place a move
# then wizard for picking lists & move
#
class mrp_procurement(osv.osv):
"""
Procument Orders
"""
_name = "mrp.procurement"
_description = "Procurement"
_order = 'priority,date_planned'
_columns = {
'name': fields.char('Reason', size=64, required=True, help='Procurement name.'),
'origin': fields.char('Source Document', size=64,
help="Reference of the document that created this Procurement.\n"
"This is automatically completed by Open ERP."),
'priority': fields.selection([('0','Not urgent'),('1','Normal'),('2','Urgent'),('3','Very Urgent')], 'Priority', required=True),
'date_planned': fields.datetime('Scheduled date', required=True),
'date_close': fields.datetime('Date Closed'),
'product_id': fields.many2one('product.product', 'Product', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'product_qty': fields.float('Quantity', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'product_uom': fields.many2one('product.uom', 'Product UoM', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'product_uos_qty': fields.float('UoS Quantity', states={'draft':[('readonly',False)]}, readonly=True),
'product_uos': fields.many2one('product.uom', 'Product UoS', states={'draft':[('readonly',False)]}, readonly=True),
'move_id': fields.many2one('stock.move', 'Reservation', ondelete='set null'),
'bom_id': fields.many2one('mrp.bom', 'BoM', ondelete='cascade', select=True),
'close_move': fields.boolean('Close Move at end', required=True),
'location_id': fields.many2one('stock.location', 'Location', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'procure_method': fields.selection([('make_to_stock','from stock'),('make_to_order','on order')], 'Procurement Method', states={'draft':[('readonly',False)], 'confirmed':[('readonly',False)]},
readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \
" a make to order method."),
'purchase_id': fields.many2one('purchase.order', 'Purchase Order'),
'note': fields.text('Note'),
'property_ids': fields.many2many('mrp.property', 'mrp_procurement_property_rel', 'procurement_id','property_id', 'Properties'),
'message': fields.char('Latest error', size=64, help="Exception occurred while computing procurement orders."),
'state': fields.selection([
('draft','Draft'),
('confirmed','Confirmed'),
('exception','Exception'),
('running','Running'),
('cancel','Cancel'),
('ready','Ready'),
('done','Done'),
('waiting','Waiting')], 'State', required=True,
help='When a procurement is created the state is set to \'Draft\'.\n If the procurement is confirmed, the state is set to \'Confirmed\'.\
\nAfter confirming the state is set to \'Running\'.\n If any exception arises in the order then the state is set to \'Exception\'.\n Once the exception is removed the state becomes \'Ready\'.\n It is in \'Waiting\'. state when the procurement is waiting for another one to finish.'),
'note': fields.text('Note'),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'state': lambda *a: 'draft',
'priority': lambda *a: '1',
'date_planned': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'close_move': lambda *a: 0,
'procure_method': lambda *a: 'make_to_order',
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.procurement', context=c)
}
def unlink(self, cr, uid, ids, context=None):
procurements = self.read(cr, uid, ids, ['state'])
unlink_ids = []
for s in procurements:
if s['state'] in ['draft','cancel']:
unlink_ids.append(s['id'])
else:
raise osv.except_osv(_('Invalid action !'), _('Cannot delete Procurement Order(s) which are in %s State!' % s['state']))
return osv.osv.unlink(self, cr, uid, unlink_ids, context=context)
def onchange_product_id(self, cr, uid, ids, product_id, context={}):
""" Finds UoM and UoS of changed product.
@param product_id: Changed id of product.
@return: Dictionary of values.
"""
if product_id:
w = self.pool.get('product.product').browse(cr, uid, product_id, context)
v = {
'product_uom': w.uom_id.id,
'product_uos': w.uos_id and w.uos_id.id or w.uom_id.id
}
return {'value': v}
return {}
def check_product(self, cr, uid, ids):
""" Checks product type.
@return: True or False
"""
for procurement in self.browse(cr, uid, ids):
if procurement.product_id.type in ('product', 'consu'):
return True
return False
def check_move_cancel(self, cr, uid, ids, context={}):
""" Checks if move is cancelled or not.
@return: True or False.
"""
res = True
ok = False
for procurement in self.browse(cr, uid, ids, context):
if procurement.move_id:
ok = True
if not procurement.move_id.state == 'cancel':
res = False
return res and ok
def check_move_done(self, cr, uid, ids, context={}):
""" Checks if move is done or not.
@return: True or False.
"""
res = True
for proc in self.browse(cr, uid, ids, context):
if proc.move_id:
if not proc.move_id.state == 'done':
res = False
return res
#
# This method may be overrided by objects that override mrp.procurment
# for computing their own purpose
#
def _quantity_compute_get(self, cr, uid, proc, context={}):
""" Finds sold quantity of product.
@param proc: Current procurement.
@return: Quantity or False.
"""
if proc.product_id.type == 'product':
if proc.move_id.product_uos:
return proc.move_id.product_uos_qty
return False
def _uom_compute_get(self, cr, uid, proc, context={}):
""" Finds UoS if product is Stockable Product.
@param proc: Current procurement.
@return: UoS or False.
"""
if proc.product_id.type == 'product':
if proc.move_id.product_uos:
return proc.move_id.product_uos.id
return False
#
# Return the quantity of product shipped/produced/served, wich may be
# different from the planned quantity
#
def quantity_get(self, cr, uid, id, context={}):
""" Finds quantity of product used in procurement.
@return: Quantity of product.
"""
proc = self.browse(cr, uid, id, context)
result = self._quantity_compute_get(cr, uid, proc, context)
if not result:
result = proc.product_qty
return result
def uom_get(self, cr, uid, id, context=None):
""" Finds UoM of product used in procurement.
@return: UoM of product.
"""
proc = self.browse(cr, uid, id, context)
result = self._uom_compute_get(cr, uid, proc, context)
if not result:
result = proc.product_uom.id
return result
def check_waiting(self, cr, uid, ids, context=[]):
""" Checks state of move.
@return: True or False
"""
for procurement in self.browse(cr, uid, ids, context=context):
if procurement.move_id and procurement.move_id.state == 'auto':
return True
return False
def check_produce_service(self, cr, uid, procurement, context=[]):
return True
def check_produce_product(self, cr, uid, procurement, context=[]):
""" Finds BoM of a product if not found writes exception message.
@param procurement: Current procurement.
@return: True or False.
"""
properties = [x.id for x in procurement.property_ids]
bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties)
if not bom_id:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id))
return False
return True
def check_make_to_stock(self, cr, uid, ids, context={}):
""" Checks product type.
@return: True or False
"""
ok = True
for procurement in self.browse(cr, uid, ids, context=context):
if procurement.product_id.type == 'service':
ok = ok and self._check_make_to_stock_service(cr, uid, procurement, context)
else:
ok = ok and self._check_make_to_stock_product(cr, uid, procurement, context)
return ok
def check_produce(self, cr, uid, ids, context={}):
""" Checks product type.
@return: True or Product Id.
"""
res = True
user = self.pool.get('res.users').browse(cr, uid, uid)
for procurement in self.browse(cr, uid, ids):
if procurement.product_id.product_tmpl_id.supply_method <> 'produce':
if procurement.product_id.seller_ids:
partner = procurement.product_id.seller_ids[0].name
if user.company_id and user.company_id.partner_id:
if partner.id == user.company_id.partner_id.id:
return True
return False
if procurement.product_id.product_tmpl_id.type=='service':
res = res and self.check_produce_service(cr, uid, procurement, context)
else:
res = res and self.check_produce_product(cr, uid, procurement, context)
if not res:
return False
return res
def check_buy(self, cr, uid, ids):
""" Checks product type.
@return: True or Product Id.
"""
user = self.pool.get('res.users').browse(cr, uid, uid)
partner_obj = self.pool.get('res.partner')
for procurement in self.browse(cr, uid, ids):
if procurement.product_id.product_tmpl_id.supply_method <> 'buy':
return False
if not procurement.product_id.seller_ids:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('No supplier defined for this product !'), procurement.id))
return False
partner = procurement.product_id.seller_ids[0].name
if user.company_id and user.company_id.partner_id:
if partner.id == user.company_id.partner_id.id:
return False
address_id = partner_obj.address_get(cr, uid, [partner.id], ['delivery'])['delivery']
if not address_id:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('No address defined for the supplier'), procurement.id))
return False
return True
def test_cancel(self, cr, uid, ids):
""" Tests whether state of move is cancelled or not.
@return: True or False
"""
for record in self.browse(cr, uid, ids):
if record.move_id and record.move_id.state == 'cancel':
return True
return False
def action_confirm(self, cr, uid, ids, context={}):
""" Confirms procurement and writes exception message if any.
@return: True
"""
move_obj = self.pool.get('stock.move')
for procurement in self.browse(cr, uid, ids):
if procurement.product_qty <= 0.00:
raise osv.except_osv(_('Data Insufficient !'), _('Please check the Quantity of Procurement Order(s), it should not be less than 1!'))
if procurement.product_id.type in ('product', 'consu'):
if not procurement.move_id:
source = procurement.location_id.id
if procurement.procure_method == 'make_to_order':
source = procurement.product_id.product_tmpl_id.property_stock_procurement.id
id = move_obj.create(cr, uid, {
'name': 'PROC:' + procurement.name,
'location_id': source,
'location_dest_id': procurement.location_id.id,
'product_id': procurement.product_id.id,
'product_qty': procurement.product_qty,
'product_uom': procurement.product_uom.id,
'date_planned': procurement.date_planned,
'state': 'confirmed',
'company_id': procurement.company_id.id,
})
self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1})
else:
# TODO: check this
if procurement.procure_method == 'make_to_stock' and procurement.move_id.state in ('waiting',):
id = move_obj.write(cr, uid, [procurement.move_id.id], {'state':'confirmed'})
self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''})
return True
def action_move_assigned(self, cr, uid, ids, context={}):
""" Changes procurement state to Running and writes message.
@return: True
"""
self.write(cr, uid, ids, {'state': 'running', 'message': _('from stock: products assigned.')})
return True
def _check_make_to_stock_service(self, cr, uid, procurement, context={}):
return True
def _check_make_to_stock_product(self, cr, uid, procurement, context={}):
""" Checks procurement move state.
@param procurement: Current procurement.
@return: True or move id.
"""
ok = True
if procurement.move_id:
id = procurement.move_id.id
if not (procurement.move_id.state in ('done','assigned','cancel')):
ok = ok and self.pool.get('stock.move').action_assign(cr, uid, [id])
cr.execute('select count(id) from stock_warehouse_orderpoint where product_id=%s', (procurement.product_id.id,))
if not cr.fetchone()[0]:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('from stock and no minimum orderpoint rule defined'), procurement.id))
return ok
def action_produce_assign_service(self, cr, uid, ids, context={}):
""" Changes procurement state to Running.
@return: True
"""
for procurement in self.browse(cr, uid, ids):
self.write(cr, uid, [procurement.id], {'state': 'running'})
return True
def action_produce_assign_product(self, cr, uid, ids, context={}):
""" This is action which call from workflow to assign production order to procurements
@return: True
"""
res = self.make_mo(cr, uid, ids, context=context)
res = res.values()
return len(res) and res[0] or 0 #TO CHECK: why workflow is generated error if return not integer value
def make_mo(self, cr, uid, ids, context={}):
""" Make Manufecturing(production) order from procurement
@return: New created Production Orders procurement wise
"""
res = {}
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
production_obj = self.pool.get('mrp.production')
move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
for procurement in self.browse(cr, uid, ids):
res_id = procurement.move_id.id
loc_id = procurement.location_id.id
newdate = DateTime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S') - DateTime.RelativeDateTime(days=procurement.product_id.product_tmpl_id.produce_delay or 0.0)
newdate = newdate - DateTime.RelativeDateTime(days=company.manufacturing_lead)
produce_id = production_obj.create(cr, uid, {
'origin': procurement.origin,
'product_id': procurement.product_id.id,
'product_qty': procurement.product_qty,
'product_uom': procurement.product_uom.id,
'product_uos_qty': procurement.product_uos and procurement.product_uos_qty or False,
'product_uos': procurement.product_uos and procurement.product_uos.id or False,
'location_src_id': procurement.location_id.id,
'location_dest_id': procurement.location_id.id,
'bom_id': procurement.bom_id and procurement.bom_id.id or False,
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
'move_prod_id': res_id,
'company_id': procurement.company_id.id,
})
res[procurement.id] = produce_id
self.write(cr, uid, [procurement.id], {'state': 'running'})
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
move_obj.write(cr, uid, [res_id],
{'location_id': procurement.location_id.id})
return res
def action_po_assign(self, cr, uid, ids, context={}):
""" This is action which call from workflow to assign purchase order to procuments
@return: True
"""
res = self.make_po(cr, uid, ids, context=context)
res = res.values()
return len(res) and res[0] or 0 #TO CHECK: why workflow is generated error if return not integer value
def make_po(self, cr, uid, ids, context={}):
""" Make purchase order from procurement
@return: New created Purchase Orders procurement wise
"""
res = {}
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
partner_obj = self.pool.get('res.partner')
uom_obj = self.pool.get('product.uom')
pricelist_obj = self.pool.get('product.pricelist')
prod_obj = self.pool.get('product.product')
acc_pos_obj = self.pool.get('account.fiscal.position')
po_obj = self.pool.get('purchase.order')
for procurement in self.browse(cr, uid, ids):
res_id = procurement.move_id.id
partner = procurement.product_id.seller_ids[0].name
partner_id = partner.id
address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
pricelist_id = partner.property_product_pricelist_purchase.id
uom_id = procurement.product_id.uom_po_id.id
qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id)
if procurement.product_id.seller_ids[0].qty:
qty = max(qty,procurement.product_id.seller_ids[0].qty)
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, False, {'uom': uom_id})[pricelist_id]
newdate = DateTime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S')
newdate = newdate - DateTime.RelativeDateTime(days=company.po_lead)
newdate = newdate - procurement.product_id.seller_ids[0].delay
#Passing partner_id to context for purchase order line integrity of Line name
context.update({'lang': partner.lang, 'partner_id': partner_id})
product = prod_obj.browse(cr, uid, procurement.product_id.id, context=context)
line = {
'name': product.partner_ref,
'product_qty': qty,
'product_id': procurement.product_id.id,
'product_uom': uom_id,
'price_unit': price,
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
'move_dest_id': res_id,
'notes': product.description_purchase,
}
taxes_ids = procurement.product_id.product_tmpl_id.supplier_taxes_id
taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
line.update({
'taxes_id': [(6,0,taxes)]
})
purchase_id = po_obj.create(cr, uid, {
'origin': procurement.origin,
'partner_id': partner_id,
'partner_address_id': address_id,
'location_id': procurement.location_id.id,
'pricelist_id': pricelist_id,
'order_line': [(0,0,line)],
'company_id': procurement.company_id.id,
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False
})
res[procurement.id] = purchase_id
self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': purchase_id})
return res
def action_cancel(self, cr, uid, ids):
""" Cancels procurement and writes move state to Assigned.
@return: True
"""
todo = []
todo2 = []
move_obj = self.pool.get('stock.move')
for proc in self.browse(cr, uid, ids):
if proc.close_move:
if proc.move_id.state not in ('done', 'cancel'):
todo2.append(proc.move_id.id)
else:
if proc.move_id and proc.move_id.state == 'waiting':
todo.append(proc.move_id.id)
if len(todo2):
move_obj.action_cancel(cr, uid, todo2)
if len(todo):
move_obj.write(cr, uid, todo, {'state': 'assigned'})
self.write(cr, uid, ids, {'state': 'cancel'})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'mrp.procurement', id, cr)
return True
def action_check_finnished(self, cr, uid, ids):
return self.check_move_done(cr, uid, ids)
def action_check(self, cr, uid, ids):
""" Checks procurement move state whether assigned or done.
@return: True
"""
ok = False
for procurement in self.browse(cr, uid, ids):
if procurement.move_id.state == 'assigned' or procurement.move_id.state == 'done':
self.action_done(cr, uid, [procurement.id])
ok = True
return ok
def action_ready(self, cr, uid, ids):
""" Changes procurement state to Ready.
@return: True
"""
res = self.write(cr, uid, ids, {'state': 'ready'})
return res
def action_done(self, cr, uid, ids):
""" Changes procurement state to Done and writes Closed date.
@return: True
"""
move_obj = self.pool.get('stock.move')
for procurement in self.browse(cr, uid, ids):
if procurement.move_id:
if procurement.close_move and (procurement.move_id.state <> 'done'):
move_obj.action_done(cr, uid, [procurement.move_id.id])
res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'mrp.procurement', id, cr)
return res
def run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, context=None):
''' Runs through scheduler.
@param use_new_cursor: False or the dbname
'''
if not context:
context={}
self._procure_confirm(cr, uid, use_new_cursor=use_new_cursor, context=context)
self._procure_orderpoint_confirm(cr, uid, automatic=automatic,\
use_new_cursor=use_new_cursor, context=context)
mrp_procurement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-13
View File
@@ -31,18 +31,5 @@
<field name="number_increment">1</field>
</record>
<record forcecreate="True" id="ir_cron_scheduler_action" model="ir.cron">
<field name="name">Run mrp scheduler</field>
<field eval="False" name="active"/>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall"/>
<field eval="'mrp.procurement'" name="model"/>
<field eval="'run_scheduler'" name="function"/>
<field eval="'(False,)'" name="args"/>
</record>
</data>
</openerp>
+93
View File
@@ -0,0 +1,93 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from mx import DateTime
from osv import fields
from osv import osv
from tools.translate import _
import ir
import netsvc
import time
class mrp_procurement(osv.osv):
_inherit = 'mrp.procurement'
_columns = {
'bom_id': fields.many2one('mrp.bom', 'BoM', ondelete='cascade', select=True),
}
def check_produce_product(self, cr, uid, procurement, context=[]):
properties = [x.id for x in procurement.property_ids]
bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties)
if not bom_id:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id))
return False
return True
def action_produce_assign_product(self, cr, uid, ids, context={}):
""" This is action which call from workflow to assign production order to procurements
@return: True
"""
procurement_obj = self.pool.get('mrp.procurement')
res = procurement_obj.make_mo(cr, uid, ids, context=context)
res = res.values()
return len(res) and res[0] or 0 #TO CHECK: why workflow is generated error if return not integer value
def make_mo(self, cr, uid, ids, context={}):
""" Make Manufacturing(production) order from procurement
@return: New created Production Orders procurement wise
"""
res = {}
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
production_obj = self.pool.get('mrp.production')
move_obj = self.pool.get('stock.move')
wf_service = netsvc.LocalService("workflow")
procurement_obj = self.pool.get('mrp.procurement')
for procurement in procurement_obj.browse(cr, uid, ids):
res_id = procurement.move_id.id
loc_id = procurement.location_id.id
newdate = DateTime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S') - DateTime.RelativeDateTime(days=procurement.product_id.product_tmpl_id.produce_delay or 0.0)
newdate = newdate - DateTime.RelativeDateTime(days=company.manufacturing_lead)
produce_id = production_obj.create(cr, uid, {
'origin': procurement.origin,
'product_id': procurement.product_id.id,
'product_qty': procurement.product_qty,
'product_uom': procurement.product_uom.id,
'product_uos_qty': procurement.product_uos and procurement.product_uos_qty or False,
'product_uos': procurement.product_uos and procurement.product_uos.id or False,
'location_src_id': procurement.location_id.id,
'location_dest_id': procurement.location_id.id,
'bom_id': procurement.bom_id and procurement.bom_id.id or False,
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
'move_prod_id': res_id,
'company_id': procurement.company_id.id,
})
res[procurement.id] = produce_id
self.write(cr, uid, [procurement.id], {'state': 'running'})
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
move_obj.write(cr, uid, [res_id],
{'location_id': procurement.location_id.id})
return res
mrp_procurement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+39 -258
View File
@@ -12,6 +12,7 @@
id="menu_mrp_bom"
parent="base.menu_mrp_root"
sequence="5" />
<!--
Property / Property Group
-->
@@ -257,14 +258,14 @@
<field name="type" groups="base.group_extended"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
</group>
<notebook colspan="4">
<page string="General Information">
<notebook colspan="4" >
<page string="General Information" attrs="{'invisible': [('bom_id','!=',False),('multi_level_bom','=',False)]}">
<field colspan="4" name="bom_lines" nolabel="1" widget="one2many_list" />
</page>
<page string="Revisions" groups="base.group_extended">
<page string="Revisions" groups="base.group_extended" attrs="{'invisible': [('bom_id','!=',False),('multi_level_bom','=',False)]}">
<field colspan="4" name="revision_ids" nolabel="1" widget="one2many_list"/>
</page>
<page string="Properties" groups="base.group_extended">
<page string="Properties" groups="base.group_extended" attrs="{'invisible': [('bom_id','!=',False),('multi_level_bom','=',False)]}">
<field name="position"/>
<field name="active"/>
<field name="sequence"/>
@@ -378,10 +379,27 @@
</form>
</field>
</record>
<!--
Procurement
-->
<menuitem action="mrp_procurement.mrp_procurement_action" id="menu_mrp_procurement_action"
parent="mrp.menu_mrp_manufacturing" sequence="2" />
<menuitem action="mrp_procurement.mrp_procurement_action5" id="menu_mrp_procurement_exception_action"
parent="mrp.menu_mrp_control" sequence="1" />
<menuitem id="menu_mrp_scheduler" name="Schedulers" parent="base.menu_mrp_root" sequence="4"/>
<menuitem action="mrp_procurement.action_compute_schedulers" id="mrp_Sched_all" parent="mrp.menu_mrp_scheduler" sequence="90"/>
<!--
Order Point
-->
<menuitem action="mrp_procurement.action_orderpoint_form" id="menu_action_orderpoint_form" parent="mrp.menu_mrp_reordering"/>
<!--
Production Management
-->
Production Management
-->
<record id="mrp_production_tree_view" model="ir.ui.view">
<field name="name">mrp.production.tree</field>
@@ -765,259 +783,22 @@
</tree>
</field>
</record>
<!--
Procurement
<!--
Procurements
-->
<record id="mrp_procurement_tree_view" model="ir.ui.view">
<field name="name">mrp.procurement.tree</field>
<field name="model">mrp.procurement</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Procurement Lines" colors="red:state=='draft';black:state=='running';green:state=='confirmed';gray:state in ['done','cancel']">
<field name="date_planned" widget="date"/>
<field name="origin"/>
<field name="product_id"/>
<field name="product_qty"/>
<field name="product_uom" string="UOM"/>
<field name="procure_method"/>
<field name="state"/>
</tree>
</field>
<record id="view_procurement_form_inherit" model="ir.ui.view">
<field name="name">mrp.procurement.form.inherit</field>
<field name="model">mrp.procurement</field>
<field name="inherit_id" ref="mrp_procurement.mrp_procurement_form_view"/>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='move_id']" position="before">
<field name="bom_id" domain="[('product_id','=',product_id),('bom_id','=',False)]"/>
</xpath>
</field>
</record>
<record id="mrp_procurement_form_view" model="ir.ui.view">
<field name="name">mrp.procurement.form</field>
<field name="model">mrp.procurement</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Procurement">
<group col="2" colspan="2">
<separator colspan="2" string="References"/>
<field name="name" select="1" string="Procurement Reason"/>
<field name="origin"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Planification"/>
<field name="date_planned" select="1"/>
<field name="procure_method"/>
<field name="priority" groups="base.group_extended"/>
</group>
<notebook colspan="4">
<page string="Procurement Details">
<separator colspan="4" string="Product &amp; Location"/>
<field name="product_id" select="1" on_change="onchange_product_id(product_id)"/>
<field name="location_id" domain="[('usage','=','internal')]"/>
<field name="product_qty"/>
<field name="product_uom"/>
<field name="product_uos_qty" groups="product.group_uos"/>
<field name="product_uos" groups="product.group_uos"/>
<separator colspan="4" string="Status"/>
<field colspan="4" name="message" readonly="1"/>
<field name="state" readonly="1"/>
<group col="7" colspan="2">
<button name="button_confirm" states="draft" string="Confirm" icon="gtk-apply"/>
<button name="button_restart" states="exception" string="Retry" icon="gtk-convert"/>
<button name="button_cancel" states="draft,exception,waiting" string="Cancel" icon="gtk-cancel"/>
<button name="button_check" states="confirmed" string="Run Procurement" icon="gtk-media-play"/>
</group>
</page>
<page string="Extra Information">
<separator colspan="4" string="Details"/>
<field name="bom_id" domain="[('product_id','=',product_id),('bom_id','=',False)]"/>
<field name="move_id" groups="base.group_extended"/>
<field name="date_close"/>
<field name="close_move" groups="base.group_extended"/>
<field name="purchase_id"/>
<group colspan="4" groups="base.group_extended">
<separator colspan="4" string="Properties" />
<field colspan="4" name="property_ids" nolabel="1"/>
</group>
</page>
<page string="Notes">
<separator colspan="4" string="Note" />
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="view_mrp_procurement_filter" model="ir.ui.view">
<field name="name">mrp.procurement.select</field>
<field name="model">mrp.procurement</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Procurement">
<group col='10' colspan='4'>
<filter icon="terp-mrp" string="Current" domain="[('state','in',('draft','confirmed'))]" default="1" help="Procurement Orders in draft or open state."/>
<filter icon="terp-mrp" string="Exceptions" domain="[('state','=','exception')]" help="Procurement Orders with exceptions"/>
<filter icon="terp-mrp" string="Late"
domain="['&amp;', ('date_planned::date','&lt;', current_date), ('state', 'in', ('draft', 'confirmed'))]"
help="Procurement started late" />
<separator orientation="vertical"/>
<field name="name"/>
<field name="origin"/>
<field name="product_id" />
<field name="date_planned" widget="date"/>
<field name="state" />
</group>
<newline/>
<group expand="1" string="Group By" colspan="4" col="8">
<filter string="Product" icon="terp-mrp" domain="[]" context="{'group_by':'product_id'}"/>
<filter string="Reason" icon="terp-mrp" domain="[]" context="{'group_by':'name'}"/>
<filter string="Scheduled Date" icon="terp-mrp" domain="[]" context="{'group_by':'date_planned'}"/>
</group>
</search>
</field>
</record>
<record id="mrp_procurement_action" model="ir.actions.act_window">
<field name="name">Procurement Orders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="view_mrp_procurement_filter"/>
</record>
<menuitem action="mrp_procurement_action" id="menu_mrp_procurement_action" parent="mrp.menu_mrp_manufacturing"
sequence="2" />
<record id="mrp_procurement_action3" model="ir.actions.act_window">
<field name="name">Procurements</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_mrp_procurement_filter"/>
<field name="domain">[]</field>
<field name="context">{}</field>
</record>
<record id="mrp_procurement_action5" model="ir.actions.act_window">
<field name="name">Procurement Exceptions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','exception')]</field>
</record>
<menuitem action="mrp_procurement_action5" id="menu_mrp_procurement_exception_action" parent="mrp.menu_mrp_control"
sequence="1" />
<record id="mrp_procurement_action4" model="ir.actions.act_window">
<field name="name">Procurement Exceptions to Fix</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','exception'), ('message', '&lt;&gt;', '')]</field>
<field name="filter" eval="True"/>
</record>
<record id="mrp_procurement_action11" model="ir.actions.act_window">
<field name="name">Temporary Procurement Exceptions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','exception'), ('message', '=', '')]</field>
</record>
<!-- Order Point -->
<record id="view_warehouse_orderpoint_tree" model="ir.ui.view">
<field name="name">stock.warehouse.orderpoint.tree</field>
<field name="model">stock.warehouse.orderpoint</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Minimum Stock Rules">
<field name="name"/>
<field name="warehouse_id"/>
<field name="location_id"/>
<field name="product_id"/>
<field name="product_uom"/>
<field name="product_min_qty"/>
<field name="product_max_qty"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="warehouse_orderpoint_search">
<field name="name">stock.warehouse.orderpoint.search</field>
<field name="model">stock.warehouse.orderpoint</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Minimum Stock Rules Search">
<group col="10" colspan="4">
<field name="name" select="1" />
<field name="warehouse_id" select="1" widget="selection"/>
<field name="location_id" select="1" />
<field name="company_id" select="1" widget="selection"/>
<field name="product_id" select="1"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="4" col="10">
<filter string="Warehouse" icon="terp-stock" domain="[]" context="{'group_by':'warehouse_id'}"/>
<filter string="Location" icon="terp-stock" domain="[]" context="{'group_by':'location_id'}"/>
</group>
</search>
</field>
</record>
<record id="view_warehouse_orderpoint_form" model="ir.ui.view">
<field name="name">stock.warehouse.orderpoint.form</field>
<field name="model">stock.warehouse.orderpoint</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Minimum Stock Rules">
<group col="2" colspan="2">
<separator string="General Information" colspan="2" />
<field name="name" />
<field name="product_id" on_change="onchange_product_id(product_id)"/>
<field name="product_uom"/>
</group>
<group col="2" colspan="2">
<separator string="Locations" colspan="2" />
<field name="warehouse_id" on_change="onchange_warehouse_id(warehouse_id)" widget="selection"/>
<field name="location_id"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
</group>
<group col="2" colspan="2">
<separator string="Quantity Rules" colspan="2" />
<field name="product_min_qty"/>
<field name="product_max_qty"/>
<field name="qty_multiple"/>
</group>
<group col="2" colspan="2" groups="base.group_extended">
<separator string="Misc" colspan="2" />
<field name="procurement_id" readonly="1"/>
<field name="active" />
</group>
</form>
</field>
</record>
<record id="action_orderpoint_form" model="ir.actions.act_window">
<field name="name">Minimum Stock Rules</field>
<field name="res_model">stock.warehouse.orderpoint</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_warehouse_orderpoint_tree"/>
<field name="search_view_id" ref="warehouse_orderpoint_search" />
</record>
<menuitem action="action_orderpoint_form" id="menu_action_orderpoint_form" parent="menu_mrp_reordering"/>
<act_window domain="[('warehouse_id', '=', active_id)]" id="act_stock_warehouse_2_stock_warehouse_orderpoint" name="Minimum Stock Rules" res_model="stock.warehouse.orderpoint" src_model="stock.warehouse"/>
<!-- add product_uom to context to be the default value when adding new orderpoints -->
<act_window
context="{'product_uom': locals().has_key('uom_id') and uom_id}"
domain="[('product_id', '=', active_id)]"
id="act_product_product_2_stock_warehouse_orderpoint"
name="Minimum Stock Rules"
res_model="stock.warehouse.orderpoint"
src_model="product.product"/>
<act_window
id="action_product_bom_structure"
+27 -202
View File
@@ -113,241 +113,66 @@
<field name="act_to" ref="prod_act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<!-- Procurement -->
<record id="wkf" model="workflow">
<field name="name">mrp.procurement.basic</field>
<field name="osv">mrp.procurement</field>
<field name="on_create">True</field>
</record>
<record id="act_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="flow_start">True</field>
<field name="name">draft</field>
</record>
<record id="act_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">cancel</field>
<field name="kind">function</field>
<field name="action">action_cancel()</field>
<field name="flow_stop">True</field>
</record>
<record id="act_confirm" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">confirm</field>
<field name="kind">function</field>
<field name="action">action_confirm()</field>
</record>
<record id="act_confirm_wait" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">confirm_wait</field>
<field name="kind">function</field>
<field name="action">write({'state':'exception'})</field>
</record>
<record id="act_confirm_mts" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">confirm_mts</field>
</record>
<record id="act_confirm_mto" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">confirm_mto</field>
</record>
<record id="act_make_to_stock" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">make_to_stock</field>
<field name="kind">function</field>
<field name="action">action_move_assigned()</field>
</record>
<record id="act_produce" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="wkf_id" ref="mrp_procurement.wkf_procurement"/>
<field name="name">produce</field>
<field name="kind">subflow</field>
<field name="subflow_id" search="[('osv','=','mrp.production')]"/>
<field name="action">action_produce_assign_product()</field>
</record>
<record id="act_produce_check" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="wkf_id" ref="mrp_procurement.wkf_procurement"/>
<field name="name">produce_check</field>
</record>
<record id="act_produce_service" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="wkf_id" ref="mrp_procurement.wkf_procurement"/>
<field name="name">produce_service</field>
<field name="kind">function</field>
<field name="action">action_produce_assign_service()</field>
</record>
<record id="act_buy" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">buy</field>
<field name="kind">subflow</field>
<field name="subflow_id" search="[('osv','=','purchase.order')]"/>
<field name="action">action_po_assign()</field>
</record>
<record id="act_make_done" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">ready</field>
<field name="kind">function</field>
<field name="action">action_ready()</field>
</record>
<record id="act_wait_done" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="name">wait_done</field>
<field name="kind">function</field>
<field name="action">write({'state':'waiting'})</field>
</record>
<record id="act_done" model="workflow.activity">
<field name="wkf_id" ref="wkf"/>
<field name="flow_stop">True</field>
<field name="name">done</field>
<field name="kind">function</field>
<field name="action">action_done()</field>
</record>
<record id="trans_draft_confirm" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">button_confirm</field>
</record>
<record id="trans_confirm_cancel2" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_wait_done"/>
<field name="signal">button_wait_done</field>
<field name="condition">True</field>
</record>
<record id="trans_confirm_wait_done" model="workflow.transition">
<field name="act_from" ref="act_wait_done"/>
<field name="act_to" ref="act_done"/>
<field name="condition">check_move_done()</field>
<field name="trigger_model">stock.move</field>
<field name="trigger_expr_id">[move_id.id]</field>
</record>
<record id="trans_confirm_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_check</field>
<field name="condition">test_cancel()</field>
</record>
<record id="trans_confirm_confirm_wait" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_confirm_wait"/>
<field name="signal">button_check</field>
<field name="condition">not test_cancel()</field>
</record>
<record id="trans_confirm_wait_confirm_mto" model="workflow.transition">
<field name="act_from" ref="act_confirm_wait"/>
<field name="act_to" ref="act_confirm_mto"/>
<field name="condition">procure_method=='make_to_order'</field>
</record>
<record id="trans_confirm_wait_confirm_mts" model="workflow.transition">
<field name="act_from" ref="act_confirm_wait"/>
<field name="act_to" ref="act_confirm_mts"/>
<field name="condition">procure_method=='make_to_stock'</field>
</record>
<record id="trans_confirm_mts_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirm_mts"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_waiting_cancel" model="workflow.transition">
<field name="act_from" ref="act_wait_done"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_mts_confirm" model="workflow.transition">
<field name="act_from" ref="act_confirm_mts"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">button_restart</field>
</record>
<record id="trans_confirm_mto_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirm_mto"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_mto_confirm" model="workflow.transition">
<field name="act_from" ref="act_confirm_mto"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">button_restart</field>
</record>
<record id="trans_draft_cancel" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_mts_make_to_stock" model="workflow.transition">
<field name="act_from" ref="act_confirm_mts"/>
<field name="act_to" ref="act_make_to_stock"/>
<field name="condition">check_make_to_stock()</field>
</record>
<record id="trans_confirm_mto_produce_check" model="workflow.transition">
<field name="act_from" ref="act_confirm_mto"/>
<field name="act_from" ref="mrp_procurement.act_confirm_mto"/>
<field name="act_to" ref="act_produce_check"/>
<field name="condition">check_produce()</field>
</record>
<record id="trans_product_check_produce" model="workflow.transition">
<field name="act_from" ref="act_produce_check"/>
<field name="act_to" ref="act_produce"/>
<field name="condition">check_product()</field>
</record>
<record id="trans_product_check_produce_service" model="workflow.transition">
<field name="act_from" ref="act_produce_check"/>
<field name="act_to" ref="act_produce_service"/>
<field name="condition">not check_product()</field>
</record>
<record id="trans_confirm_mto_buy" model="workflow.transition">
<field name="act_from" ref="act_confirm_mto"/>
<field name="act_to" ref="act_buy"/>
<field name="condition">check_buy()</field>
</record>
<record id="trans_make_to_stock_make_done" model="workflow.transition">
<field name="act_from" ref="act_make_to_stock"/>
<field name="act_to" ref="act_make_done"/>
<field name="condition">True</field>
<field name="trigger_model" eval="False"/>
<field name="trigger_expr_id" eval="False"/>
</record>
<record id="trans_produce_cancel" model="workflow.transition">
<field name="act_from" ref="act_produce"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">subflow.cancel</field>
</record>
<record id="trans_produce_service_cancel" model="workflow.transition">
<field name="act_from" ref="act_produce_service"/>
<field name="act_to" ref="act_cancel"/>
<field name="act_to" ref="mrp_procurement.act_cancel"/>
<field name="signal">subflow.cancel</field>
</record>
<record id="trans_buy_cancel" model="workflow.transition">
<field name="act_from" ref="act_buy"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">subflow.cancel</field>
</record>
<record id="trans_produce_make_done" model="workflow.transition">
<field name="act_from" ref="act_produce"/>
<field name="act_to" ref="act_make_done"/>
<field name="signal">subflow.done</field>
</record>
<record id="trans_produce_service_make_done" model="workflow.transition">
<field name="act_from" ref="act_produce_service"/>
<field name="act_to" ref="act_make_done"/>
<field name="act_to" ref="mrp_procurement.act_make_done"/>
</record>
<record id="trans_buy_make_done" model="workflow.transition">
<field name="act_from" ref="act_buy"/>
<field name="act_to" ref="act_make_done"/>
<field name="signal">subflow.delivery_done</field>
<record id="trans_product_check_produce" model="workflow.transition">
<field name="act_from" ref="act_produce_check"/>
<field name="act_to" ref="act_produce"/>
<field name="condition">check_product()</field>
</record>
<record id="trans_make_done_done" model="workflow.transition">
<field name="act_from" ref="act_make_done"/>
<field name="act_to" ref="act_done"/>
<field name="condition">action_check_finnished()</field>
<record id="trans_produce_cancel" model="workflow.transition">
<field name="act_from" ref="act_produce"/>
<field name="act_to" ref="mrp_procurement.act_cancel"/>
<field name="signal">subflow.cancel</field>
</record>
<record id="trans_make_done_confirm" model="workflow.transition">
<field name="act_from" ref="act_make_done"/>
<field name="act_to" ref="act_cancel"/>
<field name="condition">check_move_cancel()</field>
<record id="trans_produce_make_done" model="workflow.transition">
<field name="act_from" ref="act_produce"/>
<field name="act_to" ref="mrp_procurement.act_make_done"/>
<field name="signal">subflow.done</field>
</record>
</data>
</openerp>
+48 -51
View File
@@ -1,43 +1,16 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_procurementprocess0" model="process.process">
<field eval="&quot;&quot;&quot;Procurement&quot;&quot;&quot;" name="name"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="1" name="active"/>
</record>
<!--
Process Node
-->
<record id="process_node_stockproduct1" model="process.node">
<record id="process_node_procureproducts0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;For stockable products and consumables&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Stockable Product&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="mrp.process_process_stockableproductprocess0"/>
<field name="subflow_id" ref="process_process_procurementprocess0"/>
<field name="model_id" ref="mrp_procurement.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;The way to procurement depends on the product type.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Procure Products&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_serviceproduct1" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;For Services.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Service&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="mrp.process_process_serviceproductprocess0"/>
<field name="subflow_id" ref="process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_productionorder0" model="process.node">
@@ -46,31 +19,31 @@
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Drives the procurement orders for raw material.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Production Order&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_procurementprocess0"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'picking_except', 'confirmed', 'ready', 'in_production', 'cancel', 'done')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_minimumstockrule0" model="process.node">
<field name="menu_id" ref="mrp.menu_action_orderpoint_form"/>
<field name="model_id" ref="mrp.model_stock_warehouse_orderpoint"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Linked to the 'Minimum stock rule' supplying method.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Minimum Stock&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_procurementprocess0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_procureproducts0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;The way to procurement depends on the product type.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Procure Products&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="process_process_procurementprocess0"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_minimumstockrule0" model="process.node">
<field name="menu_id" ref="mrp.menu_action_orderpoint_form"/>
<field name="model_id" ref="mrp_procurement.model_stock_warehouse_orderpoint"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Linked to the 'Minimum stock rule' supplying method.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Minimum Stock&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_stockproduct0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
@@ -79,10 +52,22 @@
<field eval="&quot;&quot;&quot;Product type is Stockable or Consumable.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Stockable Product&quot;&quot;&quot;" name="name"/>
<field name="subflow_id" ref="process_process_stockableproductprocess0"/>
<field name="process_id" ref="process_process_procurementprocess0"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_stockproduct1" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;For stockable products and consumables&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Stockable Product&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="mrp.process_process_stockableproductprocess0"/>
<field name="subflow_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_serviceproduct0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
@@ -91,10 +76,22 @@
<field eval="&quot;&quot;&quot;Product type is service&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Service&quot;&quot;&quot;" name="name"/>
<field name="subflow_id" ref="process_process_serviceproductprocess0"/>
<field name="process_id" ref="process_process_procurementprocess0"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="0" name="flow_start"/>
</record>
<record id="process_node_serviceproduct1" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;For Services.&quot;&quot;&quot;" name="note"/>
<field eval="&quot;&quot;&quot;Service&quot;&quot;&quot;" name="name"/>
<field name="process_id" ref="mrp.process_process_serviceproductprocess0"/>
<field name="subflow_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'confirmed', 'cancel', 'exception', 'running', 'done', 'waiting')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_purchaseprocure0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
@@ -102,14 +99,14 @@
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Procurement Orders&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;For purchased material&quot;&quot;&quot;" name="note"/>
<field name="subflow_id" ref="process_process_procurementprocess0"/>
<field name="subflow_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field name="process_id" ref="purchase.process_process_purchaseprocess0"/>
<field eval="1" name="flow_start"/>
</record>
<record id="process_node_productminimumstockrule0" model="process.node">
<field name="menu_id" ref="mrp.menu_action_orderpoint_form"/>
<field name="model_id" ref="mrp.model_stock_warehouse_orderpoint"/>
<field name="model_id" ref="mrp_procurement.model_stock_warehouse_orderpoint"/>
<field eval="&quot;&quot;&quot;state&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Minimum Stock&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Automatic procurement rule&quot;&quot;&quot;" name="note"/>
-9
View File
@@ -1,7 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_mrp_workcenter","mrp.workcenter","model_mrp_workcenter","mrp.group_mrp_user",1,0,0,0
"access_mrp_property_group","mrp.property.group","model_mrp_property_group","mrp.group_mrp_user",1,0,0,0
"access_mrp_property","mrp.property","model_mrp_property","mrp.group_mrp_user",1,0,0,0
"access_mrp_routing","mrp.routing","model_mrp_routing","mrp.group_mrp_user",1,0,0,0
"access_mrp_routing_workcenter","mrp.routing.workcenter","model_mrp_routing_workcenter","mrp.group_mrp_user",1,0,0,0
"access_mrp_bom","mrp.bom","model_mrp_bom","mrp.group_mrp_user",1,0,0,0
@@ -10,11 +8,7 @@
"access_mrp_production_workcenter_line","mrp.production.workcenter.line","model_mrp_production_workcenter_line","mrp.group_mrp_user",1,1,1,1
"access_mrp_production_product_line","mrp.production.product.line","model_mrp_production_product_line","mrp.group_mrp_user",1,1,1,1
"access_mrp_procurement","mrp.procurement","model_mrp_procurement","mrp.group_mrp_user",1,1,1,1
"access_stock_warehouse_orderpoint","stock.warehouse.orderpoint","model_stock_warehouse_orderpoint","mrp.group_mrp_user",1,0,0,0
"access_stock_warehouse_orderpoint_manager","stock.warehouse.orderpoint.manager","model_stock_warehouse_orderpoint","mrp.group_mrp_manager",1,1,1,1
"access_mrp_workcenter_manager","mrp.workcenter.manager","model_mrp_workcenter","mrp.group_mrp_user",1,1,1,1
"access_mrp_property_group_manager","mrp.property.group.manager","model_mrp_property_group","mrp.group_mrp_user",1,1,1,1
"access_mrp_property_manager","mrp.property.manager","model_mrp_property","mrp.group_mrp_user",1,1,1,1
"access_mrp_routing_manager","mrp.routing.manager","model_mrp_routing","mrp.group_mrp_manager",1,1,1,1
"access_mrp_routing_workcenter_manager","mrp.routing.workcenter.manager","model_mrp_routing_workcenter","mrp.group_mrp_manager",1,1,1,1
"access_mrp_bom_manager","mrp.bom.manager","model_mrp_bom","mrp.group_mrp_manager",1,1,1,1
@@ -32,10 +26,7 @@
"access_mrp_production_stock_worker","mrp.production stock_worker","model_mrp_production","stock.group_stock_user",1,0,0,0
"access_mrp_installer","mrp.installer","model_mrp_installer","mrp.group_mrp_user",1,0,0,0
"access_mrp_product_produce","mrp.product.produce","model_mrp_product_produce","mrp.group_mrp_user",1,0,0,0
"access_mrp_make_procurement","make.procurement","model_make_procurement","mrp.group_mrp_user",1,0,0,0
"access_mrp_change_production_qty","change.production.qty","model_change_production_qty","mrp.group_mrp_user",1,0,0,0
"access_mrp_procurement_compute_all","mrp.procurement.compute.all","model_mrp_procurement_compute_all","mrp.group_mrp_user",1,0,0,0
"access_mrp_procurement_orderpoint_compute","mrp.procurement.orderpoint.compute","model_mrp_procurement_orderpoint_compute","mrp.group_mrp_user",1,0,0,0
"access_mrp_production_order","mrp.production.order","model_mrp_production_order","mrp.group_mrp_user",1,0,0,0
"access_report_workcenter_load","report.workcenter.load","model_report_workcenter_load","mrp.group_mrp_manager",1,0,0,0
"access_report_mrp_inout","report.mrp.inout","model_report_mrp_inout","mrp.group_mrp_manager",1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_mrp_workcenter mrp.workcenter model_mrp_workcenter mrp.group_mrp_user 1 0 0 0
access_mrp_property_group mrp.property.group model_mrp_property_group mrp.group_mrp_user 1 0 0 0
access_mrp_property mrp.property model_mrp_property mrp.group_mrp_user 1 0 0 0
3 access_mrp_routing mrp.routing model_mrp_routing mrp.group_mrp_user 1 0 0 0
4 access_mrp_routing_workcenter mrp.routing.workcenter model_mrp_routing_workcenter mrp.group_mrp_user 1 0 0 0
5 access_mrp_bom mrp.bom model_mrp_bom mrp.group_mrp_user 1 0 0 0
8 access_mrp_production_workcenter_line mrp.production.workcenter.line model_mrp_production_workcenter_line mrp.group_mrp_user 1 1 1 1
9 access_mrp_production_product_line mrp.production.product.line model_mrp_production_product_line mrp.group_mrp_user 1 1 1 1
10 access_mrp_procurement mrp.procurement model_mrp_procurement mrp.group_mrp_user 1 1 1 1
access_stock_warehouse_orderpoint stock.warehouse.orderpoint model_stock_warehouse_orderpoint mrp.group_mrp_user 1 0 0 0
access_stock_warehouse_orderpoint_manager stock.warehouse.orderpoint.manager model_stock_warehouse_orderpoint mrp.group_mrp_manager 1 1 1 1
11 access_mrp_workcenter_manager mrp.workcenter.manager model_mrp_workcenter mrp.group_mrp_user 1 1 1 1
access_mrp_property_group_manager mrp.property.group.manager model_mrp_property_group mrp.group_mrp_user 1 1 1 1
access_mrp_property_manager mrp.property.manager model_mrp_property mrp.group_mrp_user 1 1 1 1
12 access_mrp_routing_manager mrp.routing.manager model_mrp_routing mrp.group_mrp_manager 1 1 1 1
13 access_mrp_routing_workcenter_manager mrp.routing.workcenter.manager model_mrp_routing_workcenter mrp.group_mrp_manager 1 1 1 1
14 access_mrp_bom_manager mrp.bom.manager model_mrp_bom mrp.group_mrp_manager 1 1 1 1
26 access_mrp_production_stock_worker mrp.production stock_worker model_mrp_production stock.group_stock_user 1 0 0 0
27 access_mrp_installer mrp.installer model_mrp_installer mrp.group_mrp_user 1 0 0 0
28 access_mrp_product_produce mrp.product.produce model_mrp_product_produce mrp.group_mrp_user 1 0 0 0
access_mrp_make_procurement make.procurement model_make_procurement mrp.group_mrp_user 1 0 0 0
29 access_mrp_change_production_qty change.production.qty model_change_production_qty mrp.group_mrp_user 1 0 0 0
access_mrp_procurement_compute_all mrp.procurement.compute.all model_mrp_procurement_compute_all mrp.group_mrp_user 1 0 0 0
access_mrp_procurement_orderpoint_compute mrp.procurement.orderpoint.compute model_mrp_procurement_orderpoint_compute mrp.group_mrp_user 1 0 0 0
30 access_mrp_production_order mrp.production.order model_mrp_production_order mrp.group_mrp_user 1 0 0 0
31 access_report_workcenter_load report.workcenter.load model_report_workcenter_load mrp.group_mrp_manager 1 0 0 0
32 access_report_mrp_inout report.mrp.inout model_report_mrp_inout mrp.group_mrp_manager 1 0 0 0
-14
View File
@@ -16,20 +16,6 @@
</record>
<!-- Multi -->
<record model="ir.rule" id="mrp_procurement_rule">
<field name="name">mrp_procurement multi-company</field>
<field name="model_id" search="[('model','=','mrp.procurement')]" model="ir.model"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
</record>
<record model="ir.rule" id="stock_warehouse_orderpoint_rule">
<field name="name">stock_warehouse.orderpoint multi-company</field>
<field name="model_id" search="[('model','=','stock.warehouse.orderpoint')]" model="ir.model"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
</record>
<record model="ir.rule" id="mrp_production_rule">
<field name="name">mrp_production multi-company</field>
<field name="model_id" search="[('model','=','mrp.production')]" model="ir.model"/>
-68
View File
@@ -27,74 +27,6 @@ import ir
import netsvc
import time
class stock_warehouse_orderpoint(osv.osv):
"""
Defines Minimum stock rules.
"""
_name = "stock.warehouse.orderpoint"
_description = "Orderpoint minimum rule"
_columns = {
'name': fields.char('Name', size=32, required=True),
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the orderpoint without removing it."),
'logic': fields.selection([('max','Order to Max'),('price','Best price (not yet active!)')], 'Reordering Mode', required=True),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', required=True),
'location_id': fields.many2one('stock.location', 'Location', required=True),
'product_id': fields.many2one('product.product', 'Product', required=True, ondelete='cascade', domain=[('type','=','product')]),
'product_uom': fields.many2one('product.uom', 'Product UOM', required=True ),
'product_min_qty': fields.float('Min Quantity', required=True,
help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
"a procurement to bring the virtual stock to the Max Quantity."),
'product_max_qty': fields.float('Max Quantity', required=True,
help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
"a procurement to bring the virtual stock to the Max Quantity."),
'qty_multiple': fields.integer('Qty Multiple', required=True,
help="The procurement quantity will by rounded up to this multiple."),
'procurement_id': fields.many2one('mrp.procurement', 'Latest procurement'),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'active': lambda *a: 1,
'logic': lambda *a: 'max',
'qty_multiple': lambda *a: 1,
'name': lambda x,y,z,c: x.pool.get('ir.sequence').get(y,z,'mrp.warehouse.orderpoint') or '',
'product_uom': lambda sel, cr, uid, context: context.get('product_uom', False),
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.warehouse.orderpoint', context=c)
}
def onchange_warehouse_id(self, cr, uid, ids, warehouse_id, context={}):
""" Finds location id for changed warehouse.
@param warehouse_id: Changed id of warehouse.
@return: Dictionary of values.
"""
if warehouse_id:
w = self.pool.get('stock.warehouse').browse(cr, uid, warehouse_id, context)
v = {'location_id': w.lot_stock_id.id}
return {'value': v}
return {}
def onchange_product_id(self, cr, uid, ids, product_id, context={}):
""" Finds UoM for changed product.
@param product_id: Changed id of product.
@return: Dictionary of values.
"""
if product_id:
prod = self.pool.get('product.product').browse(cr,uid,product_id)
v = {'product_uom': prod.uom_id.id}
return {'value': v}
return {}
def copy(self, cr, uid, id, default=None,context={}):
if not default:
default = {}
default.update({
'name': self.pool.get('ir.sequence').get(cr, uid, 'mrp.warehouse.orderpoint') or '',
})
return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context)
stock_warehouse_orderpoint()
class StockMove(osv.osv):
_inherit = 'stock.move'
+234
View File
@@ -0,0 +1,234 @@
-
In order to test the mrp phantom bom type in OpenERP, I will create products
and then I will create Phantom bom structure for those products.
-
I create the products required to produce some orange juices: Oranges, Sugar and Water.
-
!record {model: product.uom, id: product_uom_litre0}:
category_id: product.product_uom_categ_kgm
factor: 1.0
name: Litre
rounding: 0.01
-
!record {model: product.product, id: product_product_orangejuice0}:
categ_id: product.cat1
name: Orange Juice
procure_method: make_to_order
supply_method: produce
type: product
uom_id: product_uom_litre0
uom_po_id: product_uom_litre0
-
!record {model: product.product, id: product_product_orange0}:
categ_id: product.cat1
name: Orange
procure_method: make_to_stock
seller_ids:
- delay: 1
name: base.res_partner_asus
qty: 1.0
supply_method: buy
type: product
uom_id: product.product_uom_kgm
uom_po_id: product.product_uom_kgm
-
!record {model: product.product, id: product_product_sugar0}:
categ_id: product.cat1
name: Sugar
procure_method: make_to_stock
seller_ids:
- delay: 1
name: base.res_partner_desertic_hispafuentes
qty: 2.0
supply_method: buy
type: product
uom_id: product.product_uom_kgm
uom_po_id: product.product_uom_kgm
-
!record {model: product.product, id: product_product_water0}:
categ_id: product.cat1
name: Water
procure_method: make_to_stock
supply_method: buy
type: consu
uom_id: product_uom_litre0
uom_po_id: product_uom_litre0
-
I define the BoM to produce an orange juice
-
!record {model: mrp.bom, id: mrp_bom_orangejuice0}:
company_id: base.main_company
name: Orange Juice
product_efficiency: 1.0
product_id: product_product_orangejuice0
product_qty: 1.0
product_uom: product_uom_litre0
type: phantom
-
!record {model: mrp.bom, id: mrp_bom_orangejuice0}:
bom_lines:
- bom_id: mrp_bom_orangejuice0
company_id: base.main_company
name: Orange
product_efficiency: 1.0
product_id: product_product_orange0
product_qty: 0.5
product_uom: product.product_uom_kgm
type: normal
- bom_id: mrp_bom_orangejuice0
company_id: base.main_company
name: Sugar
product_efficiency: 1.0
product_id: product_product_sugar0
product_qty: 0.02
product_uom: product.product_uom_kgm
type: normal
- bom_id: mrp_bom_orangejuice0
company_id: base.main_company
name: Water
product_efficiency: 1.0
product_id: product_product_water0
product_qty: 0.80000000000000004
product_uom: product_uom_litre0
type: normal
-
I define Minimum stock rules for my stockable products orange and sugar
-
!record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
company_id: base.main_company
location_id: stock.stock_location_stock
logic: max
name: OP/00002
product_id: product_product_orange0
product_max_qty: 10.0
product_min_qty: 5.0
product_uom: product.product_uom_kgm
qty_multiple: 1
warehouse_id: stock.warehouse0
-
!record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op1}:
company_id: base.main_company
location_id: stock.stock_location_stock
logic: max
name: OP/00003
product_id: product_product_sugar0
product_max_qty: 4.0
product_min_qty: 2.0
product_uom: product.product_uom_kgm
qty_multiple: 1
warehouse_id: stock.warehouse0
-
I want to produce 100 litres of Orange juice. I am creating a manufacturing order for this.
I want to see how much quantities of sub products I need, to produce the Orange juice.
-
I compute the data. I get the bill of material of Orange juice and list of
scheduled products according to my bom.
-
!record {model: mrp.production, id: mrp_production_mo0}:
company_id: base.main_company
date_planned: '2010-04-16 15:53:36'
location_dest_id: stock.stock_location_output
location_src_id: stock.stock_location_stock
name: MO/00002
product_id: product_product_orangejuice0
product_qty: 100.0
product_uom: product_uom_litre0
-
Creating an mrp.production record. Computing Bills of materials.
-
!record {model: mrp.production, id: mrp_production_mo0}:
bom_id: mrp.mrp_bom_orangejuice0
company_id: base.main_company
date_planned: '2010-04-16 15:53:36'
location_dest_id: stock.stock_location_output
location_src_id: stock.stock_location_stock
name: MO/00002
product_id: mrp.product_product_orangejuice0
product_lines:
- name: Orange
product_id: mrp.product_product_orange0
product_qty: 50.0
product_uom: product.product_uom_kgm
production_id: mrp_production_mo0
- name: Sugar
product_id: mrp.product_product_sugar0
product_qty: 2.0
product_uom: product.product_uom_kgm
production_id: mrp_production_mo0
- name: Water
product_id: mrp.product_product_water0
product_qty: 80.0
product_uom: mrp.product_uom_litre0
production_id: mrp_production_mo0
product_qty: 100.0
product_uom: mrp.product_uom_litre0
-
I confirm the order.
-
!workflow {model: mrp.production, action: button_confirm, ref: mrp_production_mo0}
-
I am checking Procurement orders. There are 3 orders generated for Oranges, Sugar and Water.
-
!python {model: mrp.procurement}: |
from tools.translate import _
proc_ids = self.search(cr, uid, [('origin','=',':MO/00002')])
assert proc_ids, _('No Procurements!')
-
The scheduler runs.
-
!function {model: mrp.procurement, name: run_scheduler}:
- model: mrp.procurement
search: "[('origin','=',':MO/00002')]"
-
I am checking Internal picking. I see one picking for Orange juice and its
stock moves for Oranges, Sugar and Water made correctly.
-
!python {model: stock.picking}: |
from tools.translate import _
pick_ids = self.search(cr, uid, [('origin','=',':MO/00002'),('type','=','internal')])
assert pick_ids, _('No Internal Pickings!')
-
According to minimum stock rules. I have 2 purchase orders for
Sugar with 6 Kg from Axelor and Orange 60 Kg from ASUStek.
-
I confirm the purchase order of Sugar and Orange.
-
!python {model: purchase.order}: |
from tools.translate import _
import netsvc
purch_ids = self.search(cr, uid, [('origin','in',['SCHEDULER','OP/00002','OP/00003'])])
assert purch_ids, _('No Purchase Orders were made!')
wf_service = netsvc.LocalService("workflow")
for p_id in purch_ids:
wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_confirm', cr)
-
I get the approval from both the suppliers. So I approve my purchase orders.
-
!python {model: purchase.order}: |
from tools.translate import _
import netsvc
purch_ids = self.search(cr, uid, [('origin','in',['SCHEDULER','OP/00002','OP/00003']),('state','=','confirmed')])
assert purch_ids, _('No Confirmed Purchase Orders found!')
wf_service = netsvc.LocalService("workflow")
for p_id in purch_ids:
wf_service.trg_validate(uid, 'purchase.order', p_id, 'purchase_approve', cr)
-
I see two incoming pickings for Orange and Sugar.
-
!python {model: stock.picking}: |
from tools.translate import _
pick_ids = self.search(cr, uid, [('origin','in',['PO00001:SCHEDULER','PO00002:SCHEDULER','PO00003:OP/00002','PO00004:OP/00003']),('type','=','in')])
assert pick_ids, _('No Incoming Shipments found!')
-
I receive both the products. My incoming pickings are done.
-
!record {model: stock.partial.picking, id: stock_partial_picking0}:
date: '2010-04-30 16:53:36'
partner_id: base.res_partner_asus
address_id: base.res_partner_address_tang
-
!python {model: stock.partial.picking}: |
pick_obj = self.pool.get('stock.picking')
picking_ids = pick_obj.search(cr, uid, [('origin','in',['PO00001:SCHEDULER','PO00002:SCHEDULER','PO00003:OP/00002','PO00004:OP/00003']),('type','=','in')])
self.do_partial(cr, uid, [1],context={'active_ids': picking_ids})
+139
View File
@@ -0,0 +1,139 @@
-
In order to test the manufacturing order working with procurements I will use
some products with different supply method and procurement method, also check
the bills of material for the products.
-
I am creating one manufacturing order.
-
!record {model: mrp.production, id: mrp_production_mo0}:
bom_id: mrp.mrp_bom_9
routing_id: mrp.mrp_routing_0
company_id: base.main_company
date_planned: '2010-05-06 14:55:52'
location_dest_id: stock.stock_location_stock
location_src_id: stock.stock_location_stock
name: MO/00004
product_id: product.product_product_pc1
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos_qty: 0.0
-
Creating a mrp.production.workcenter.line record
-
!record {model: mrp.production.workcenter.line, id: mrp_production_workcenter_line_assemblyline0}:
cycle: 5.0
hour: 10.0
name: Assembly Line 1
production_id: mrp_production_mo0
sequence: 0.0
workcenter_id: mrp.mrp_workcenter_0
-
Creating a mrp.production.product.line record
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_regularprocessorconfig0}:
name: Regular processor config
product_id: product.product_product_cpu_gen
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
Creating a mrp.production.product.line record
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_hddseagategb0}:
name: HDD Seagate 7200.8 80GB
product_id: product.product_product_hdd1
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
Creating a mrp.production.product.line record
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_atxmidsizetower0}:
name: ATX Mid-size Tower
product_id: product.product_product_tow1
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
Creating a mrp.production.product.line record
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_mouse0}:
name: Mouse
product_id: product.product_product_25
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
Creating a mrp.production.product.line record
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_keyboard0}:
name: Keyboard
product_id: product.product_product_24
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
I confirm the order.
-
!workflow {model: mrp.production, action: button_confirm, ref: mrp_production_mo0}
-
I am checking Procurement orders.
-
!python {model: mrp.procurement}: |
from tools.translate import _
proc_ids = self.search(cr, uid, [('origin','=',':MO/00004')])
assert proc_ids, _('No Procurements!')
-
The scheduler runs.
-
!function {model: mrp.procurement, name: run_scheduler}:
- model: mrp.procurement
search: "[('origin','=',':MO/00004')]"
-
I am checking Internal picking.
-
!python {model: stock.picking}: |
from tools.translate import _
pick_ids = self.search(cr, uid, [('origin','=',':MO/00004'),('type','=','internal')])
assert pick_ids, _('No Internal Pickings!')
-
I see that there is a manufacturing order for the subproduct of PC1 with ready state.
-
!python {model: mrp.production}: |
from tools.translate import _
order_ids = self.search(cr, uid, [('origin','=',':MO/00004'),('state','=','ready')])
assert order_ids, _('No manufacturing order!')
-
I start producing that product first. So I marked it as started.
-
!record {model: mrp.product.produce, id: mrp_product_produce0}:
product_qty: 5.00
mode: 'consume_produce'
-
!python {model: mrp.product.produce}: |
prod_obj = self.pool.get('mrp.production')
prod_ids = prod_obj.search(cr, uid, [('origin','=',':MO/00004')])
self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})
-
Now the manufacturing order for subproduct CPU_GEN is done. And manufacturing
order for PC1 is in ready state.
-
!python {model: mrp.production}: |
from tools.translate import _
prod_ids = self.search(cr, uid, [('origin','=',':MO/00004'),('state','=','done')])
assert prod_ids, _('Manufacturing order is yet not done!')
-
I start producing the product PC1.
-
!workflow {model: mrp.production, action: button_produce, ref: mrp_production_mo0}
-
!python {model: mrp.product.produce}: |
from tools.translate import _
prod_obj = self.pool.get('mrp.production')
prod_ids = prod_obj.search(cr, uid, [('product_id.default_code','=','PC1')])
self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})
-4
View File
@@ -20,14 +20,10 @@
##############################################################################
import mrp_product_produce
import orderpoint_procurement
import mrp_procurement
import schedulers_all
import mrp_price
import mrp_workcenter_load
#import mrp_track_prod
import change_production_qty
import make_procurement_product
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+29 -27
View File
@@ -56,33 +56,35 @@ class mrp_track_move(osv.osv_memory):
"""
res = super(mrp_track_move, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
record_id = context and context.get('active_id', False) or False
if record_id:
prod_obj = self.pool.get('mrp.production')
prod = prod_obj.browse(cr, uid, record_id)
try:
if prod.state != 'done':
res['arch'] = '''<form string="Track lines">
<label colspan="4" string="You can not split an unfinished production Output." />
<group col="2" colspan="4">
<button icon='gtk-cancel' special="cancel"
string="Exit" />
</group>
</form>
'''
else:
arch_lst = ['<form string="Track lines">', '<label colspan="4" string="The field on each line says whether this lot should be tracked or not." />']
for m in [line for line in prod.move_created_ids]:
quantity = m.product_qty
res['fields']['track%s' %m.id] = {'string' : m.product_id.name, 'type' : 'boolean', 'default' : lambda x,y,z: False}
arch_lst.append('<field name="track%s" />\n<newline />' %m.id)
arch_lst.append('<group col="2" colspan="4">')
arch_lst.append('<button icon=\'gtk-cancel\' special="cancel" string="Cancel" />')
arch_lst.append('<button name="track_lines" string="Track" colspan="1" type="object" icon="gtk-ok" />')
arch_lst.append('</group>')
arch_lst.append('</form>')
res['arch'] = '\n'.join(arch_lst)
except Exception,e:
return res
active_model = context.get('active_model')
if not record_id or (active_model and active_model != 'mrp.production'):
return res
prod_obj = self.pool.get('mrp.production')
prod = prod_obj.browse(cr, uid, record_id)
if prod.state != 'done':
res['arch'] = '''<form string="Track lines">
<label colspan="4" string="You can not split an unfinished production Output." />
<group col="2" colspan="4">
<button icon='gtk-cancel' special="cancel"
string="Exit" />
</group>
</form>
'''
else:
arch_lst = ['<form string="Track lines">', '<label colspan="4" string="The field on each line says whether this lot should be tracked or not." />']
for m in [line for line in prod.move_created_ids]:
quantity = m.product_qty
res['fields']['track%s' %m.id] = {'string' : m.product_id.name, 'type' : 'boolean', 'default' : lambda x,y,z: False}
arch_lst.append('<field name="track%s" />\n<newline />' %m.id)
arch_lst.append('<group col="2" colspan="4">')
arch_lst.append('<button icon=\'gtk-cancel\' special="cancel" string="Cancel" />')
arch_lst.append('<button name="track_lines" string="Track" colspan="1" type="object" icon="gtk-ok" />')
arch_lst.append('</group>')
arch_lst.append('</form>')
res['arch'] = '\n'.join(arch_lst)
return res
def track_lines(self, cr, uid, ids, context):
+25
View File
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import mrp_procurement
import wizard
import schedulers
import company
+52
View File
@@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
"name" : "Procurements",
"version" : "1.0",
"author" : "Tiny",
"website" : "http://www.openerp.com",
"category" : "Generic Modules/Production",
"depends" : ["base","process", "product", "stock"],
"description": """
This is the module for computing Procurements.
""",
'init_xml': [],
'update_xml': [
'security/ir.model.access.csv',
'security/mrp_procurement_security.xml',
'mrp_procurement_data.xml',
'wizard/make_procurement_view.xml',
'wizard/mrp_procurement_view.xml',
'wizard/orderpoint_procurement_view.xml',
'mrp_procurement_view.xml',
'wizard/schedulers_all_view.xml',
'mrp_procurement_workflow.xml',
'process/procurement_process.xml',
"company_view.xml",
],
# 'demo_xml': [],
'installable': True,
'active': False,
'certificate': '',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+38
View File
@@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv,fields
class company(osv.osv):
_inherit = 'res.company'
_columns = {
'schedule_range': fields.float('Scheduler Range', required=True,
help="This is the time frame analysed by the scheduler when "\
"computing procurements. All procurements that are not between "\
"today and today+range are skipped for futur computation."),
}
_defaults = {
'schedule_range': lambda *a: 80.0,
}
company()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="mrp_company" model="ir.ui.view">
<field name="name">res.company.mrp.config</field>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<page string="Configuration" position="inside">
<separator string="MRP &amp; Logistic Scheduler" colspan="4"/>
<field name="schedule_range"/>
</page>
</field>
</record>
</data>
</openerp>
+527
View File
@@ -0,0 +1,527 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from mx import DateTime
from osv import osv, fields
from tools.translate import _
import netsvc
import time
class mrp_property_group(osv.osv):
"""
Group of mrp properties.
"""
_name = 'mrp.property.group'
_description = 'Property Group'
_columns = {
'name': fields.char('Property Group', size=64, required=True),
'description': fields.text('Description'),
}
mrp_property_group()
class mrp_property(osv.osv):
"""
Properties of mrp.
"""
_name = 'mrp.property'
_description = 'Property'
_columns = {
'name': fields.char('Name', size=64, required=True),
'composition': fields.selection([('min','min'),('max','max'),('plus','plus')], 'Properties composition', required=True, help="Not used in computations, for information purpose only."),
'group_id': fields.many2one('mrp.property.group', 'Property Group', required=True),
'description': fields.text('Description'),
}
_defaults = {
'composition': lambda *a: 'min',
}
mrp_property()
# ------------------------------------------------------------------
# Procurement
# ------------------------------------------------------------------
#
# Produce, Buy or Find products and place a move
# then wizard for picking lists & move
#
class mrp_procurement(osv.osv):
"""
Procurement Orders
"""
_name = "mrp.procurement"
_description = "Procurement"
_order = 'priority,date_planned'
_columns = {
'name': fields.char('Reason', size=64, required=True, help='Procurement name.'),
'origin': fields.char('Source Document', size=64,
help="Reference of the document that created this Procurement.\n"
"This is automatically completed by Open ERP."),
'priority': fields.selection([('0','Not urgent'),('1','Normal'),('2','Urgent'),('3','Very Urgent')], 'Priority', required=True),
'date_planned': fields.datetime('Scheduled date', required=True),
'date_close': fields.datetime('Date Closed'),
'product_id': fields.many2one('product.product', 'Product', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'product_qty': fields.float('Quantity', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'product_uom': fields.many2one('product.uom', 'Product UoM', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'product_uos_qty': fields.float('UoS Quantity', states={'draft':[('readonly',False)]}, readonly=True),
'product_uos': fields.many2one('product.uom', 'Product UoS', states={'draft':[('readonly',False)]}, readonly=True),
'move_id': fields.many2one('stock.move', 'Reservation', ondelete='set null'),
'close_move': fields.boolean('Close Move at end', required=True),
'location_id': fields.many2one('stock.location', 'Location', required=True, states={'draft':[('readonly',False)]}, readonly=True),
'procure_method': fields.selection([('make_to_stock','from stock'),('make_to_order','on order')], 'Procurement Method', states={'draft':[('readonly',False)], 'confirmed':[('readonly',False)]},
readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \
" a make to order method."),
'note': fields.text('Note'),
'property_ids': fields.many2many('mrp.property', 'mrp_procurement_property_rel', 'procurement_id','property_id', 'Properties'),
'message': fields.char('Latest error', size=64, help="Exception occurred while computing procurement orders."),
'state': fields.selection([
('draft','Draft'),
('confirmed','Confirmed'),
('exception','Exception'),
('running','Running'),
('cancel','Cancel'),
('ready','Ready'),
('done','Done'),
('waiting','Waiting')], 'State', required=True,
help='When a procurement is created the state is set to \'Draft\'.\n If the procurement is confirmed, the state is set to \'Confirmed\'.\
\nAfter confirming the state is set to \'Running\'.\n If any exception arises in the order then the state is set to \'Exception\'.\n Once the exception is removed the state becomes \'Ready\'.\n It is in \'Waiting\'. state when the procurement is waiting for another one to finish.'),
'note': fields.text('Note'),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'state': lambda *a: 'draft',
'priority': lambda *a: '1',
'date_planned': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'close_move': lambda *a: 0,
'procure_method': lambda *a: 'make_to_order',
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.procurement', context=c)
}
def unlink(self, cr, uid, ids, context=None):
procurements = self.read(cr, uid, ids, ['state'])
unlink_ids = []
for s in procurements:
if s['state'] in ['draft','cancel']:
unlink_ids.append(s['id'])
else:
raise osv.except_osv(_('Invalid action !'), _('Cannot delete Procurement Order(s) which are in %s State!' % s['state']))
return osv.osv.unlink(self, cr, uid, unlink_ids, context=context)
def onchange_product_id(self, cr, uid, ids, product_id, context={}):
""" Finds UoM and UoS of changed product.
@param product_id: Changed id of product.
@return: Dictionary of values.
"""
if product_id:
w = self.pool.get('product.product').browse(cr, uid, product_id, context)
v = {
'product_uom': w.uom_id.id,
'product_uos': w.uos_id and w.uos_id.id or w.uom_id.id
}
return {'value': v}
return {}
def check_product(self, cr, uid, ids):
""" Checks product type.
@return: True or False
"""
for procurement in self.browse(cr, uid, ids):
if procurement.product_id.type in ('product', 'consu'):
return True
return False
def check_move_cancel(self, cr, uid, ids, context={}):
""" Checks if move is cancelled or not.
@return: True or False.
"""
res = True
ok = False
for procurement in self.browse(cr, uid, ids, context):
if procurement.move_id:
ok = True
if not procurement.move_id.state == 'cancel':
res = False
return res and ok
def check_move_done(self, cr, uid, ids, context={}):
""" Checks if move is done or not.
@return: True or False.
"""
res = True
for proc in self.browse(cr, uid, ids, context):
if proc.move_id:
if not proc.move_id.state == 'done':
res = False
return res
#
# This method may be overrided by objects that override mrp.procurment
# for computing their own purpose
#
def _quantity_compute_get(self, cr, uid, proc, context={}):
""" Finds sold quantity of product.
@param proc: Current procurement.
@return: Quantity or False.
"""
if proc.product_id.type == 'product':
if proc.move_id.product_uos:
return proc.move_id.product_uos_qty
return False
def _uom_compute_get(self, cr, uid, proc, context={}):
""" Finds UoS if product is Stockable Product.
@param proc: Current procurement.
@return: UoS or False.
"""
if proc.product_id.type == 'product':
if proc.move_id.product_uos:
return proc.move_id.product_uos.id
return False
#
# Return the quantity of product shipped/produced/served, wich may be
# different from the planned quantity
#
def quantity_get(self, cr, uid, id, context={}):
""" Finds quantity of product used in procurement.
@return: Quantity of product.
"""
proc = self.browse(cr, uid, id, context)
result = self._quantity_compute_get(cr, uid, proc, context)
if not result:
result = proc.product_qty
return result
def uom_get(self, cr, uid, id, context=None):
""" Finds UoM of product used in procurement.
@return: UoM of product.
"""
proc = self.browse(cr, uid, id, context)
result = self._uom_compute_get(cr, uid, proc, context)
if not result:
result = proc.product_uom.id
return result
def check_waiting(self, cr, uid, ids, context=[]):
""" Checks state of move.
@return: True or False
"""
for procurement in self.browse(cr, uid, ids, context=context):
if procurement.move_id and procurement.move_id.state == 'auto':
return True
return False
def check_produce_service(self, cr, uid, procurement, context=[]):
return True
def check_produce_product(self, cr, uid, procurement, context=[]):
""" Finds BoM of a product if not found writes exception message.
@param procurement: Current procurement.
@return: True or False.
"""
return True
def check_make_to_stock(self, cr, uid, ids, context={}):
""" Checks product type.
@return: True or False
"""
ok = True
for procurement in self.browse(cr, uid, ids, context=context):
if procurement.product_id.type == 'service':
ok = ok and self._check_make_to_stock_service(cr, uid, procurement, context)
else:
ok = ok and self._check_make_to_stock_product(cr, uid, procurement, context)
return ok
def check_produce(self, cr, uid, ids, context={}):
""" Checks product type.
@return: True or Product Id.
"""
res = True
user = self.pool.get('res.users').browse(cr, uid, uid)
for procurement in self.browse(cr, uid, ids):
if procurement.product_id.product_tmpl_id.supply_method <> 'produce':
if procurement.product_id.seller_ids:
partner = procurement.product_id.seller_ids[0].name
if user.company_id and user.company_id.partner_id:
if partner.id == user.company_id.partner_id.id:
return True
return False
if procurement.product_id.product_tmpl_id.type=='service':
res = res and self.check_produce_service(cr, uid, procurement, context)
else:
res = res and self.check_produce_product(cr, uid, procurement, context)
if not res:
return False
return res
def check_buy(self, cr, uid, ids):
""" Checks product type.
@return: True or Product Id.
"""
user = self.pool.get('res.users').browse(cr, uid, uid)
partner_obj = self.pool.get('res.partner')
for procurement in self.browse(cr, uid, ids):
if procurement.product_id.product_tmpl_id.supply_method <> 'buy':
return False
if not procurement.product_id.seller_ids:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('No supplier defined for this product !'), procurement.id))
return False
partner = procurement.product_id.seller_ids[0].name
if user.company_id and user.company_id.partner_id:
if partner.id == user.company_id.partner_id.id:
return False
address_id = partner_obj.address_get(cr, uid, [partner.id], ['delivery'])['delivery']
if not address_id:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('No address defined for the supplier'), procurement.id))
return False
return True
def test_cancel(self, cr, uid, ids):
""" Tests whether state of move is cancelled or not.
@return: True or False
"""
for record in self.browse(cr, uid, ids):
if record.move_id and record.move_id.state == 'cancel':
return True
return False
def action_confirm(self, cr, uid, ids, context={}):
""" Confirms procurement and writes exception message if any.
@return: True
"""
move_obj = self.pool.get('stock.move')
for procurement in self.browse(cr, uid, ids):
if procurement.product_qty <= 0.00:
raise osv.except_osv(_('Data Insufficient !'), _('Please check the Quantity of Procurement Order(s), it should not be less than 1!'))
if procurement.product_id.type in ('product', 'consu'):
if not procurement.move_id:
source = procurement.location_id.id
if procurement.procure_method == 'make_to_order':
source = procurement.product_id.product_tmpl_id.property_stock_procurement.id
id = move_obj.create(cr, uid, {
'name': 'PROC:' + procurement.name,
'location_id': source,
'location_dest_id': procurement.location_id.id,
'product_id': procurement.product_id.id,
'product_qty': procurement.product_qty,
'product_uom': procurement.product_uom.id,
'date_planned': procurement.date_planned,
'state': 'confirmed',
'company_id': procurement.company_id.id,
})
self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1})
else:
# TODO: check this
if procurement.procure_method == 'make_to_stock' and procurement.move_id.state in ('waiting',):
id = move_obj.write(cr, uid, [procurement.move_id.id], {'state':'confirmed'})
self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''})
return True
def action_move_assigned(self, cr, uid, ids, context={}):
""" Changes procurement state to Running and writes message.
@return: True
"""
self.write(cr, uid, ids, {'state': 'running', 'message': _('from stock: products assigned.')})
return True
def _check_make_to_stock_service(self, cr, uid, procurement, context={}):
return True
def _check_make_to_stock_product(self, cr, uid, procurement, context={}):
""" Checks procurement move state.
@param procurement: Current procurement.
@return: True or move id.
"""
ok = True
if procurement.move_id:
id = procurement.move_id.id
if not (procurement.move_id.state in ('done','assigned','cancel')):
ok = ok and self.pool.get('stock.move').action_assign(cr, uid, [id])
cr.execute('select count(id) from stock_warehouse_orderpoint where product_id=%s', (procurement.product_id.id,))
if not cr.fetchone()[0]:
cr.execute('update mrp_procurement set message=%s where id=%s', (_('from stock and no minimum orderpoint rule defined'), procurement.id))
return ok
def action_produce_assign_service(self, cr, uid, ids, context={}):
""" Changes procurement state to Running.
@return: True
"""
for procurement in self.browse(cr, uid, ids):
self.write(cr, uid, [procurement.id], {'state': 'running'})
return True
def action_produce_assign_product(self, cr, uid, ids, context={}):
""" This is action which call from workflow to assign production order to procurements
@return: True
"""
return 0
def action_po_assign(self, cr, uid, ids, context={}):
""" This is action which call from workflow to assign purchase order to procurements
@return: True
"""
return 0
def action_cancel(self, cr, uid, ids):
""" Cancels procurement and writes move state to Assigned.
@return: True
"""
todo = []
todo2 = []
move_obj = self.pool.get('stock.move')
for proc in self.browse(cr, uid, ids):
if proc.close_move:
if proc.move_id.state not in ('done', 'cancel'):
todo2.append(proc.move_id.id)
else:
if proc.move_id and proc.move_id.state == 'waiting':
todo.append(proc.move_id.id)
if len(todo2):
move_obj.action_cancel(cr, uid, todo2)
if len(todo):
move_obj.write(cr, uid, todo, {'state': 'assigned'})
self.write(cr, uid, ids, {'state': 'cancel'})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'mrp.procurement', id, cr)
return True
def action_check_finnished(self, cr, uid, ids):
return self.check_move_done(cr, uid, ids)
def action_check(self, cr, uid, ids):
""" Checks procurement move state whether assigned or done.
@return: True
"""
ok = False
for procurement in self.browse(cr, uid, ids):
if procurement.move_id.state == 'assigned' or procurement.move_id.state == 'done':
self.action_done(cr, uid, [procurement.id])
ok = True
return ok
def action_ready(self, cr, uid, ids):
""" Changes procurement state to Ready.
@return: True
"""
res = self.write(cr, uid, ids, {'state': 'ready'})
return res
def action_done(self, cr, uid, ids):
""" Changes procurement state to Done and writes Closed date.
@return: True
"""
move_obj = self.pool.get('stock.move')
for procurement in self.browse(cr, uid, ids):
if procurement.move_id:
if procurement.close_move and (procurement.move_id.state <> 'done'):
move_obj.action_done(cr, uid, [procurement.move_id.id])
res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')})
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'mrp.procurement', id, cr)
return res
def run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, context=None):
''' Runs through scheduler.
@param use_new_cursor: False or the dbname
'''
if not context:
context={}
self._procure_confirm(cr, uid, use_new_cursor=use_new_cursor, context=context)
self._procure_orderpoint_confirm(cr, uid, automatic=automatic,\
use_new_cursor=use_new_cursor, context=context)
mrp_procurement()
class stock_warehouse_orderpoint(osv.osv):
"""
Defines Minimum stock rules.
"""
_name = "stock.warehouse.orderpoint"
_description = "Orderpoint minimum rule"
_columns = {
'name': fields.char('Name', size=32, required=True),
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the orderpoint without removing it."),
'logic': fields.selection([('max','Order to Max'),('price','Best price (not yet active!)')], 'Reordering Mode', required=True),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', required=True),
'location_id': fields.many2one('stock.location', 'Location', required=True),
'product_id': fields.many2one('product.product', 'Product', required=True, ondelete='cascade', domain=[('type','=','product')]),
'product_uom': fields.many2one('product.uom', 'Product UOM', required=True ),
'product_min_qty': fields.float('Min Quantity', required=True,
help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
"a procurement to bring the virtual stock to the Max Quantity."),
'product_max_qty': fields.float('Max Quantity', required=True,
help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
"a procurement to bring the virtual stock to the Max Quantity."),
'qty_multiple': fields.integer('Qty Multiple', required=True,
help="The procurement quantity will by rounded up to this multiple."),
'procurement_id': fields.many2one('mrp.procurement', 'Latest procurement'),
'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'active': lambda *a: 1,
'logic': lambda *a: 'max',
'qty_multiple': lambda *a: 1,
'name': lambda x,y,z,c: x.pool.get('ir.sequence').get(y,z,'mrp.warehouse.orderpoint') or '',
'product_uom': lambda sel, cr, uid, context: context.get('product_uom', False),
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.warehouse.orderpoint', context=c)
}
def onchange_warehouse_id(self, cr, uid, ids, warehouse_id, context={}):
""" Finds location id for changed warehouse.
@param warehouse_id: Changed id of warehouse.
@return: Dictionary of values.
"""
if warehouse_id:
w = self.pool.get('stock.warehouse').browse(cr, uid, warehouse_id, context)
v = {'location_id': w.lot_stock_id.id}
return {'value': v}
return {}
def onchange_product_id(self, cr, uid, ids, product_id, context={}):
""" Finds UoM for changed product.
@param product_id: Changed id of product.
@return: Dictionary of values.
"""
if product_id:
prod = self.pool.get('product.product').browse(cr,uid,product_id)
v = {'product_uom': prod.uom_id.id}
return {'value': v}
return {}
def copy(self, cr, uid, id, default=None,context={}):
if not default:
default = {}
default.update({
'name': self.pool.get('ir.sequence').get(cr, uid, 'mrp.warehouse.orderpoint') or '',
})
return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context)
stock_warehouse_orderpoint()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record forcecreate="True" id="ir_cron_scheduler_action" model="ir.cron">
<field name="name">Run mrp scheduler</field>
<field eval="False" name="active"/>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall"/>
<field eval="'mrp.procurement'" name="model"/>
<field eval="'run_scheduler'" name="function"/>
<field eval="'(False,)'" name="args"/>
</record>
</data>
</openerp>
@@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--
Procurement
-->
<record id="mrp_procurement_tree_view" model="ir.ui.view">
<field name="name">mrp.procurement.tree</field>
<field name="model">mrp.procurement</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Procurement Lines" colors="red:state=='draft';black:state=='running';green:state=='confirmed';gray:state in ['done','cancel']">
<field name="date_planned" widget="date"/>
<field name="origin"/>
<field name="product_id"/>
<field name="product_qty"/>
<field name="product_uom" string="UOM"/>
<field name="procure_method"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="mrp_procurement_form_view" model="ir.ui.view">
<field name="name">mrp.procurement.form</field>
<field name="model">mrp.procurement</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Procurement">
<group col="2" colspan="2">
<separator colspan="2" string="References"/>
<field name="name" select="1" string="Procurement Reason"/>
<field name="origin"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Planification"/>
<field name="date_planned" select="1"/>
<field name="procure_method"/>
<field name="priority" groups="base.group_extended"/>
</group>
<notebook colspan="4">
<page string="Procurement Details">
<separator colspan="4" string="Product &amp; Location"/>
<field name="product_id" select="1" on_change="onchange_product_id(product_id)"/>
<field name="location_id" domain="[('usage','=','internal')]"/>
<field name="product_qty"/>
<field name="product_uom"/>
<field name="product_uos_qty" groups="product.group_uos"/>
<field name="product_uos" groups="product.group_uos"/>
<separator colspan="4" string="Status"/>
<field colspan="4" name="message" readonly="1"/>
<field name="state" readonly="1"/>
<group col="7" colspan="2">
<button name="button_confirm" states="draft" string="Confirm" icon="gtk-apply"/>
<button name="button_restart" states="exception" string="Retry" icon="gtk-convert"/>
<button name="button_cancel" states="draft,exception,waiting" string="Cancel" icon="gtk-cancel"/>
<button name="button_check" states="confirmed" string="Run Procurement" icon="gtk-media-play"/>
</group>
</page>
<page string="Extra Information">
<separator colspan="4" string="Details"/>
<field name="move_id" groups="base.group_extended"/>
<field name="date_close"/>
<field name="close_move" groups="base.group_extended"/>
<group colspan="4" groups="base.group_extended">
<separator colspan="4" string="Properties" />
<field colspan="4" name="property_ids" nolabel="1"/>
</group>
</page>
<page string="Notes">
<separator colspan="4" string="Note" />
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="view_mrp_procurement_filter" model="ir.ui.view">
<field name="name">mrp.procurement.select</field>
<field name="model">mrp.procurement</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Procurement">
<group col='10' colspan='4'>
<filter icon="terp-mrp" string="Current" domain="[('state','in',('draft','confirmed'))]" default="1" help="Procurement Orders in draft or open state."/>
<filter icon="terp-mrp" string="Exceptions" domain="[('state','=','exception')]" help="Procurement Orders with exceptions"/>
<filter icon="terp-mrp" string="Late"
domain="['&amp;', ('date_planned::date','&lt;', current_date), ('state', 'in', ('draft', 'confirmed'))]"
help="Procurement started late" />
<separator orientation="vertical"/>
<field name="name"/>
<field name="origin"/>
<field name="product_id" />
<field name="date_planned" widget="date"/>
<field name="state" />
</group>
<newline/>
<group expand="1" string="Group By" colspan="4" col="8">
<filter string="Product" icon="terp-mrp" domain="[]" context="{'group_by':'product_id'}"/>
<filter string="Reason" icon="terp-mrp" domain="[]" context="{'group_by':'name'}"/>
<filter string="Scheduled Date" icon="terp-mrp" domain="[]" context="{'group_by':'date_planned'}"/>
</group>
</search>
</field>
</record>
<record id="mrp_procurement_action" model="ir.actions.act_window">
<field name="name">Procurement Orders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="view_mrp_procurement_filter"/>
</record>
<record id="mrp_procurement_action3" model="ir.actions.act_window">
<field name="name">Procurements</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_mrp_procurement_filter"/>
<field name="domain">[]</field>
<field name="context">{}</field>
</record>
<record id="mrp_procurement_action5" model="ir.actions.act_window">
<field name="name">Procurement Exceptions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','exception')]</field>
</record>
<record id="mrp_procurement_action4" model="ir.actions.act_window">
<field name="name">Procurement Exceptions to Fix</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','exception'), ('message', '&lt;&gt;', '')]</field>
<field name="filter" eval="True"/>
</record>
<record id="mrp_procurement_action11" model="ir.actions.act_window">
<field name="name">Temporary Procurement Exceptions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.procurement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('state','=','exception'), ('message', '=', '')]</field>
</record>
<!-- Order Point -->
<record id="view_warehouse_orderpoint_tree" model="ir.ui.view">
<field name="name">stock.warehouse.orderpoint.tree</field>
<field name="model">stock.warehouse.orderpoint</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Minimum Stock Rules">
<field name="name"/>
<field name="warehouse_id"/>
<field name="location_id"/>
<field name="product_id"/>
<field name="product_uom"/>
<field name="product_min_qty"/>
<field name="product_max_qty"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="warehouse_orderpoint_search">
<field name="name">stock.warehouse.orderpoint.search</field>
<field name="model">stock.warehouse.orderpoint</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Minimum Stock Rules Search">
<group col="10" colspan="4">
<field name="name" select="1" />
<field name="warehouse_id" select="1" widget="selection"/>
<field name="location_id" select="1" />
<field name="company_id" select="1" widget="selection"/>
<field name="product_id" select="1"/>
</group>
<newline/>
<group expand="1" string="Group By..." colspan="4" col="10">
<filter string="Warehouse" icon="terp-stock" domain="[]" context="{'group_by':'warehouse_id'}"/>
<filter string="Location" icon="terp-stock" domain="[]" context="{'group_by':'location_id'}"/>
</group>
</search>
</field>
</record>
<record id="view_warehouse_orderpoint_form" model="ir.ui.view">
<field name="name">stock.warehouse.orderpoint.form</field>
<field name="model">stock.warehouse.orderpoint</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Minimum Stock Rules">
<group col="2" colspan="2">
<separator string="General Information" colspan="2" />
<field name="name" />
<field name="product_id" on_change="onchange_product_id(product_id)"/>
<field name="product_uom"/>
</group>
<group col="2" colspan="2">
<separator string="Locations" colspan="2" />
<field name="warehouse_id" on_change="onchange_warehouse_id(warehouse_id)" widget="selection"/>
<field name="location_id"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
</group>
<group col="2" colspan="2">
<separator string="Quantity Rules" colspan="2" />
<field name="product_min_qty"/>
<field name="product_max_qty"/>
<field name="qty_multiple"/>
</group>
<group col="2" colspan="2" groups="base.group_extended">
<separator string="Misc" colspan="2" />
<field name="procurement_id" readonly="1"/>
<field name="active" />
</group>
</form>
</field>
</record>
<record id="action_orderpoint_form" model="ir.actions.act_window">
<field name="name">Minimum Stock Rules</field>
<field name="res_model">stock.warehouse.orderpoint</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_warehouse_orderpoint_tree"/>
<field name="search_view_id" ref="warehouse_orderpoint_search" />
</record>
<act_window domain="[('warehouse_id', '=', active_id)]" id="act_stock_warehouse_2_stock_warehouse_orderpoint" name="Minimum Stock Rules" res_model="stock.warehouse.orderpoint" src_model="stock.warehouse"/>
<!-- add product_uom to context to be the default value when adding new orderpoints -->
<act_window
context="{'product_uom': locals().has_key('uom_id') and uom_id}"
domain="[('product_id', '=', active_id)]"
id="act_product_product_2_stock_warehouse_orderpoint"
name="Minimum Stock Rules"
res_model="stock.warehouse.orderpoint"
src_model="product.product"/>
</data>
</openerp>
@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Procurement -->
<record id="wkf_procurement" model="workflow">
<field name="name">mrp.procurement.basic</field>
<field name="osv">mrp.procurement</field>
<field name="on_create">True</field>
</record>
<record id="act_draft" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="flow_start">True</field>
<field name="name">draft</field>
</record>
<record id="act_cancel" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">cancel</field>
<field name="kind">function</field>
<field name="action">action_cancel()</field>
<field name="flow_stop">True</field>
</record>
<record id="act_confirm" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">confirm</field>
<field name="kind">function</field>
<field name="action">action_confirm()</field>
</record>
<record id="act_confirm_wait" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">confirm_wait</field>
<field name="kind">function</field>
<field name="action">write({'state':'exception'})</field>
</record>
<record id="act_confirm_mts" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">confirm_mts</field>
</record>
<record id="act_confirm_mto" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">confirm_mto</field>
</record>
<record id="act_make_to_stock" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">make_to_stock</field>
<field name="kind">function</field>
<field name="action">action_move_assigned()</field>
</record>
<!-- <record id="act_produce_check" model="workflow.activity">-->
<!-- <field name="wkf_id" ref="wkf_procurement"/>-->
<!-- <field name="name">produce_check</field>-->
<!-- </record>-->
<!-- <record id="act_produce_service" model="workflow.activity">-->
<!-- <field name="wkf_id" ref="wkf_procurement"/>-->
<!-- <field name="name">produce_service</field>-->
<!-- <field name="kind">function</field>-->
<!-- <field name="action">action_produce_assign_service()</field>-->
<!-- </record>-->
<record id="act_make_done" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">ready</field>
<field name="kind">function</field>
<field name="action">action_ready()</field>
</record>
<record id="act_wait_done" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="name">wait_done</field>
<field name="kind">function</field>
<field name="action">write({'state':'waiting'})</field>
</record>
<record id="act_done" model="workflow.activity">
<field name="wkf_id" ref="wkf_procurement"/>
<field name="flow_stop">True</field>
<field name="name">done</field>
<field name="kind">function</field>
<field name="action">action_done()</field>
</record>
<record id="trans_draft_confirm" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">button_confirm</field>
</record>
<record id="trans_confirm_cancel2" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_wait_done"/>
<field name="signal">button_wait_done</field>
<field name="condition">True</field>
</record>
<record id="trans_confirm_wait_done" model="workflow.transition">
<field name="act_from" ref="act_wait_done"/>
<field name="act_to" ref="act_done"/>
<field name="condition">check_move_done()</field>
<field name="trigger_model">stock.move</field>
<field name="trigger_expr_id">[move_id.id]</field>
</record>
<record id="trans_confirm_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_check</field>
<field name="condition">test_cancel()</field>
</record>
<record id="trans_confirm_confirm_wait" model="workflow.transition">
<field name="act_from" ref="act_confirm"/>
<field name="act_to" ref="act_confirm_wait"/>
<field name="signal">button_check</field>
<field name="condition">not test_cancel()</field>
</record>
<record id="trans_confirm_wait_confirm_mto" model="workflow.transition">
<field name="act_from" ref="act_confirm_wait"/>
<field name="act_to" ref="act_confirm_mto"/>
<field name="condition">procure_method=='make_to_order'</field>
</record>
<record id="trans_confirm_wait_confirm_mts" model="workflow.transition">
<field name="act_from" ref="act_confirm_wait"/>
<field name="act_to" ref="act_confirm_mts"/>
<field name="condition">procure_method=='make_to_stock'</field>
</record>
<record id="trans_confirm_mts_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirm_mts"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_waiting_cancel" model="workflow.transition">
<field name="act_from" ref="act_wait_done"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_mts_confirm" model="workflow.transition">
<field name="act_from" ref="act_confirm_mts"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">button_restart</field>
</record>
<record id="trans_confirm_mto_cancel" model="workflow.transition">
<field name="act_from" ref="act_confirm_mto"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_mto_confirm" model="workflow.transition">
<field name="act_from" ref="act_confirm_mto"/>
<field name="act_to" ref="act_confirm"/>
<field name="signal">button_restart</field>
</record>
<record id="trans_draft_cancel" model="workflow.transition">
<field name="act_from" ref="act_draft"/>
<field name="act_to" ref="act_cancel"/>
<field name="signal">button_cancel</field>
</record>
<record id="trans_confirm_mts_make_to_stock" model="workflow.transition">
<field name="act_from" ref="act_confirm_mts"/>
<field name="act_to" ref="act_make_to_stock"/>
<field name="condition">check_make_to_stock()</field>
</record>
<!-- <record id="trans_confirm_mto_produce_check" model="workflow.transition">-->
<!-- <field name="act_from" ref="act_confirm_mto"/>-->
<!-- <field name="act_to" ref="act_produce_check"/>-->
<!-- <field name="condition">check_produce()</field>-->
<!-- </record>-->
<!-- <record id="trans_product_check_produce_service" model="workflow.transition">-->
<!-- <field name="act_from" ref="act_produce_check"/>-->
<!-- <field name="act_to" ref="act_produce_service"/>-->
<!-- <field name="condition">not check_product()</field>-->
<!-- </record>-->
<record id="trans_make_to_stock_make_done" model="workflow.transition">
<field name="act_from" ref="act_make_to_stock"/>
<field name="act_to" ref="act_make_done"/>
<field name="condition">True</field>
<field name="trigger_model" eval="False"/>
<field name="trigger_expr_id" eval="False"/>
</record>
<!-- <record id="trans_produce_service_cancel" model="workflow.transition">-->
<!-- <field name="act_from" ref="act_produce_service"/>-->
<!-- <field name="act_to" ref="act_cancel"/>-->
<!-- <field name="signal">subflow.cancel</field>-->
<!-- </record>-->
<!-- <record id="trans_produce_service_make_done" model="workflow.transition">-->
<!-- <field name="act_from" ref="act_produce_service"/>-->
<!-- <field name="act_to" ref="act_make_done"/>-->
<!-- </record>-->
<record id="trans_make_done_done" model="workflow.transition">
<field name="act_from" ref="act_make_done"/>
<field name="act_to" ref="act_done"/>
<field name="condition">action_check_finnished()</field>
</record>
<record id="trans_make_done_confirm" model="workflow.transition">
<field name="act_from" ref="act_make_done"/>
<field name="act_to" ref="act_cancel"/>
<field name="condition">check_move_cancel()</field>
</record>
</data>
</openerp>
@@ -0,0 +1,21 @@
<?xml version="1.0" ?>
<openerp>
<data>
<!--
Process
-->
<record id="process_process_procurementprocess0" model="process.process">
<field eval="&quot;&quot;&quot;Procurement&quot;&quot;&quot;" name="name"/>
<field name="model_id" ref="mrp_procurement.model_mrp_procurement"/>
<field eval="1" name="active"/>
</record>
<!--
Process Node
-->
</data>
</openerp>
@@ -238,4 +238,5 @@ class mrp_procurement(osv.osv):
cr.close()
return {}
mrp_procurement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,9 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_mrp_property_group","mrp.property.group","model_mrp_property_group",,1,0,0,0
"access_mrp_property","mrp.property","model_mrp_property",,1,0,0,0
"access_mrp_procurement","mrp.procurement","model_mrp_procurement",,1,0,0,0
"access_stock_warehouse_orderpoint","stock.warehouse.orderpoint","model_stock_warehouse_orderpoint",,1,0,0,0
"access_mrp_procurement_compute_all","mrp.procurement.compute.all","model_mrp_procurement_compute_all",,1,0,0,0
"access_mrp_procurement_orderpoint_compute","mrp.procurement.orderpoint.compute","model_mrp_procurement_orderpoint_compute",,1,0,0,0
"access_mrp_make_procurement","make.procurement","model_make_procurement",,1,0,0,0
"access_mrp_make_procurement","mrp.procurement.compute","model_mrp_procurement_compute",,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_mrp_property_group mrp.property.group model_mrp_property_group 1 0 0 0
3 access_mrp_property mrp.property model_mrp_property 1 0 0 0
4 access_mrp_procurement mrp.procurement model_mrp_procurement 1 0 0 0
5 access_stock_warehouse_orderpoint stock.warehouse.orderpoint model_stock_warehouse_orderpoint 1 0 0 0
6 access_mrp_procurement_compute_all mrp.procurement.compute.all model_mrp_procurement_compute_all 1 0 0 0
7 access_mrp_procurement_orderpoint_compute mrp.procurement.orderpoint.compute model_mrp_procurement_orderpoint_compute 1 0 0 0
8 access_mrp_make_procurement make.procurement model_make_procurement 1 0 0 0
9 access_mrp_make_procurement mrp.procurement.compute model_mrp_procurement_compute 1 0 0 0
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="0">
<record model="ir.rule" id="mrp_procurement_rule">
<field name="name">mrp_procurement multi-company</field>
<field name="model_id" search="[('model','=','mrp.procurement')]" model="ir.model"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
</record>
<record model="ir.rule" id="stock_warehouse_orderpoint_rule">
<field name="name">stock_warehouse.orderpoint multi-company</field>
<field name="model_id" search="[('model','=','stock.warehouse.orderpoint')]" model="ir.model"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
</record>
</data>
</openerp>
+27
View File
@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import orderpoint_procurement
import mrp_procurement
import schedulers_all
import make_procurement_product
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -83,8 +83,8 @@ class make_procurement(osv.osv_memory):
wf_service.trg_validate(uid, 'mrp.procurement', procure_id, 'button_confirm', cr)
id2 = data_obj._get_id(cr, uid, 'mrp', 'mrp_procurement_tree_view')
id3 = data_obj._get_id(cr, uid, 'mrp', 'mrp_procurement_form_view')
id2 = data_obj._get_id(cr, uid, 'mrp_procurement', 'mrp_procurement_tree_view')
id3 = data_obj._get_id(cr, uid, 'mrp_procurement', 'mrp_procurement_form_view')
if id2:
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
@@ -30,8 +30,5 @@
key2="client_action_multi"
id="action_compute_schedulers"/>
<menuitem id="menu_mrp_scheduler" name="Schedulers" parent="base.menu_mrp_root" sequence="4"/>
<menuitem action="action_compute_schedulers" id="mrp_Sched_all" parent="mrp.menu_mrp_scheduler" sequence="90"/>
</data>
</openerp>
+1 -1
View File
@@ -115,7 +115,7 @@
<field name="invoiced"/>
</group>
<newline/>
<field colspan="4" name="tax_id" domain="[('parent_id','=',False),('type_tax_use','&gt;&gt;','purchase')]"/>
<field colspan="4" name="tax_id" domain="[('parent_id','=',False),('type_tax_use','&lt;&gt;','purchase')]"/>
</page>
<page string="History" groups="base.group_extended">
<field colspan="4" name="invoice_line_id" />
+17 -16
View File
@@ -57,23 +57,24 @@ class repair_cancel(osv.osv_memory):
@param context: A standard dictionary
@return: New arch of view.
"""
record_id = context and context.get('active_id', False) or False
res = super(repair_cancel, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
if record_id:
try:
repair_order = self.pool.get('mrp.repair').browse(cr, uid, record_id)
if not repair_order.invoiced:
res['arch'] = """ <form string="Cancel Repair" colspan="4">
<group col="2" colspan="2">
<label string="Do you want to continue?" colspan="4"/>
<separator colspan="4"/>
<button icon="gtk-cancel" special="cancel" string="No" readonly="0"/>
<button name="cancel_repair" string="Yes" type="object" icon="gtk-ok"/>
</group>
</form>
"""
except:
return res
record_id = context and context.get('active_id', False) or False
active_model = context.get('active_model')
if not record_id or (active_model and active_model != 'mrp.repair'):
return res
repair_order = self.pool.get('mrp.repair').browse(cr, uid, record_id)
if not repair_order.invoiced:
res['arch'] = """ <form string="Cancel Repair" colspan="4">
<group col="2" colspan="2">
<label string="Do you want to continue?" colspan="4"/>
<separator colspan="4"/>
<button icon="gtk-cancel" special="cancel" string="No" readonly="0"/>
<button name="cancel_repair" string="Yes" type="object" icon="gtk-ok"/>
</group>
</form>
"""
return res
repair_cancel()
+20 -18
View File
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-12-08 11:46+0000\n"
"PO-Revision-Date: 2010-01-26 11:01+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2010-05-07 15:09+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.com>\n"
"Language-Team: Estonian <et@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: 2010-04-17 04:21+0000\n"
"X-Launchpad-Export-Date: 2010-05-08 04:05+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: multi_company
@@ -27,22 +27,24 @@ msgstr ""
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !"
#. module: multi_company
#: constraint:product.template:0
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
msgstr ""
"Viga: vaikimisi mõõtühik ja ostu mõõtühik peavad olema samast kategooriast."
#. module: multi_company
#: constraint:res.partner:0
msgid "The VAT doesn't seem to be correct."
msgstr ""
msgstr "Käibemaksukohuslase numbris on viga"
#. module: multi_company
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Vigane mudeli nimi toimingu definitsioonis."
#. module: multi_company
#: model:res.company,overdue_msg:multi_company.res_company_odoo
@@ -64,7 +66,7 @@ msgstr ""
#. module: multi_company
#: field:multi_company.default,object_id:0
msgid "Object"
msgstr ""
msgstr "Objekt"
#. module: multi_company
#: model:ir.module.module,shortdesc:multi_company.module_meta_information
@@ -83,12 +85,12 @@ msgstr ""
#. module: multi_company
#: field:multi_company.default,company_id:0
msgid "Main Company"
msgstr ""
msgstr "Emaettevõte"
#. module: multi_company
#: view:multi_company.default:0
msgid "Condition"
msgstr ""
msgstr "Tingimus"
#. module: multi_company
#: help:multi_company.default,company_dest_id:0
@@ -98,17 +100,17 @@ msgstr ""
#. module: multi_company
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
msgstr "Vigane XML vaate arhitektuurile!"
#. module: multi_company
#: field:multi_company.default,name:0
msgid "Name"
msgstr ""
msgstr "Nimi"
#. module: multi_company
#: constraint:product.template:0
msgid "Error: UOS must be in a different category than the UOM"
msgstr ""
msgstr "Viga: TÜ kategooria peab erinema MÜ kategooriast"
#. module: multi_company
#: model:product.category,name:multi_company.Odoo1
@@ -118,7 +120,7 @@ msgstr ""
#. module: multi_company
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
msgstr ""
msgstr "Viga! Sa ei saa luua rekursiivseid ettevõtteid."
#. module: multi_company
#: help:multi_company.default,name:0
@@ -148,7 +150,7 @@ msgstr ""
#. module: multi_company
#: field:multi_company.default,expression:0
msgid "Expression"
msgstr ""
msgstr "Avaldis"
#. module: multi_company
#: model:product.template,name:multi_company.product_product_odoo1_product_template
@@ -158,17 +160,17 @@ msgstr ""
#. module: multi_company
#: field:multi_company.default,sequence:0
msgid "Sequence"
msgstr ""
msgstr "Tsükkel"
#. module: multi_company
#: constraint:product.category:0
msgid "Error ! You can not create recursive categories."
msgstr ""
msgstr "Viga! Sa ei saa luua rekursiivseid kategooriaid."
#. module: multi_company
#: constraint:product.product:0
msgid "Error: Invalid ean code"
msgstr ""
msgstr "Viga: Vigane EAN kood"
#. module: multi_company
#: help:multi_company.default,expression:0
@@ -184,9 +186,9 @@ msgstr ""
#: code:addons/multi_company/multi_company.py:0
#, python-format
msgid " (copy)"
msgstr ""
msgstr " (koopia)"
#. module: multi_company
#: view:multi_company.default:0
msgid "Matching"
msgstr ""
msgstr "Sobitamine"
@@ -64,6 +64,7 @@
<field name="name">OpenERP Editor</field>
<field name="login">editor_demo</field>
<field name="company_id" ref="res_company_oerp_editor"/>
<field name="company_ids" eval="[(4, ref('res_company_oerp_editor'))]"/>
<field name="groups_id" eval="[(6,0,[ref('base.group_user'),ref('sale.group_sale_user'),ref('project.group_project_user'),ref('account.group_account_invoice'),ref('base.group_extended')])]"/>
</record>
<record id="res_users_sales_demo_us" model="res.users">
@@ -71,6 +72,7 @@
<field name="name">OpenERP Salesman US</field>
<field name="login">sales_demo_us</field>
<field name="company_id" ref="res_company_oerp_us"/>
<field name="company_ids" eval="[(4, ref('res_company_oerp_us'))]"/>
<field name="groups_id" eval="[(6,0,[ref('base.group_user'),ref('sale.group_sale_user'),ref('project.group_project_user'),ref('account.group_account_invoice'),ref('base.group_extended')])]"/>
</record>
<record id="res_users_sales_demo_be" model="res.users">
@@ -78,6 +80,7 @@
<field name="name">OpenERP Salesman BE</field>
<field name="login">sales_demo_be</field>
<field name="company_id" ref="res_company_oerp_be"/>
<field name="company_ids" eval="[(4, ref('res_company_oerp_be'))]"/>
<field name="groups_id" eval="[(6,0,[ref('base.group_user'),ref('sale.group_sale_user'),ref('project.group_project_user'),ref('account.group_account_invoice'),ref('base.group_extended')])]"/>
</record>
<record id="res_users_sales_demo_in" model="res.users">
@@ -85,6 +88,7 @@
<field name="name">OpenERP Salesman IN</field>
<field name="login">sales_demo_in</field>
<field name="company_id" ref="res_company_oerp_in"/>
<field name="company_ids" eval="[(4, ref('res_company_oerp_in'))]"/>
<field name="groups_id" eval="[(6,0,[ref('base.group_user'),ref('sale.group_sale_user'),ref('project.group_project_user'),ref('account.group_account_invoice'),ref('base.group_extended')])]"/>
</record>
<record id="res_users_odoo_demo" model="res.users">
@@ -92,6 +96,7 @@
<field name="name">Odoo</field>
<field name="login">odoo_demo</field>
<field name="company_id" ref="res_company_odoo"/>
<field name="company_ids" eval="[(4, ref('res_company_odoo'))]"/>
<field name="groups_id" eval="[(6,0,[ref('base.group_user'),ref('sale.group_sale_user'),ref('project.group_project_user'),ref('account.group_account_invoice'),ref('base.group_extended')])]"/>
</record>
+53 -52
View File
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-26 05:24+0000\n"
"PO-Revision-Date: 2010-05-05 21:58+0000\n"
"PO-Revision-Date: 2010-05-07 10:06+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.com>\n"
"Language-Team: Estonian <et@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: 2010-05-06 04:04+0000\n"
"X-Launchpad-Export-Date: 2010-05-08 04:05+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: olap
@@ -401,7 +401,7 @@ msgstr ""
#. module: olap
#: model:ir.ui.menu,name:olap.menu_view_olap_application_form
msgid "Application"
msgstr ""
msgstr "Rakendus"
#. module: olap
#: wizard_field:olap.query_builder,exec,mdx_query_output:0
@@ -424,7 +424,7 @@ msgstr ""
#. module: olap
#: view:olap.warehouse.wizard:0
msgid "Warehouse"
msgstr ""
msgstr "Ladu"
#. module: olap
#: model:ir.actions.act_window,name:olap.action_olap_dimension_form
@@ -444,7 +444,7 @@ msgstr ""
#. module: olap
#: field:olap.fact.database,db_port:0
msgid "Database port"
msgstr ""
msgstr "Andmebaasi port"
#. module: olap
#: help:olap.parameters.config.wizard,host_port:0
@@ -463,7 +463,7 @@ msgstr ""
#: field:olap.query.logs,cube_id:0
#: field:olap.saved.query,cube_id:0
msgid "Cube"
msgstr ""
msgstr "Kuubik"
#. module: olap
#: field:olap.cube.table,available_table_ids:0
@@ -519,12 +519,12 @@ msgstr ""
#. module: olap
#: model:ir.ui.menu,name:olap.menu_bi_configuration
msgid "Configuration"
msgstr ""
msgstr "Seadistamine"
#. module: olap
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
msgstr "Vigane XML vaate arhitektuurile!"
#. module: olap
#: help:olap.parameters.config.wizard,host_name:0
@@ -563,7 +563,7 @@ msgstr ""
#: wizard_button:olap.query_builder,exec,end:0
#: wizard_button:olap.query_builder,ok,end:0
msgid "Cancel"
msgstr ""
msgstr "Katkesta"
#. module: olap
#: view:bi.load.db.wizard:0
@@ -583,7 +583,7 @@ msgstr ""
#. module: olap
#: field:olap.fact.database,loaded:0
msgid "Loaded"
msgstr ""
msgstr "Laaditud"
#. module: olap
#: help:olap.fact.database,db_name:0
@@ -600,7 +600,7 @@ msgstr ""
#: wizard_field:olap.query_builder,exec,dimension:0
#: wizard_field:olap.query_builder,ok,dimension:0
msgid "Dimension"
msgstr ""
msgstr "Mõõtmed"
#. module: olap
#: model:ir.model,name:olap.model_olap_application_table
@@ -628,7 +628,7 @@ msgstr ""
#. module: olap
#: field:olap.measure,measure_type:0
msgid "Measure Type"
msgstr ""
msgstr "Mõõdu tüüp"
#. module: olap
#: field:olap.database.tables,fact_database_id:0
@@ -643,7 +643,7 @@ msgstr ""
#. module: olap
#: field:olap.level,hierarchy_id:0
msgid "Hierarchy"
msgstr ""
msgstr "Hierarhia"
#. module: olap
#: selection:olap.schema,state:0
@@ -680,7 +680,7 @@ msgstr ""
#: view:olap.warehouse.wizard:0
#: field:olap.warehouse.wizard,query:0
msgid "Query"
msgstr ""
msgstr "Päring"
#. module: olap
#: view:olap.schema:0
@@ -696,7 +696,7 @@ msgstr ""
#: field:bi.load.db.wizard,db_name:0
#: wizard_field:olap.load.table,init,db_name:0
msgid "Database Name"
msgstr ""
msgstr "Andmebaasi nimi"
#. module: olap
#: field:olap.cube,measure_ids:0
@@ -713,7 +713,7 @@ msgstr ""
#. module: olap
#: field:olap.cube,dimension_ids:0
msgid "Dimensions"
msgstr ""
msgstr "Dimensioonid"
#. module: olap
#: model:ir.model,name:olap.model_olap_cube
@@ -731,7 +731,7 @@ msgstr ""
#. module: olap
#: model:ir.ui.menu,name:olap.menu_view_olap_application_field_form
msgid "Application Field"
msgstr ""
msgstr "Rakenduse väli"
#. module: olap
#: model:ir.model,name:olap.model_olap_dimension
@@ -742,7 +742,7 @@ msgstr ""
#. module: olap
#: field:olap.application.field,name:0
msgid "Application field name"
msgstr ""
msgstr "Rakkenduse välja nimi"
#. module: olap
#: view:olap.fact.database:0
@@ -777,19 +777,19 @@ msgstr ""
#. module: olap
#: model:ir.actions.wizard,name:olap.bi_load_column
msgid "Open Columns"
msgstr ""
msgstr "Ava veerud"
#. module: olap
#: model:ir.ui.menu,name:olap.menu_view_olap_database_columns_form
#: field:olap.database.tables,columns:0
msgid "Columns"
msgstr ""
msgstr "Veerud"
#. module: olap
#: model:ir.actions.wizard,name:olap.bi_test_connection
#: view:olap.fact.database:0
msgid "Test Connection"
msgstr ""
msgstr "Testi ühendust"
#. module: olap
#: model:ir.actions.act_window,name:olap.action_olap_measure_form
@@ -801,7 +801,7 @@ msgstr ""
#: wizard_button:olap.application.configuration,init,configure:0
#: view:olap.parameters.config.wizard:0
msgid "Configure"
msgstr ""
msgstr "Seadista"
#. module: olap
#: wizard_view:olap.load.table,init:0
@@ -816,6 +816,7 @@ msgstr ""
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !"
#. module: olap
#: wizard_field:olap.query_builder,exec,hierarchy:0
@@ -837,7 +838,7 @@ msgstr ""
#. module: olap
#: field:olap.hierarchy,level_ids:0
msgid "Levels"
msgstr ""
msgstr "Tasemed"
#. module: olap
#: model:ir.model,name:olap.model_olap_application_field
@@ -853,12 +854,12 @@ msgstr ""
#: field:olap.database.columns,active:0
#: field:olap.database.tables,active:0
msgid "Active"
msgstr ""
msgstr "Aktiivne"
#. module: olap
#: selection:olap.measure,datatype:0
msgid "Integer"
msgstr ""
msgstr "Täisarv"
#. module: olap
#: wizard_view:olap.application.configuration,init:0
@@ -868,18 +869,18 @@ msgstr ""
#. module: olap
#: selection:olap.measure,agregator:0
msgid "Sum"
msgstr ""
msgstr "Kokku"
#. module: olap
#: wizard_field:olap.query.logs.clear,init,user_name:0
#: field:olap.saved.query,user_id:0
msgid "User"
msgstr ""
msgstr "Kasutaja"
#. module: olap
#: field:olap.query.logs,count:0
msgid "Count"
msgstr ""
msgstr "Arv"
#. module: olap
#: field:olap.database.tables,name:0
@@ -894,7 +895,7 @@ msgstr ""
#. module: olap
#: field:olap.measure,datatype:0
msgid "Datatype"
msgstr ""
msgstr "Andmetüüp"
#. module: olap
#: wizard_button:olap.query_builder,back,ok:0
@@ -918,7 +919,7 @@ msgstr ""
#. module: olap
#: field:olap.cube,query_ids:0
msgid "Queries"
msgstr ""
msgstr "Päringud"
#. module: olap
#: selection:olap.fact.database,type:0
@@ -945,12 +946,12 @@ msgstr ""
#. module: olap
#: selection:olap.fact.database,connection_type:0
msgid "Socket"
msgstr ""
msgstr "Pesa"
#. module: olap
#: field:olap.fact.database,connection_type:0
msgid "Connection type"
msgstr ""
msgstr "Ühenduse tüüp"
#. module: olap
#: selection:olap.measure,agregator:0
@@ -960,18 +961,18 @@ msgstr ""
#. module: olap
#: field:olap.fact.database,db_name:0
msgid "Database name"
msgstr ""
msgstr "Andmebaasi nimi"
#. module: olap
#: field:olap.database.columns,type:0
msgid "Type"
msgstr ""
msgstr "Tüüp"
#. module: olap
#: view:olap.database.columns:0
#: view:olap.database.tables:0
msgid "Show"
msgstr ""
msgstr "Näita"
#. module: olap
#: wizard_button:olap.query_builder,exec,back:0
@@ -1023,7 +1024,7 @@ msgstr ""
#: wizard_field:olap.query_builder,exec,measure:0
#: wizard_field:olap.query_builder,ok,measure:0
msgid "Measure"
msgstr ""
msgstr "Mõõda"
#. module: olap
#: field:olap.database.columns,column_db_name:0
@@ -1055,7 +1056,7 @@ msgstr ""
#. module: olap
#: view:olap.fact.database:0
msgid "Information"
msgstr ""
msgstr "Info"
#. module: olap
#: wizard_field:olap.query_builder,back,cube_schema:0
@@ -1102,7 +1103,7 @@ msgstr ""
#. module: olap
#: view:olap.fact.database:0
msgid "General information"
msgstr ""
msgstr "Üldine info"
#. module: olap
#: field:olap.application,query:0
@@ -1117,7 +1118,7 @@ msgstr ""
#. module: olap
#: field:olap.saved.query,mdx_id:0
msgid "Module"
msgstr ""
msgstr "Moodul"
#. module: olap
#: field:olap.application.field,is_hidden:0
@@ -1125,7 +1126,7 @@ msgstr ""
#: field:olap.database.columns,hide:0
#: field:olap.database.tables,hide:0
msgid "Hidden"
msgstr ""
msgstr "Varjatud"
#. module: olap
#: field:olap.dimension,hierarchy_ids:0
@@ -1177,7 +1178,7 @@ msgstr ""
#. module: olap
#: field:olap.application.field,field_name:0
msgid "Field name"
msgstr ""
msgstr "Välja nimi"
#. module: olap
#: model:ir.model,name:olap.model_olap_query_logs
@@ -1216,7 +1217,7 @@ msgstr ""
#: field:olap.query.logs,schema_id:0
#: field:olap.saved.query,schema_id:0
msgid "Schema"
msgstr ""
msgstr "Skeem"
#. module: olap
#: field:olap.fact.database,connection_url:0
@@ -1227,7 +1228,7 @@ msgstr ""
#. module: olap
#: field:olap.schema,cube_ids:0
msgid "Cubes"
msgstr ""
msgstr "Kuubid"
#. module: olap
#: view:olap.schema:0
@@ -1237,12 +1238,12 @@ msgstr ""
#. module: olap
#: field:olap.application,field_ids:0
msgid "Fields"
msgstr ""
msgstr "Väljad"
#. module: olap
#: selection:olap.measure,agregator:0
msgid "Average"
msgstr ""
msgstr "Keskmine"
#. module: olap
#: view:bi.load.db.wizard:0
@@ -1277,7 +1278,7 @@ msgstr ""
#. module: olap
#: model:ir.ui.menu,name:olap.menu_view_olap_fact_database_form
msgid "Databases"
msgstr ""
msgstr "Andmebaasid"
#. module: olap
#: field:olap.hierarchy,name:0
@@ -1321,12 +1322,12 @@ msgstr ""
#: field:olap.hierarchy,sequence:0
#: field:olap.level,sequence:0
msgid "Sequence"
msgstr ""
msgstr "Tsükkel"
#. module: olap
#: model:ir.ui.menu,name:olap.menu_bi_conf_tools
msgid "Tools"
msgstr ""
msgstr "Tööriistad"
#. module: olap
#: field:olap.schema,state:0
@@ -1336,7 +1337,7 @@ msgstr ""
#. module: olap
#: selection:olap.measure,datatype:0
msgid "Float"
msgstr ""
msgstr "Ujuvaks"
#. module: olap
#: model:ir.actions.act_window,name:olap.action_olap_query_logs_form
@@ -1349,7 +1350,7 @@ msgstr ""
#: selection:olap.fact.database,connection_type:0
#: field:olap.parameters.config.wizard,host_port:0
msgid "Port"
msgstr ""
msgstr "Port"
#. module: olap
#: view:olap.fact.database:0
@@ -1364,7 +1365,7 @@ msgstr ""
#. module: olap
#: field:olap.database.columns,name:0
msgid "Column Name"
msgstr ""
msgstr "Veeru nimi"
#. module: olap
#: field:olap.database.tables,table_db_name:0
@@ -1374,7 +1375,7 @@ msgstr ""
#. module: olap
#: wizard_view:olap.application.configuration,configure:0
msgid "Auto Configure"
msgstr ""
msgstr "Automaatne seadistamine"
#. module: olap
#: field:olap.schema,configure:0
+4 -4
View File
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-26 05:29+0000\n"
"PO-Revision-Date: 2010-04-28 19:27+0000\n"
"Last-Translator: Shay <Unknown>\n"
"PO-Revision-Date: 2010-05-06 08:51+0000\n"
"Last-Translator: Juan Miguel Boyero Corral <Unknown>\n"
"Language-Team: Spanish <es@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: 2010-04-29 03:52+0000\n"
"X-Launchpad-Export-Date: 2010-05-07 04:03+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: olap_sale
@@ -31,4 +31,4 @@ msgstr ""
#. module: olap_sale
#: model:ir.module.module,shortdesc:olap_sale.module_meta_information
msgid "olap_sale"
msgstr ""
msgstr "olap_sale"
+2 -2
View File
@@ -61,11 +61,11 @@
<separator colspan="4" string="Actions"/>
<group colspan="4" col="6">
<field name="state" select="1"/>
<button name="%(action_pos_payment)d" string="Ma_ke Payment" icon="gtk-ok" type="action" states="draft,advance" context="{'record_id':'active_id'}" />
<button name="%(action_pos_payment)d" string="Ma_ke Payment" icon="gtk-ok" type="action" states="draft,advance" />
<button name="%(action_report_pos_receipt)d" string="_Reprint" icon="gtk-print" type="action" states="paid,done,invoiced"/>
<button name="set_to_draft" string="Set to draft" states="paid" icon="gtk-execute" type="object" />
<button name="%(action_view_pos_return)d" string="Return Picking" type="action" icon="gtk-ok" states="paid"
attrs="{'invisible':[('state','!=','paid'),('state','!=','invoiced')]}" context="{'record_id':'active_id'}" />
attrs="{'invisible':[('state','!=','paid'),('state','!=','invoiced')]}"/>
</group>
</page>
+7 -5
View File
@@ -12,6 +12,7 @@
<field eval="&quot;&quot;&quot;en_US&quot;&quot;&quot;" name="context_lang"/>
<field eval="&quot;&quot;&quot;Shop 1 User&quot;&quot;&quot;" name="name"/>
<field name="company_id" ref="stock.res_company_shop0"/>
<field name="company_ids" eval="[(4, ref('stock.res_company_shop0'))]"/>
<field eval="&quot;&quot;&quot;shop1&quot;&quot;&quot;" name="login"/>
<field model="ir.actions.actions" name="action_id" search="[('name','=','Menu')]"/>
</record>
@@ -22,6 +23,7 @@
<field eval="&quot;&quot;&quot;shop2&quot;&quot;&quot;" name="password"/>
<field eval="&quot;&quot;&quot;Shop 2 User&quot;&quot;&quot;" name="name"/>
<field name="company_id" ref="stock.res_company_tinyshop0"/>
<field name="company_ids" eval="[(4, ref('stock.res_company_tinyshop0'))]"/>
<field eval="&quot;&quot;&quot;shop2&quot;&quot;&quot;" name="login"/>
<field model="ir.actions.actions" name="action_id" search="[('name','=','Menu')]"/>
</record>
@@ -93,7 +95,7 @@
ref('stock.menu_action_picking_tree7'),
ref('stock.menu_action_picking_tree8'),
ref('stock.menu_action_picking_tree9'),
ref('mrp.menu_mrp_procurement_action3'),
ref('mrp_procurement.menu_mrp_procurement_action3'),
ref('point_of_sale.menu_point_root')])]" name="menu_access"/>
<field eval="[(6,0,[ref('res_users_shopuser0'),ref('res_users_shopuser1')])]" name="users"/>
<field eval="[(6,0,[ref('point_of_sale.ir_rule_group_point0'),ref('point_of_sale.ir_rule_group_poslinecompany0'),ref('point_of_sale.ir_rule_group_posreporting0')])]" name="rule_groups"/>
@@ -130,7 +132,7 @@
</record>
<record id="ir_modelsmrp_pdt0" model="ir.model.access">
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field name="model_id" ref="mrp_procurement.model_mrp_procurement"/>
<field eval="1" name="perm_read"/>
<field eval="&quot;&quot;&quot;MRP - Procurement&quot;&quot;&quot;" name="name"/>
<field eval="0" name="perm_unlink"/>
@@ -204,7 +206,7 @@
<field name="group_id" ref="res_groups_posuser0"/>
</record>
<record id="ir_model_access_stockwarehouseorderpoint0" model="ir.model.access">
<field name="model_id" ref="mrp.model_stock_warehouse_orderpoint"/>
<field name="model_id" ref="mrp_procurement.model_stock_warehouse_orderpoint"/>
<field eval="1" name="perm_read"/>
<field eval="&quot;&quot;&quot;stock.warehouse.orderpoint&quot;&quot;&quot;" name="name"/>
<field eval="0" name="perm_unlink"/>
@@ -472,7 +474,7 @@
<field name="group_id" ref="res_groups_posuser0"/>
</record>
<record id="ir_model_access_procurement0" model="ir.model.access">
<field name="model_id" ref="mrp.model_mrp_procurement" />
<field name="model_id" ref="mrp_procurement.model_mrp_procurement" />
<field eval="1" name="perm_read" />
<field eval="1" name="perm_write" />
<field eval="1" name="perm_create" />
@@ -495,7 +497,7 @@
name="Reporting"
parent="stock.menu_stock_root" groups="base.group_user"/>
<menuitem action="stock.action_picking_tree" id="stock.menu_action_picking_tree" parent="stock.menu_stock_root" sequence="19" groups="res_groups_posuser0"/>
<menuitem id="mrp.menu_mrp_reordering" name="Automatic Procurements" parent="stock.menu_stock_root" sequence="4" groups="base.group_user"/>
<menuitem id="mrp_procurement.menu_mrp_reordering" name="Automatic Procurements" parent="stock.menu_stock_root" sequence="4" groups="base.group_user"/>
<menuitem parent="stock.next_id_61" action="stock.action_stock_line_date" id="stock.menu_report_stock_line_date" groups="base.group_user"/>
</data>
+3 -3
View File
@@ -177,7 +177,7 @@
ref('stock.menu_action_picking_tree7'),
ref('stock.menu_action_picking_tree8'),
ref('stock.menu_action_picking_tree9'),
ref('mrp.menu_mrp_procurement_action3'),
ref('mrp_procurement.menu_mrp_procurement_action3'),
ref('point_of_sale.menu_point_root')])]" name="menu_access"/>
<field eval="[(6,0,[ref('point_of_sale.ir_rule_group_point0'),ref('point_of_sale.ir_rule_group_poslinecompany0'),ref('point_of_sale.ir_rule_group_posreporting0')])]" name="rule_groups"/>
<field eva="[(6,0,[ref('res_users_shopuser0'),ref('res_users_shopuser1')])]" name="users"/>
@@ -214,7 +214,7 @@
</record>
<record id="ir_modelsmrp_pdt0" model="ir.model.access">
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field name="model_id" ref="mrp_procurement.model_mrp_procurement"/>
<field eval="1" name="perm_read"/>
<field eval="&quot;&quot;&quot;MRP - Procurement&quot;&quot;&quot;" name="name"/>
<field eval="0" name="perm_unlink"/>
@@ -557,7 +557,7 @@
<field name="group_id" ref="res_groups_posuser0"/>
</record>
<record id="ir_model_access_procurement0" model="ir.model.access">
<field name="model_id" ref="mrp.model_mrp_procurement" />
<field name="model_id" ref="mrp_procurement.model_mrp_procurement" />
<field eval="1" name="perm_read" />
<field eval="1" name="perm_write" />
<field eval="1" name="perm_create" />
+1 -1
View File
@@ -33,7 +33,7 @@
<field eval="1" name="global"/>
</record>
<record id="point_of_sale.res_groups_posuser0" model="res.groups">
<field eval="[(6,0,[ref('product.menu_config_product'),ref('product.menu_product_category_action_form'),ref('point_of_sale.menu_point_ofsale'),ref('point_of_sale.menu_point_config'),ref('point_of_sale.menu_statement_tree_all'),ref('stock.menu_stock_root'),ref('stock.menu_action_location_form'),ref('stock.menu_action_location_tree'),ref('stock.menu_picking_waiting'),ref('stock.menu_action_picking_tree3'),ref('stock.menu_action_picking_tree5'),ref('stock.menu_action_picking_form'),ref('stock.menu_action_picking_tree7'),ref('stock.menu_action_picking_tree8'),ref('stock.menu_action_picking_tree9'),ref('mrp.menu_mrp_procurement_action3'),ref('mrp.menu_mrp_procurement_new'),ref('mrp.next_id_77'),ref('mrp.menu_report_workcenter_load'),ref('mrp.menu_report_in_out_picking'),ref('base.menu_sales'),ref('sale.menu_action_shop_form'),ref('sale.menu_sale_order'),ref('sale.menu_action_order_tree'),ref('sale.menu_action_order_tree_all'),ref('sale.menu_action_order_tree2'),ref('sale.menu_action_order_tree3'),ref('sale.menu_action_order_tree7'),ref('sale.menu_action_order_tree8'),ref('sale.menu_action_order_line_tree1'),ref('delivery.menu_action_delivery_carrier_form'),ref('delivery.menu_action_delivery_grid_form'),ref('point_of_sale.menu_point_root')])]" name="menu_access"/>
<field eval="[(6,0,[ref('product.menu_config_product'),ref('product.menu_product_category_action_form'),ref('point_of_sale.menu_point_ofsale'),ref('point_of_sale.menu_point_config'),ref('point_of_sale.menu_statement_tree_all'),ref('stock.menu_stock_root'),ref('stock.menu_action_location_form'),ref('stock.menu_action_location_tree'),ref('stock.menu_picking_waiting'),ref('stock.menu_action_picking_tree3'),ref('stock.menu_action_picking_tree5'),ref('stock.menu_action_picking_form'),ref('stock.menu_action_picking_tree7'),ref('stock.menu_action_picking_tree8'),ref('stock.menu_action_picking_tree9'),ref('mrp_procurement.menu_mrp_procurement_action3'),ref('mrp_procurement.menu_mrp_procurement_new'),ref('mrp.next_id_77'),ref('mrp.menu_report_workcenter_load'),ref('mrp.menu_report_in_out_picking'),ref('base.menu_sales'),ref('sale.menu_action_shop_form'),ref('sale.menu_sale_order'),ref('sale.menu_action_order_tree'),ref('sale.menu_action_order_tree_all'),ref('sale.menu_action_order_tree2'),ref('sale.menu_action_order_tree3'),ref('sale.menu_action_order_tree7'),ref('sale.menu_action_order_tree8'),ref('sale.menu_action_order_line_tree1'),ref('delivery.menu_action_delivery_carrier_form'),ref('delivery.menu_action_delivery_grid_form'),ref('point_of_sale.menu_point_root')])]" name="menu_access"/>
<field eval="[(6,0,[ref('ir_rule_group_bankstatementcompany0'),ref('ir_rule_group_bankstatementlinecompany0'),ref('point_of_sale.ir_rule_group_point0'),ref('point_of_sale.ir_rule_group_poslinecompany0'),ref('point_of_sale.ir_rule_group_posreporting0')])]" name="rule_groups"/>
<field eval="&quot;&quot;&quot;POS_user&quot;&quot;&quot;" name="name"/>
</record>
+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" ?>
<openerp>
<data>
</data>
</openerp>
@@ -63,7 +63,7 @@ class add_product(osv.osv_memory):
}
def close_action(self, cr, uid, ids, context):
record_id = context and context.get('record_id', False)
record_id = context and context.get('active_id', False)
order_obj= self.pool.get('pos.order')
order_line_obj= self.pool.get('pos.order.line')
obj=order_obj.browse(cr,uid, record_id)
@@ -71,7 +71,7 @@ class add_product(osv.osv_memory):
if obj.amount_total != obj.amount_paid:
return {
'name': _('Make Payment'),
'context ':context and context.get('record_id', False),
'context ':context and context.get('active_id', False),
'view_type': 'form',
'view_mode': 'form',
'res_model': 'pos.make.payment',
@@ -29,7 +29,6 @@
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{'record_id' : active_id}</field>
</record>
+44 -38
View File
@@ -43,7 +43,8 @@ class pos_make_payment(osv.osv_memory):
@return: A dictionary which of fields with values.
"""
res = super(pos_make_payment, self).default_get(cr, uid, fields, context=context)
record_id = context and context.get('record_id',False)
active_id = context and context.get('active_id',False)
j_obj = self.pool.get('account.journal')
company_id = self.pool.get('res.users').browse(cr,uid,uid).company_id.id
journal = j_obj.search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', company_id)])
@@ -55,14 +56,14 @@ class pos_make_payment(osv.osv_memory):
wf_service = netsvc.LocalService("workflow")
order_obj=self.pool.get('pos.order')
order = order_obj.browse(cr, uid, record_id, context)
order = order_obj.browse(cr, uid, active_id, context)
#get amount to pay
amount = order.amount_total - order.amount_paid
if amount <= 0.0:
context.update({'flag': True})
order_obj.action_paid(cr, uid, [record_id], context)
order_obj.action_paid(cr, uid, [active_id], context)
elif order.amount_paid > 0.0:
order_obj.write(cr, uid, [record_id], {'state': 'advance'})
order_obj.write(cr, uid, [active_id], {'state': 'advance'})
invoice_wanted_checked = False
current_date = time.strftime('%Y-%m-%d')
@@ -81,11 +82,11 @@ class pos_make_payment(osv.osv_memory):
def view_init(self, cr, uid, fields_list, context=None):
res = super(pos_make_payment, self).view_init(cr, uid, fields_list, context=context)
record_id = context and context.get('record_id', False) or False
order = self.pool.get('pos.order').browse(cr, uid, record_id)
active_id = context and context.get('active_id', False) or False
order = self.pool.get('pos.order').browse(cr, uid, active_id)
if not order.lines:
raise osv.except_osv('Error!','No order lines defined for this sale ')
True
raise osv.except_osv('Error!','No order lines defined for this sale ')
return True
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
"""
@@ -99,21 +100,26 @@ class pos_make_payment(osv.osv_memory):
@return: New arch of view.
"""
record_id = context and context.get('record_id', False) or False
res = super(pos_make_payment, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
if record_id:
order = self.pool.get('pos.order').browse(cr, uid, record_id)
if order.amount_total == order.amount_paid:
res['arch'] = """ <form string="Make Payment" colspan="4">
<group col="2" colspan="2">
<label string="Do you want to print the Receipt?" colspan="4"/>
<separator colspan="4"/>
<button icon="gtk-cancel" special="cancel" string="No" readonly="0"/>
<button name="print_report" string="Print Receipt" type="object" icon="gtk-print"/>
</group>
</form>
"""
return res
result = super(pos_make_payment, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
active_model = context.get('active_model')
active_id = context.get('active_id', False)
if not active_id or (active_model and active_model != 'pos.order'):
return result
order = self.pool.get('pos.order').browse(cr, uid, active_id)
if order.amount_total == order.amount_paid:
res['arch'] = """ <form string="Make Payment" colspan="4">
<group col="2" colspan="2">
<label string="Do you want to print the Receipt?" colspan="4"/>
<separator colspan="4"/>
<button icon="gtk-cancel" special="cancel" string="No" readonly="0"/>
<button name="print_report" string="Print Receipt" type="object" icon="gtk-print"/>
</group>
</form>
"""
return result
def check(self, cr, uid, ids, context=None):
@@ -121,10 +127,10 @@ class pos_make_payment(osv.osv_memory):
if the order is not paid: continue payment,
if the order is paid print invoice (if wanted) or ticket.
"""
record_id = context and context.get('record_id',False)
active_id = context and context.get('active_id',False)
order_obj = self.pool.get('pos.order')
jrnl_obj = self.pool.get('account.journal')
order = order_obj.browse(cr, uid, record_id, context)
order = order_obj.browse(cr, uid, active_id, context)
amount = order.amount_total - order.amount_paid
data = self.read(cr, uid, ids)[0]
@@ -134,35 +140,35 @@ class pos_make_payment(osv.osv_memory):
jrnl_used=False
if data.get('journal',False):
jrnl_used=jrnl_obj.browse(cr,uid,data['journal'])
order_obj.write(cr, uid, [record_id], {'invoice_wanted': invoice_wanted})
order_obj.add_payment(cr, uid, record_id, data, context=context)
order_obj.write(cr, uid, [active_id], {'invoice_wanted': invoice_wanted})
order_obj.add_payment(cr, uid, active_id, data, context=context)
# Todo need to check
# if amount<=0.0:
# context.update({'flag':True})
# order_obj.action_paid(cr,uid,[record_id],context)
if order_obj.test_paid(cr, uid, [record_id]):
# order_obj.action_paid(cr,uid,[active_id],context)
if order_obj.test_paid(cr, uid, [active_id]):
if order.partner_id and order.invoice_wanted:
return self.create_invoice(cr,uid,ids,context)
else:
context.update({'flag': True})
order_obj.action_paid(cr,uid,[record_id],context)
order_obj.write(cr, uid, [record_id],{'state':'paid'})
order_obj.action_paid(cr,uid,[active_id],context)
order_obj.write(cr, uid, [active_id],{'state':'paid'})
return self.print_report(cr, uid, ids, context)
if order.amount_paid > 0.0:
context.update({'flag': True})
# Todo need to check
order_obj.action_paid(cr, uid, [record_id], context)
self.pool.get('pos.order').write(cr, uid, [record_id],{'state':'advance'})
order_obj.action_paid(cr, uid, [active_id], context)
self.pool.get('pos.order').write(cr, uid, [active_id],{'state':'advance'})
return self.print_report(cr, uid, ids, context)
return {}
def create_invoice(self, cr, uid, ids, context):
wf_service = netsvc.LocalService("workflow")
record_ids = [context and context.get('record_id',False)]
for i in record_ids:
active_ids = [context and context.get('active_id',False)]
for i in active_ids:
wf_service.trg_validate(uid, 'pos.order', i, 'invoice', cr)
datas = {'ids' : context.get('record_id', [])}
datas = {'ids' : context.get('active_id', [])}
return {
'type' : 'ir.actions.report.xml',
'report_name':'pos.invoice',
@@ -180,8 +186,8 @@ class pos_make_payment(osv.osv_memory):
@param context: A standard dictionary
@return : retrun report
"""
record_id=context.get('record_id',[])
datas = {'ids' : [record_id]}
active_id=context.get('active_id',[])
datas = {'ids' : [active_id]}
res = {}
datas['form'] = res
+37 -33
View File
@@ -52,11 +52,11 @@ class pos_return(osv.osv_memory):
"""
res = super(pos_return, self).default_get(cr, uid, fields, context=context)
order_obj=self.pool.get('pos.order')
record_id=context.get('record_id')
order_obj = self.pool.get('pos.order')
active_ids = context.get('active_ids')
if not context:
context={}
for order in order_obj.browse(cr, uid,[record_id]):
for order in order_obj.browse(cr, uid, active_ids):
for line in order.lines:
if 'return%s'%(line.id) in fields:
res['return%s'%(line.id)] = line.qty
@@ -66,9 +66,10 @@ class pos_return(osv.osv_memory):
res = super(pos_return, self).view_init(cr, uid, fields_list, context=context)
order_obj=self.pool.get('pos.order')
if not context:
context={}
record_id=context.get('record_id')
for order in order_obj.browse(cr, uid,[record_id]):
context={}
active_ids=context.get('active_ids')
for order in order_obj.browse(cr, uid, active_ids):
for line in order.lines:
if 'return%s'%(line.id) not in self._columns:
self._columns['return%s'%(line.id)] = fields.float("Quantity")
@@ -79,14 +80,17 @@ class pos_return(osv.osv_memory):
result = super(pos_return, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
if not context:
context={}
order_obj=self.pool.get('pos.order')
record_id = context.get('record_id', False)
if record_id:
active_model = context.get('active_model')
if not active_model and active_model != 'pos.order':
return result
order_obj = self.pool.get('pos.order')
active_id = context.get('active_id', False)
if active_id:
_moves_arch_lst="""<?xml version="1.0"?>
<form string="Return lines">
<label string="Quantities you enter, match to products that will return to the stock." colspan="4"/>"""
_line_fields = result['fields']
order=order_obj.browse(cr, uid, record_id)
order=order_obj.browse(cr, uid, active_id)
for line in order.lines:
quantity=line.qty
_line_fields.update({
@@ -127,10 +131,11 @@ class pos_return(osv.osv_memory):
'view_id': False,
'target':'new',
'views': False,
'context': context,
'type': 'ir.actions.act_window',
}
def create_returns2(self, cr, uid, ids, context):
record_id = context.get('record_id', False)
active_id = context.get('active_id', False)
order_obj =self.pool.get('pos.order')
line_obj = self.pool.get('pos.order.line')
picking_obj = self.pool.get('stock.picking')
@@ -139,13 +144,13 @@ class pos_return(osv.osv_memory):
uom_obj =self. pool.get('product.uom')
wf_service = netsvc.LocalService("workflow")
#Todo :Need to clean the code
if record_id:
picking_ids = picking_obj.search(cr, uid, [('pos_order', 'in',[record_id]), ('state', '=', 'done')])
if active_id:
picking_ids = picking_obj.search(cr, uid, [('pos_order', 'in',[active_id]), ('state', '=', 'done')])
data=self.read(cr,uid,ids)[0]
clone_list = []
date_cur=time.strftime('%Y-%m-%d')
for order_id in order_obj.browse(cr, uid, [record_id], context=context):
for order_id in order_obj.browse(cr, uid, [active_id], context=context):
prop_ids = property_obj.search(cr, uid,[('name', '=', 'property_stock_customer')])
val = property_obj.browse(cr, uid,prop_ids[0]).value_reference
cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order_id.shop_id.warehouse_id.id))
@@ -189,6 +194,7 @@ class pos_return(osv.osv_memory):
'auto_refresh':0,
'res_id':new_order,
'view_id': False,
'context':context,
'type': 'ir.actions.act_window'
}
return act
@@ -205,13 +211,10 @@ class add_product(osv.osv_memory):
@param context: A standard dictionary
@return : Retrun the add product form again for adding more product
"""
if not context.get('record_id', False):
super(add_product).select_product(cr,uid,ids)
else:
record_id=context.get('record_id', False)
data = self.read(cr, uid, ids)[0]
active_id=context.get('active_id', False)
data = self.read(cr, uid, ids)[0]
if active_id:
order_obj = self.pool.get('pos.order')
lines_obj = self.pool.get('pos.order.line')
picking_obj = self.pool.get('stock.picking')
@@ -219,16 +222,16 @@ class add_product(osv.osv_memory):
move_obj = self.pool.get('stock.move')
property_obj= self.pool.get("ir.property")
invoice_obj= self.pool.get('account.invoice')
picking_ids = picking_obj.search(cr, uid, [('pos_order', 'in',[record_id]), ('state', '=', 'done')])
picking_ids = picking_obj.search(cr, uid, [('pos_order', 'in',[active_id]), ('state', '=', 'done')])
clone_list = []
date_cur=time.strftime('%Y-%m-%d')
uom_obj = self.pool.get('product.uom')
prod_obj=self.pool.get('product.product')
wf_service = netsvc.LocalService("workflow")
return_boj=self.pool.get('pos.return')
order_obj.add_product(cr, uid, record_id,data['product_id'],data['quantity'], context=context)
order_obj.add_product(cr, uid, active_id,data['product_id'],data['quantity'], context=context)
for order_id in order_obj.browse(cr, uid, [record_id], context=context):
for order_id in order_obj.browse(cr, uid, [active_id], context=context):
prod=data['product_id']
qty=data['quantity']
prop_ids = property_obj.search(cr, uid,[('name', '=', 'property_stock_customer')])
@@ -259,7 +262,7 @@ class add_product(osv.osv_memory):
wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr)
picking_obj.force_assign(cr, uid, [new_picking], context)
order_obj.write(cr,uid,record_id,{'last_out_picking':new_picking})
order_obj.write(cr,uid,active_id,{'last_out_picking':new_picking})
return {
@@ -273,10 +276,9 @@ class add_product(osv.osv_memory):
'views': False,
'type': 'ir.actions.act_window',
}
def close_action(self, cr, uid, ids, context):
record_id=context.get('record_id', False)
active_ids=context.get('active_ids', False)
order_obj = self.pool.get('pos.order')
lines_obj = self.pool.get('pos.order.line')
picking_obj = self.pool.get('stock.picking')
@@ -284,7 +286,7 @@ class add_product(osv.osv_memory):
move_obj = self.pool.get('stock.move')
property_obj= self.pool.get("ir.property")
invoice_obj=self.pool.get('account.invoice')
picking_ids = picking_obj.search(cr, uid, [('pos_order', 'in', [record_id]), ('state', '=', 'done')])
picking_ids = picking_obj.search(cr, uid, [('pos_order', 'in', active_ids), ('state', '=', 'done')])
clone_list = []
date_cur=time.strftime('%Y-%m-%d')
uom_obj = self.pool.get('product.uom')
@@ -293,7 +295,7 @@ class add_product(osv.osv_memory):
data=return_boj.read(cr,uid,return_id,[])[0]
wf_service = netsvc.LocalService("workflow")
for order_id in order_obj.browse(cr, uid, [record_id], context=context):
for order_id in order_obj.browse(cr, uid, active_ids, context=context):
prop_ids =property_obj.search(cr, uid,[('name', '=', 'property_stock_customer')])
val = property_obj.browse(cr, uid,prop_ids[0]).value_reference
cr.execute("select s.id from stock_location s, stock_warehouse w where w.lot_stock_id=s.id and w.id= %d "%(order_id.shop_id.warehouse_id.id))
@@ -328,11 +330,12 @@ class add_product(osv.osv_memory):
})
wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr)
picking_obj.force_assign(cr, uid, [new_picking], context)
obj=order_obj.browse(cr,uid, record_id)
obj=order_obj.browse(cr,uid, active_ids[0])
if obj.amount_total != obj.amount_paid:
return {
'name': _('Make Payment'),
'context ':context and context.get('record_id', False),
'context ':context,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'pos.make.payment',
@@ -341,7 +344,8 @@ class add_product(osv.osv_memory):
'views': False,
'type': 'ir.actions.act_window',
}
}
return True
add_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+4 -4
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-02-27 08:20+0000\n"
"Last-Translator: Oktay Altunergil <Unknown>\n"
"PO-Revision-Date: 2010-05-10 16:32+0000\n"
"Last-Translator: Angel Spy <melissadilara@yahoo.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: 2010-04-17 04:10+0000\n"
"X-Launchpad-Export-Date: 2010-05-11 04:19+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product
@@ -90,7 +90,7 @@ msgstr ""
#. module: product
#: field:product.packaging,width:0
msgid "Width"
msgstr "En/Genişlik"
msgstr "Genişlik"
#. module: product
#: help:product.pricelist.item,product_tmpl_id:0
+1 -1
View File
@@ -9,7 +9,7 @@
<field name="arch" type="xml">
<page string="Sales &amp; Purchases" position="inside">
<newline/>
<group col="2" colspan="2" name="sale_list">
<group col="2" colspan="2">
<separator string="Sales Properties" colspan="2"/>
<field name="property_product_pricelist"/>
</group>
+1
View File
@@ -25,6 +25,7 @@ import stock
import wizard
import report
import stock
import company
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+2 -1
View File
@@ -31,7 +31,7 @@
""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['base', 'account', 'stock', 'process'],
'depends': ['base', 'account', 'stock', 'process', 'mrp_procurement'],
'init_xml': [],
'update_xml': [
@@ -39,6 +39,7 @@
'security/ir.model.access.csv',
'purchase_workflow.xml',
'purchase_sequence.xml',
'company_view.xml',
'purchase_data.xml',
'wizard/purchase_order_group_view.xml',
'wizard/purchase_installer.xml',
+36
View File
@@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv,fields
class company(osv.osv):
_inherit = 'res.company'
_columns = {
'po_lead': fields.float('Purchase Lead Time', required=True,
help="This is the leads/security time for each purchase order."),
}
_defaults = {
'po_lead': lambda *a: 1.0,
}
company()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="mrp_company" model="ir.ui.view">
<field name="name">res.company.mrp.config</field>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<page string="Configuration" position="inside">
<field name="po_lead"/>
</page>
</field>
</record>
</data>
</openerp>
+5 -5
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 10:09+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-05-06 12:53+0000\n"
"Last-Translator: g0nz1k12 <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-04-17 03:59+0000\n"
"X-Launchpad-Export-Date: 2010-05-07 04:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: purchase
@@ -69,7 +69,7 @@ msgstr ""
#. module: purchase
#: model:process.node,name:purchase.process_node_confirmpurchaseorder0
msgid "Confirmed Purchase"
msgstr ""
msgstr "Подтвержденные Заказы"
#. module: purchase
#: selection:purchase.order,state:0
@@ -236,7 +236,7 @@ msgstr "НДС :"
#. module: purchase
#: rml:purchase.quotation:0
msgid "Tel.:"
msgstr ""
msgstr "Тел.:"
#. module: purchase
#: field:purchase.order.line,account_analytic_id:0
+82
View File
@@ -19,6 +19,7 @@
#
##############################################################################
from mx import DateTime
from osv import fields
from osv import osv
import time
@@ -692,5 +693,86 @@ class purchase_order_line(osv.osv):
return True
purchase_order_line()
class mrp_procurement(osv.osv):
_inherit = 'mrp.procurement'
_columns = {
'purchase_id': fields.many2one('purchase.order', 'Purchase Order'),
}
def action_po_assign(self, cr, uid, ids, context={}):
""" This is action which call from workflow to assign purchase order to procurements
@return: True
"""
res = self.make_po(cr, uid, ids, context=context)
res = res.values()
return len(res) and res[0] or 0 #TO CHECK: why workflow is generated error if return not integer value
def make_po(self, cr, uid, ids, context={}):
""" Make purchase order from procurement
@return: New created Purchase Orders procurement wise
"""
res = {}
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
partner_obj = self.pool.get('res.partner')
uom_obj = self.pool.get('product.uom')
pricelist_obj = self.pool.get('product.pricelist')
prod_obj = self.pool.get('product.product')
acc_pos_obj = self.pool.get('account.fiscal.position')
po_obj = self.pool.get('purchase.order')
for procurement in self.browse(cr, uid, ids):
res_id = procurement.move_id.id
partner = procurement.product_id.seller_ids[0].name
partner_id = partner.id
address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery']
pricelist_id = partner.property_product_pricelist_purchase.id
uom_id = procurement.product_id.uom_po_id.id
qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id)
if procurement.product_id.seller_ids[0].qty:
qty = max(qty,procurement.product_id.seller_ids[0].qty)
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, False, {'uom': uom_id})[pricelist_id]
newdate = DateTime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S')
newdate = newdate - DateTime.RelativeDateTime(days=company.po_lead)
newdate = newdate - procurement.product_id.seller_ids[0].delay
#Passing partner_id to context for purchase order line integrity of Line name
context.update({'lang': partner.lang, 'partner_id': partner_id})
product = prod_obj.browse(cr, uid, procurement.product_id.id, context=context)
line = {
'name': product.partner_ref,
'product_qty': qty,
'product_id': procurement.product_id.id,
'product_uom': uom_id,
'price_unit': price,
'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
'move_dest_id': res_id,
'notes': product.description_purchase,
}
taxes_ids = procurement.product_id.product_tmpl_id.supplier_taxes_id
taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids)
line.update({
'taxes_id': [(6,0,taxes)]
})
purchase_id = po_obj.create(cr, uid, {
'origin': procurement.origin,
'partner_id': partner_id,
'partner_address_id': address_id,
'location_id': procurement.location_id.id,
'pricelist_id': pricelist_id,
'order_line': [(0,0,line)],
'company_id': procurement.company_id.id,
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False
})
res[procurement.id] = purchase_id
self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': purchase_id})
return res
mrp_procurement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+16 -1
View File
@@ -322,7 +322,22 @@
<field name="act_window_id" ref="purchase_line_form_action2"/>
</record>
<menuitem action="purchase_line_form_action2" id="menu_purchase_line_order_draft" parent="menu_procurement_management_invoice"/>
<!--
Procurements
-->
<record id="view_procurement_form_inherit" model="ir.ui.view">
<field name="name">mrp.procurement.form.inherit</field>
<field name="model">mrp.procurement</field>
<field name="inherit_id" ref="mrp_procurement.mrp_procurement_form_view"/>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='close_move']" position="before">
<field name="purchase_id"/>
</xpath>
</field>
</record>
</data>
</openerp>
+27
View File
@@ -177,6 +177,33 @@
<field name="act_from" ref="act_invoice_end"/>
<field name="act_to" ref="act_done"/>
</record>
<!-- Procurement -->
<record id="act_buy" model="workflow.activity">
<field name="wkf_id" ref="mrp_procurement.wkf_procurement"/>
<field name="name">buy</field>
<field name="kind">subflow</field>
<field name="subflow_id" search="[('osv','=','purchase.order')]"/>
<field name="action">action_po_assign()</field>
</record>
<record id="trans_confirm_mto_buy" model="workflow.transition">
<field name="act_from" ref="mrp_procurement.act_confirm_mto"/>
<field name="act_to" ref="act_buy"/>
<field name="condition">check_buy()</field>
</record>
<record id="trans_buy_make_done" model="workflow.transition">
<field name="act_from" ref="act_buy"/>
<field name="act_to" ref="mrp_procurement.act_make_done"/>
<field name="signal">subflow.delivery_done</field>
</record>
<record id="trans_buy_cancel" model="workflow.transition">
<field name="act_from" ref="act_buy"/>
<field name="act_to" ref="mrp_procurement.act_cancel"/>
<field name="signal">subflow.cancel</field>
</record>
</data>
</openerp>
+2 -1
View File
@@ -26,9 +26,10 @@
import sale
import stock
import product
import mrp
#import mrp
import wizard
import report
import company
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+3 -2
View File
@@ -42,13 +42,14 @@
""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': ['product', 'stock', 'mrp', 'process'],
'depends': ['product', 'stock', 'mrp_procurement', 'process'],
'init_xml': [],
'update_xml': [
'wizard/sale_make_invoice_advance.xml',
'wizard/sale_line_invoice.xml',
'security/sale_security.xml',
'security/ir.model.access.csv',
'company_view.xml',
'sale_workflow.xml',
'sale_sequence.xml',
'sale_data.xml',
@@ -56,7 +57,7 @@
'report/sale_report_view.xml',
'sale_report.xml',
'stock_view.xml',
'process/sale_process.xml',
# 'process/sale_process.xml',
],
'demo_xml': ['sale_demo.xml'],
'installable': True,
+37
View File
@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv,fields
class company(osv.osv):
_inherit = 'res.company'
_columns = {
'security_lead': fields.float('Security Days', required=True,
help="This is the days added to what you promise to customers "\
"for security purpose"),
}
_defaults = {
'security_lead': lambda *a: 5.0,
}
company()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="mrp_company" model="ir.ui.view">
<field name="name">res.company.mrp.config</field>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<page string="Configuration" position="inside">
<field name="security_lead"/>
</page>
</field>
</record>
</data>
</openerp>
+14 -3
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-03-18 10:45+0000\n"
"Last-Translator: Carlo Vettore <Unknown>\n"
"PO-Revision-Date: 2010-05-09 16:30+0000\n"
"Last-Translator: eLBati - albatos.com <lorenzo.battistini@albatos.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: 2010-04-17 04:09+0000\n"
"X-Launchpad-Export-Date: 2010-05-10 04:17+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -861,6 +861,17 @@ msgid ""
" - The 'Invoice from the packing' choice is used to create an invoice "
"during the packing process."
msgstr ""
"La politica di spedizione è utilizzata per sincronizzare le operazioni di "
"fatturazione e consegna\n"
" - La scelta 'Pagamento prima della consegna' dapprima genererà la fattura "
"e poi, dopo il pagamento di questa fattura, genererà il DDT.\n"
" - 'Spedizione e fatturazione manuale' genererà direttamente il DDT e "
"attenderà che l'utente clicchi manualmente sul bottone \"Crea fattura\" per "
"generare la bozza di fattura.\n"
" - 'Fattura su ordine a consegna effettuata' genererà la bozza di fattura "
"basata sull'ordine di vendita dopo che la merce sia uscita.\n"
" - 'Fattura da DDT' è utilizzato per creare una fattura durante il processo "
"di spedizione."
#. module: sale
#: rml:sale.order:0
+5 -5
View File
@@ -35,7 +35,7 @@
<field eval="&quot;&quot;&quot;Sale Order Requisition&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;Drives procurement orders for every sale order line.&quot;&quot;&quot;" name="note"/>
<field name="subflow_id" ref="process_process_salesprocess0"/>
<field name="process_id" ref="mrp.process_process_procurementprocess0"/>
<field name="process_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field eval="&quot;&quot;&quot;object.state in ('draft', 'waiting_date', 'manual', 'progress', 'shipping_except', 'invoice_except', 'done', 'cancel')&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
</record>
@@ -63,12 +63,12 @@
</record>
<record id="process_node_saleprocurement0" model="process.node">
<field name="menu_id" ref="mrp.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp.model_mrp_procurement"/>
<field name="menu_id" ref="mrp_procurement.menu_mrp_procurement_action"/>
<field name="model_id" ref="mrp_procurement.model_mrp_procurement"/>
<field eval="&quot;&quot;&quot;subflow&quot;&quot;&quot;" name="kind"/>
<field eval="&quot;&quot;&quot;Procurement Order&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;One Procurement order for each sale order line and for each of the components.&quot;&quot;&quot;" name="note"/>
<field name="subflow_id" ref="mrp.process_process_procurementprocess0"/>
<field name="subflow_id" ref="mrp_procurement.process_process_procurementprocess0"/>
<field name="process_id" ref="process_process_salesprocess0"/>
<field eval="&quot;&quot;&quot;object.state=='confirmed'&quot;&quot;&quot;" name="model_states"/>
<field eval="1" name="flow_start"/>
@@ -202,7 +202,7 @@
<field eval="[(6,0,[])]" name="transition_ids"/>
<field eval="&quot;&quot;&quot;Procurement of sold material&quot;&quot;&quot;" name="name"/>
<field eval="&quot;&quot;&quot;For every sale order line, a procurement order is created to supply the sold product.&quot;&quot;&quot;" name="note"/>
<field model="process.node" name="target_node_id" ref="mrp.process_node_procureproducts0"/>
<field model="process.node" name="target_node_id" ref="mrp_procurement.process_node_procureproducts0"/>
<field model="process.node" name="source_node_id" ref="process_node_saleorderprocurement0"/>
</record>
+10
View File
@@ -1,6 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<!--
Resource: res.company
-->
<record id="res_company_shop_sale0" model="res.company">
<field eval="5.0" name="security_lead"/>
<field name="partner_id" ref="stock.res_partner_tinyshop0"/>
<field name="parent_id" ref="stock.res_company_shop0"/>
<field eval="&quot;&quot;&quot;Shop 1&quot;&quot;&quot;" name="name"/>
</record>
<!--
Resource: sale.order
+5 -5
View File
@@ -163,8 +163,8 @@
<field groups="product.group_uos" name="product_uos"/>
<field name="th_weight"/>
<field name="address_allotment_id"/>
<separator colspan="4" string="Properties"/>
<field colspan="4" name="property_ids" nolabel="1"/>
<!-- <separator colspan="4" string="Properties"/>-->
<!-- <field colspan="4" name="property_ids" nolabel="1"/>-->
</page>
<page string="Notes">
<field colspan="4" name="notes" nolabel="1"/>
@@ -395,9 +395,9 @@
icon="gtk-cancel" />
</group>
</page>
<page string="Properties" groups="base.group_extended">
<field name="property_ids" nolabel="1"/>
</page>
<!-- <page string="Properties" groups="base.group_extended">-->
<!-- <field name="property_ids" nolabel="1"/>-->
<!-- </page>-->
<page string="Notes">
<field colspan="4" name="notes" nolabel="1"/>
</page>
+1 -4
View File
@@ -11,10 +11,7 @@
"access_account_analytic_account_salesman","account_analytic_account salesman","analytic.model_account_analytic_account","group_sale_user",1,1,1,1
"access_stock_picking_salesman","stock_picking salesman","stock.model_stock_picking","group_sale_user",1,1,1,1
"access_stock_move_salesman","stock_move salesman","stock.model_stock_move","group_sale_user",1,1,1,0
"access_mrp_property_salesman","mrp.property salesman","mrp.model_mrp_property","group_sale_user",1,0,0,0
"access_mrp_procurement_salesman","mrp.procurement salesman","mrp.model_mrp_procurement","group_sale_user",1,1,1,1
"access_sale_order_mrp_user","sale.order mrp worker","model_sale_order","mrp.group_mrp_user",1,0,0,0
"access_sale_order_line_mrp_user","sale.order.line mrp worker","model_sale_order_line","mrp.group_mrp_user",1,0,0,0
"access_mrp_procurement_salesman","mrp.procurement salesman","mrp_procurement.model_mrp_procurement","group_sale_user",1,1,1,1
"access_sale_order_stock_worker","sale.order stock worker","model_sale_order","stock.group_stock_user",1,1,0,0
"access_sale_order_line_stock_worker","sale.order.line stock worker","model_sale_order_line","stock.group_stock_user",1,1,0,0
"access_sale_order_manager","sale.order.manager","model_sale_order","group_sale_manager",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
11 access_account_analytic_account_salesman account_analytic_account salesman analytic.model_account_analytic_account group_sale_user 1 1 1 1
12 access_stock_picking_salesman stock_picking salesman stock.model_stock_picking group_sale_user 1 1 1 1
13 access_stock_move_salesman stock_move salesman stock.model_stock_move group_sale_user 1 1 1 0
14 access_mrp_property_salesman access_mrp_procurement_salesman mrp.property salesman mrp.procurement salesman mrp.model_mrp_property mrp_procurement.model_mrp_procurement group_sale_user 1 0 1 0 1 0 1
access_mrp_procurement_salesman mrp.procurement salesman mrp.model_mrp_procurement group_sale_user 1 1 1 1
access_sale_order_mrp_user sale.order mrp worker model_sale_order mrp.group_mrp_user 1 0 0 0
access_sale_order_line_mrp_user sale.order.line mrp worker model_sale_order_line mrp.group_mrp_user 1 0 0 0
15 access_sale_order_stock_worker sale.order stock worker model_sale_order stock.group_stock_user 1 1 0 0
16 access_sale_order_line_stock_worker sale.order.line stock worker model_sale_order_line stock.group_stock_user 1 1 0 0
17 access_sale_order_manager sale.order.manager model_sale_order group_sale_manager 1 1 1 1
+841
View File
@@ -0,0 +1,841 @@
# Estonian translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-26 06:00+0000\n"
"PO-Revision-Date: 2010-05-07 16:28+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.com>\n"
"Language-Team: Estonian <et@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: 2010-05-08 04:05+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: smtpclient
#: field:email.smtpclient.queue,bcc:0
msgid "BCC to"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "__number__ for Invoice / Sales Number"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,ssl:0
msgid "Use SSL?"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Start Server"
msgstr "Käivita server"
#. module: smtpclient
#: model:ir.actions.wizard,name:smtpclient.wizard_email_verifycode
msgid "Verify Server"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,priority:0
msgid "Server Priority"
msgstr ""
#. module: smtpclient
#: help:email.sendcode,init,emailto:0
msgid "Enter the address Email where you want to get the Verification Code"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient,auth_type:0
msgid "Other Mail Servers"
msgstr ""
#. module: smtpclient
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Vigane mudeli nimi toimingu definitsioonis."
#. module: smtpclient
#: field:email.smtpclient.queue,to:0
msgid "Mail to"
msgstr "Saada e-mail"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Message Error!"
msgstr "Vea sõnum!"
#. module: smtpclient
#: field:email.smtpclient,name:0
msgid "Server Name"
msgstr "Serveri nimi"
#. module: smtpclient
#: field:email.smtpclient,header_ids:0
msgid "Default Headers"
msgstr "Vaikimisi päised"
#. module: smtpclient
#: wizard_button:email.testemail,init,send:0
msgid "Send Email"
msgstr "Saada e-kiri"
#. module: smtpclient
#: field:res.company.address,company_id:0
msgid "Company"
msgstr "Ettevõte"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Set to Draft"
msgstr "Sea mustandiks"
#. module: smtpclient
#: code:addons/smtpclient/wizard/verifycode.py:0
#, python-format
msgid "Server already verified!"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/wizard/sendcode.py:0
#: code:addons/smtpclient/wizard/testemail.py:0
#, python-format
msgid "Verification Failed. Please check the Server Configuration!"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "SMTP Server Error!"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,auth_type:0
#: field:email.smtpclient,type:0
msgid "Server Type"
msgstr "Serveri tüüp"
#. module: smtpclient
#: field:email.smtpclient,from_email:0
msgid "Email From"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "User Information"
msgstr "Kasutajainfo"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "OpenERP SMTP server Email Registration Code!"
msgstr ""
#. module: smtpclient
#: model:ir.model,name:smtpclient.model_report_smtp_server
#: view:report.smtp.server:0
msgid "Server Statistics"
msgstr "Serveri statistika"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Messages"
msgstr "Sõnumid"
#. module: smtpclient
#: selection:email.smtpclient,type:0
#: selection:res.company.address,name:0
msgid "Sale"
msgstr "Müük"
#. module: smtpclient
#: field:email.headers,value:0
msgid "Value"
msgstr "Väärtus"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Access Permission"
msgstr ""
#. module: smtpclient
#: model:ir.model,name:smtpclient.model_email_headers
msgid "Email Headers"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,delete_queue:0
msgid "Queue Option"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Please configure Email Server Messages [Verification / Test]"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/wizard/verifycode.py:0
#, python-format
msgid "Verification failed. Invalid Verification Code!"
msgstr ""
#. module: smtpclient
#: model:ir.actions.act_window,name:smtpclient.act_mail_server_2_mail_history
msgid "Email History"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient.history:0
msgid "Server History"
msgstr "Serveri ajalugu"
#. module: smtpclient
#: selection:email.smtpclient,auth_type:0
msgid "Yahoo!!! Server"
msgstr "Yahoo!!! Server"
#. module: smtpclient
#: view:email.smtpclient:0
#: field:email.smtpclient,test_email:0
msgid "Test Message"
msgstr "Test sõnum"
#. module: smtpclient
#: field:report.smtp.server,server_id:0
msgid "Server ID"
msgstr "Serveri ID"
#. module: smtpclient
#: help:email.smtpclient,delete_queue_period:0
msgid "delete emails/contents from email queue after specified no of days"
msgstr ""
#. module: smtpclient
#: field:report.smtp.server,no:0
msgid "Total No."
msgstr ""
#. module: smtpclient
#: help:email.smtpclient,process_id:0
msgid "Mail Transport Agent Process"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "__user__ for User Name"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,date_create:0
msgid "Date Create"
msgstr "Loomise aeg"
#. module: smtpclient
#: field:email.smtpclient,state:0
msgid "Server Status"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient.queue,error:0
msgid "Last Error"
msgstr "Viimane viga"
#. module: smtpclient
#: wizard_view:email.sendcode,init:0
#: wizard_button:email.sendcode,init,send:0
msgid "Send Code"
msgstr "Saada kood"
#. module: smtpclient
#: field:email.smtpclient.queue,name:0
msgid "Subject"
msgstr "Teema"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Read Error!"
msgstr "Lugemise viga!"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Unable to read Server Settings"
msgstr "Ei saa lugeda serveri seadeid"
#. module: smtpclient
#: field:email.smtpclient,server_statistics:0
msgid "Statistics"
msgstr "Statistika"
#. module: smtpclient
#: wizard_view:email.testemail,init:0
msgid "Test Email"
msgstr "Test e-mail"
#. module: smtpclient
#: field:email.smtpclient.history,server_id:0
msgid "Smtp Server"
msgstr ""
#. module: smtpclient
#: field:res.company,addresses:0
msgid "Email Addresses"
msgstr "E-posti aadressid"
#. module: smtpclient
#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_history_tree
#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_server_history
msgid "Email Server History"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient.queue,state:0
msgid "Waiting"
msgstr "Ootamine"
#. module: smtpclient
#: help:email.testemail,init,emailto:0
msgid "Enter the address Email where you want to get the Test Email"
msgstr "Sisestage e-maili aadresskuhu soovite saada test e-maili"
#. module: smtpclient
#: selection:email.smtpclient,state:0
msgid "Not Verified"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient.history,email:0
msgid "Email"
msgstr "E-post"
#. module: smtpclient
#: selection:email.smtpclient.queue,state:0
msgid "Sent"
msgstr "Saadetud"
#. module: smtpclient
#: field:email.smtpclient.history,user_id:0
msgid "Username"
msgstr "Kasutajanimi"
#. module: smtpclient
#: field:res.company.address,name:0
msgid "Address Type"
msgstr "Aadressi tüüp"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Permission"
msgstr "Õigus"
#. module: smtpclient
#: view:email.smtpclient.queue:0
msgid "Message with All Headers"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Message Headers"
msgstr ""
#. module: smtpclient
#: field:ir.actions.server,report_id:0
msgid "Report"
msgstr "Aruanne"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Other Information"
msgstr "Muu info"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Configuration"
msgstr "Seadistamine"
#. module: smtpclient
#: constraint:ir.cron:0
msgid "Invalid arguments"
msgstr "Vigased argumendid"
#. module: smtpclient
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Vigane XML vaate arhitektuurile!"
#. module: smtpclient
#: view:email.smtpclient:0
#: field:email.smtpclient,disclaimers:0
msgid "Disclaimers"
msgstr ""
#. module: smtpclient
#: field:report.smtp.server,name:0
msgid "Server"
msgstr "Server"
#. module: smtpclient
#: view:res.company:0
msgid "SMTP Settings"
msgstr ""
#. module: smtpclient
#: help:email.smtpclient,body:0
msgid ""
"The message text that will be send along with the email which is send "
"through this server"
msgstr ""
#. module: smtpclient
#: model:ir.actions.wizard,name:smtpclient.wizard_email_testemail
msgid "Send Test Email"
msgstr "Saada test e-mail"
#. module: smtpclient
#: model:ir.model,name:smtpclient.model_email_smtpclient_queue
msgid "Email Queue"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Server Information"
msgstr ""
#. module: smtpclient
#: help:email.verifycode,init,code:0
msgid "Enter the verification code thay you get in your verification Email"
msgstr ""
#. module: smtpclient
#: model:ir.model,name:smtpclient.model_email_smtpclient_history
msgid "Email Client History"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient,delete_queue:0
msgid "Never Delete Message"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "OpenERP Test Email!"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
#: field:email.smtpclient,body:0
#: view:email.smtpclient.queue:0
#: field:email.smtpclient.queue,serialized_message:0
msgid "Message"
msgstr "Sõnum"
#. module: smtpclient
#: field:email.smtpclient,process_id:0
msgid "MTA Process"
msgstr ""
#. module: smtpclient
#: field:email.headers,server_id:0
#: view:email.smtpclient:0
#: field:email.smtpclient,server:0
#: field:email.smtpclient.queue,server_id:0
#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_smtp_server
msgid "SMTP Server"
msgstr "SMTP server"
#. module: smtpclient
#: selection:email.smtpclient,auth_type:0
msgid "Google Server"
msgstr "Google Server"
#. module: smtpclient
#: selection:email.smtpclient,state:0
msgid "Verified"
msgstr "Verifitseeritud"
#. module: smtpclient
#: help:email.smtpclient,priority:0
msgid ""
"Priority between 0 to 10, will be used to define the MTA process priotiry"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,port:0
msgid "SMTP Port"
msgstr "SMTP Port"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Email TO Address not Defined !"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "SMTP Server Error !"
msgstr "SMTP Serveri viga!"
#. module: smtpclient
#: field:email.smtpclient,auth:0
msgid "Use Auth"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,pstate:0
msgid "Server Statue"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,user:0
msgid "User Name"
msgstr "Kasutajanimi"
#. module: smtpclient
#: field:email.smtpclient,verify_email:0
msgid "Verify Message"
msgstr "Kinnita sõnum"
#. module: smtpclient
#: model:ir.model,name:smtpclient.model_email_smtpclient
#: model:ir.module.module,shortdesc:smtpclient.module_meta_information
msgid "Email Client"
msgstr "E-posti klient"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Disclaimers Message"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "__code__ for Verification Code"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient.queue,state:0
msgid "Queued"
msgstr "Järjekorras"
#. module: smtpclient
#: field:email.smtpclient.history,date_create:0
#: field:email.smtpclient.queue,date_create:0
msgid "Date"
msgstr "Kuupäev"
#. module: smtpclient
#: field:email.smtpclient.queue,cc:0
msgid "CC to"
msgstr ""
#. module: smtpclient
#: model:email.smtpclient,verify_email:smtpclient.email_smtpclient_sendmailserver0
msgid ""
"Verification Message. This is the code\n"
"__code__ \n"
"you must copy in the OpenERP Email Server (Verify Server wizard).\n"
"Created by user __user__"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient.queue:0
#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_queue_tree
#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_smtp_server_queue
msgid "Message Queue"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient,type:0
#: selection:res.company.address,name:0
msgid "Default"
msgstr "Vaikimisi"
#. module: smtpclient
#: selection:email.smtpclient,delete_queue:0
msgid "Delete Content After"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "You have no permission to access SMTP Server : %s "
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,active:0
msgid "Active"
msgstr "Aktiivne"
#. module: smtpclient
#: model:ir.actions.act_window,name:smtpclient.act_mail_server_2_mail_queue
msgid "Message Queus"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/wizard/sendcode.py:0
#: code:addons/smtpclient/wizard/testemail.py:0
#: code:addons/smtpclient/wizard/verifycode.py:0
#: view:email.smtpclient.queue:0
#: selection:email.smtpclient.queue,state:0
#, python-format
msgid "Error"
msgstr "Viga"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Server Error!"
msgstr "Serveri viga!"
#. module: smtpclient
#: selection:email.smtpclient,delete_queue:0
msgid "Clear All After"
msgstr ""
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid ""
"Please verify Email Server, without verification you can not send Email(s)."
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,history_line:0
#: field:report.smtp.server,history:0
msgid "History"
msgstr "Ajalugu"
#. module: smtpclient
#: field:email.smtpclient.queue,priority:0
msgid "Message Priority"
msgstr "Sõnumi prioriteet"
#. module: smtpclient
#: field:ir.actions.server,file_ids:0
msgid "Attachments"
msgstr "Manused"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "__name__ for Customer Name"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient.queue:0
msgid "General"
msgstr "Üldine"
#. module: smtpclient
#: field:email.headers,key:0
msgid "Header"
msgstr "Päis"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid ""
"Verification Message. This is the code\n"
"\n"
"__code__\n"
"\n"
"you must copy in the OpenERP Email Server (Verify Server wizard).\n"
"\n"
"Created by user __user__"
msgstr ""
#. module: smtpclient
#: selection:res.company.address,name:0
msgid "Invoice"
msgstr "Arve"
#. module: smtpclient
#: wizard_view:email.verifycode,init:0
#: wizard_button:email.verifycode,init,check:0
msgid "Verify Code"
msgstr "Kinnita kood"
#. module: smtpclient
#: wizard_button:email.sendcode,init,end:0
#: wizard_button:email.testemail,init,end:0
#: wizard_button:email.verifycode,init,end:0
msgid "Cancel"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,delete_queue_period:0
msgid "Delete after"
msgstr "Kustuta hiljem"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Server is not Verified, Please Verify the Server !"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient.history,resource_id:0
msgid "Resource ID"
msgstr "Allika ID"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "SMTP Data Error !"
msgstr "SMTP andmeviga !"
#. module: smtpclient
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !"
#. module: smtpclient
#: selection:email.smtpclient,delete_queue:0
msgid "Delete when Email Sent"
msgstr "Kustuta, kui e-mail on saadetud"
#. module: smtpclient
#: selection:email.smtpclient,type:0
msgid "Account"
msgstr "Konto"
#. module: smtpclient
#: model:ir.module.module,description:smtpclient.module_meta_information
msgid ""
"Email Client module that provides:\n"
" Sending Email\n"
" Use Multiple Server\n"
" Multi Threading\n"
" Multi Attachment\n"
" "
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient,type:0
msgid "Stock"
msgstr "Laoseis"
#. module: smtpclient
#: field:email.smtpclient.history,name:0
msgid "Description"
msgstr "Kirjeldus"
#. module: smtpclient
#: field:email.smtpclient,code:0
#: wizard_field:email.verifycode,init,code:0
msgid "Verification Code"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient,pstate:0
msgid "Stop"
msgstr "Peata"
#. module: smtpclient
#: field:email.smtpclient.queue,body:0
msgid "Email Text"
msgstr "E-maili tekst"
#. module: smtpclient
#: selection:res.company.address,name:0
msgid "Delivery"
msgstr "Edastamine"
#. module: smtpclient
#: selection:email.smtpclient,pstate:0
msgid "Running"
msgstr "Töös"
#. module: smtpclient
#: view:email.smtpclient.queue:0
msgid "Last Error occured"
msgstr ""
#. module: smtpclient
#: selection:email.smtpclient,state:0
msgid "Waiting for Verification"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient,password:0
msgid "Password"
msgstr "Salasõna"
#. module: smtpclient
#: field:email.smtpclient,users_id:0
msgid "Users Allowed"
msgstr "Lubatud kasutajad"
#. module: smtpclient
#: code:addons/smtpclient/wizard/sendcode.py:0
#, python-format
msgid "Verification Code Already Generated !"
msgstr ""
#. module: smtpclient
#: wizard_field:email.sendcode,init,emailto:0
#: field:email.smtpclient,email:0
#: wizard_field:email.testemail,init,emailto:0
#: view:res.company:0
#: field:res.company.address,email:0
msgid "Email Address"
msgstr "E-posti aadress"
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Verification Message"
msgstr ""
#. module: smtpclient
#: view:email.smtpclient:0
msgid "Stop Server"
msgstr ""
#. module: smtpclient
#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_server
msgid "Email Servers"
msgstr ""
#. module: smtpclient
#: model:ir.actions.wizard,name:smtpclient.wizard_email_sendcode
msgid "Send Verification Code"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient.history,model:0
msgid "Model"
msgstr "Mudel"
#. module: smtpclient
#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_tree
#: field:ir.actions.server,email_server:0
msgid "Email Server"
msgstr "E-maili server"
#. module: smtpclient
#: code:addons/smtpclient/smtpclient.py:0
#, python-format
msgid "Permission Error!"
msgstr ""
#. module: smtpclient
#: model:ir.model,name:smtpclient.model_res_company_address
msgid "res.company.address"
msgstr ""
#. module: smtpclient
#: field:email.smtpclient.queue,state:0
msgid "Message Status"
msgstr "Sõnumi olek"
+6 -6
View File
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-12-06 14:57+0000\n"
"PO-Revision-Date: 2010-05-07 15:12+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.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: 2010-04-17 03:55+0000\n"
"X-Launchpad-Export-Date: 2010-05-08 04:04+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -50,7 +50,7 @@ msgstr "Vigane mudeli nimi toimingu definitsioonis."
#: model:ir.module.module,shortdesc:stock.module_meta_information
#: model:ir.ui.menu,name:stock.menu_stock_root
msgid "Inventory Management"
msgstr ""
msgstr "Inventari haldamine"
#. module: stock
#: selection:stock.location,icon:0
@@ -81,7 +81,7 @@ msgstr "STOCK_ZOOM_100"
#: rml:lot.stock.overview:0
#: rml:lot.stock.overview_all:0
msgid "UoM"
msgstr ""
msgstr "Mõõtühik"
#. module: stock
#: model:ir.actions.wizard,name:stock.return_picking
@@ -725,7 +725,7 @@ msgstr "Alates"
#. module: stock
#: rml:stock.picking.list:0
msgid "weight"
msgstr ""
msgstr "kaalukus"
#. module: stock
#: rml:stock.picking.list:0
@@ -1788,7 +1788,7 @@ msgstr "Toote MÜ"
#: rml:lot.stock.overview:0
#: rml:lot.stock.overview_all:0
msgid "Variants"
msgstr ""
msgstr "Variandid"
#. module: stock
#: field:stock.location,posx:0
+1 -1
View File
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-05-06 04:03+0000\n"
"X-Launchpad-Export-Date: 2010-05-07 04:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
+1 -1
View File
@@ -1214,7 +1214,7 @@ class stock_move(osv.osv):
'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin"),
'move_stock_return_history': fields.many2many('stock.move', 'stock_move_return_history', 'move_id', 'return_move_id', 'Move Return History',readonly=True),
'delivered_id': fields.many2one('stock.delivery', 'Product delivered'),
'scraped': fields.boolean('Scraped'),
'scraped': fields.related('location_dest_id','scrap_location',type='boolean',relation='stock.location',string='Scraped'),
}
_constraints = [
(_check_tracking,
+5
View File
@@ -37,6 +37,11 @@
<field name="usage">view</field>
<field name="icon">terp-mrp</field>
</record>
<record id="stock_location_scraped" model="stock.location">
<field name="name">Scraped</field>
<field name="location_id" ref="stock_location_locations_virtual"/>
<field name="scrap_location">True</field>
</record>
<record id="location_inventory" model="stock.location">
<field name="name">Inventory loss</field>
-4
View File
@@ -198,13 +198,9 @@
<field eval="1" name="active"/>
</record>
<record id="res_company_shop0" model="res.company">
<field eval="5.0" name="security_lead"/>
<field name="currency_id" ref="base.EUR"/>
<field eval="1.0" name="po_lead"/>
<field name="partner_id" ref="res_partner_tinyshop0"/>
<field eval="1.0" name="manufacturing_lead"/>
<field name="parent_id" ref="base.main_company"/>
<field eval="80.0" name="schedule_range"/>
<field eval="&quot;&quot;&quot;Shop 1&quot;&quot;&quot;" name="name"/>
</record>
<record id="res_partner_tinyshop1" model="res.partner">
+5 -5
View File
@@ -606,7 +606,7 @@
<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_out_id': address_id}">
<tree colors="grey:state in ('cancel');black:state not in ('cancel')" string="Stock Moves">
<tree colors="grey:state in ('done','cancel');black:state not in ('cancel','done')" string="Stock Moves">
<field name="name" string="Move Name"/>
<field name="product_id"/>
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
@@ -756,7 +756,7 @@
<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_out_id': address_id}">
<tree colors="grey:state in ('cancel');black:state not in ('cancel')" string="Stock Moves">
<tree colors="grey:state in ('done','cancel');black:state not in ('cancel','done')" string="Stock Moves">
<field name="name" string="Move Name"/>
<field name="product_id"/>
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
@@ -934,7 +934,7 @@
<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_out_id': address_id}">
<tree colors="grey:state in ('cancel');black:state not in ('cancel')" string="Stock Moves">
<tree colors="grey:state in ('done','cancel');black:state not in ('cancel','done')" string="Stock Moves">
<field name="name" string="Move Name"/>
<field name="product_id"/>
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
@@ -952,7 +952,7 @@
states="draft,waiting,confirmed,assigned" />
<button
name="%(stock.move_scrap)d"
string="D" type="action"
string="Scrap Products" type="action"
icon="gtk-convert"
states="draft,waiting,confirmed,assigned" />
</tree>
@@ -1109,7 +1109,7 @@
<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}">
<tree colors="grey:state in ('cancel');black:state not in ('cancel')" string="Stock Moves">
<tree colors="grey:state in ('done','cancel');black:state not in ('cancel','done')" string="Stock Moves">
<field name="product_id"/>
<field name="product_qty"/>
<field name="product_uom"/>
+36 -2
View File
@@ -86,7 +86,9 @@ class stock_move_consume(osv.osv_memory):
if 'product_uom' in fields:
res.update({'product_uom': move.product_uom.id})
if 'product_qty' in fields:
res.update({'product_qty': move.product_qty})
res.update({'product_qty': move.product_qty})
if 'location_id' in fields:
res.update({'location_id': move.location_id.id})
return res
@@ -120,9 +122,41 @@ class stock_move_scrap(osv.osv_memory):
_inherit = "stock.move.consume"
_defaults = {
'location_id': lambda *x: False
'location_id': lambda *x: False
}
def default_get(self, cr, uid, fields, context=None):
"""
Get default values
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param fields: List of fields for default value
@param context: A standard dictionary
@return: default values of fields
"""
res = super(stock_move_consume, self).default_get(cr, uid, fields, context=context)
move = self.pool.get('stock.move').browse(cr, uid, context['active_id'], context=context)
location_obj = self.pool.get('stock.location')
scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
if 'product_id' in fields:
res.update({'product_id': move.product_id.id})
if 'product_uom' in fields:
res.update({'product_uom': move.product_uom.id})
if 'product_qty' in fields:
res.update({'product_qty': move.product_qty})
if 'location_id' in fields:
if scrpaed_location_ids:
res.update({'location_id': scrpaed_location_ids[0]})
else:
res.update({'location_id': False})
return res
def move_scrap(self, cr, uid, ids, context={}):
"""
To move scraped products
+2 -2
View File
@@ -40,7 +40,7 @@
<form string="Consume Move">
<separator string="Consume Products" colspan="4"/>
<field name="product_id" colspan="4" readonly="1"/>
<field name="location_id" colspan="4"/>
<field name="location_id" colspan="4" widget="selection"/>
<field name="product_qty" colspan="2"/>
<field name="product_uom" nolabel="1" readonly="1"/>
<newline/>
@@ -73,7 +73,7 @@
<form string="Scrap Move">
<separator string="Scrap Products" colspan="4"/>
<field name="product_id" colspan="4" readonly="1"/>
<field name="location_id" colspan="4" string="Dest. Location" domain="[('usage','&lt;&gt;','view'),('scrap_location','=',True)]"/>
<field name="location_id" colspan="4" string="Dest. Location" domain="[('usage','&lt;&gt;','view'),('scrap_location','=',True)]" widget="selection"/>
<field name="product_qty" colspan="2"/>
<field name="product_uom" nolabel="1" readonly="1"/>
<newline/>
+696
View File
@@ -0,0 +1,696 @@
# Estonian translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-26 06:01+0000\n"
"PO-Revision-Date: 2010-05-07 17:04+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.com>\n"
"Language-Team: Estonian <et@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: 2010-05-08 04:05+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: survey
#: model:ir.ui.menu,name:survey.menu_survey_form
msgid "Surveys"
msgstr ""
#. module: survey
#: model:ir.actions.report.xml,name:survey.survey
msgid "Survey Analysis Report"
msgstr ""
#. module: survey
#: model:ir.actions.act_window,name:survey.act_survey_page_question
#: model:ir.ui.menu,name:survey.menu_survey_question_form1
msgid "Survey Questions"
msgstr ""
#. module: survey
#: view:survey:0
#: view:survey.response:0
msgid "Set to draft"
msgstr "Sea mustandiks"
#. module: survey
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Vigane mudeli nimi toimingu definitsioonis."
#. module: survey
#: field:survey.history,date:0
msgid "Date started"
msgstr "Alguskuupäev"
#. module: survey
#: field:survey,history:0
msgid "History Lines"
msgstr "Ajaloojooned"
#. module: survey
#: wizard_field:wizard.send.invitation,init,mail:0
msgid "Body"
msgstr "Sisu"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_view_survey_name
#: model:ir.ui.menu,name:survey.menu_run_survey_form
msgid "Give Survey Response"
msgstr ""
#. module: survey
#: model:ir.actions.act_window,name:survey.act_survey_question
msgid "All Questions"
msgstr "Kõik küsimused"
#. module: survey
#: field:survey,date_open:0
msgid "Survey Open Date"
msgstr ""
#. module: survey
#: model:ir.model,name:survey.model_survey_name_wiz
msgid "survey.name.wiz"
msgstr ""
#. module: survey
#: view:survey:0
msgid "Users Details"
msgstr "Kasutajad detailid"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_view_survey_question_message
#: model:ir.model,name:survey.model_survey_question
#: view:survey:0
#: view:survey.page:0
#: view:survey.question:0
msgid "Survey Question"
msgstr ""
#. module: survey
#: help:survey,response_user:0
msgid "Set to one if you require only one response per user"
msgstr ""
#. module: survey
#: field:survey.page,title:0
msgid "Page Title"
msgstr "Lehekülje pealkiri"
#. module: survey
#: model:ir.model,name:survey.model_survey_history
msgid "Survey History"
msgstr ""
#. module: survey
#: field:survey.response,comment:0
#: field:survey.response.answer,comment:0
msgid "Notes"
msgstr "Märkused"
#. module: survey
#: field:survey.question,tot_resp:0
msgid "Total Response"
msgstr ""
#. module: survey
#: view:survey.question.wiz:0
msgid "Your Messages"
msgstr "Sinu sõnumid"
#. module: survey
#: selection:survey,state:0
msgid "Cancelled"
msgstr "Katkestatud"
#. module: survey
#: field:survey.question,allow_comment:0
msgid "Allow Comment Field"
msgstr ""
#. module: survey
#: code:addons/survey/survey.py:0
#, python-format
msgid "Warning !"
msgstr "Hoiatus!"
#. module: survey
#: wizard_view:wizard.send.invitation,init:0
#: wizard_field:wizard.send.invitation,init,send_mail_existing:0
msgid "Send reminder for existing user"
msgstr ""
#. module: survey
#: model:ir.actions.act_window,name:survey.action_new_survey_question_form
#: model:ir.ui.menu,name:survey.menu_new_survey_question_form1
msgid "New Survey Question"
msgstr ""
#. module: survey
#: view:survey.response:0
msgid "Skip"
msgstr "Hüpe"
#. module: survey
#: wizard_field:wizard.send.invitation,init,partner_ids:0
msgid "Partner"
msgstr "Partner"
#. module: survey
#: wizard_field:wizard.send.invitation,init,mail_subject:0
#: wizard_field:wizard.send.invitation,init,mail_subject_existing:0
msgid "Subject"
msgstr "Subjekt"
#. module: survey
#: field:survey,max_response_limit:0
msgid "Maximum Response Limit"
msgstr ""
#. module: survey
#: wizard_field:wizard.send.invitation,init,mail_from:0
msgid "From"
msgstr ""
#. module: survey
#: field:survey.response,response_type:0
msgid "Response Type"
msgstr ""
#. module: survey
#: field:survey.name.wiz,transfer:0
msgid "Page Transfer"
msgstr "Lehe ülekanne"
#. module: survey
#: field:survey.answer,question_id:0
#: field:survey.page,question_ids:0
#: field:survey.question,question:0
#: field:survey.response,question_id:0
msgid "Question"
msgstr "Küsimus"
#. module: survey
#: wizard_button:wizard.send.invitation,init,send:0
msgid "Send"
msgstr "Saada"
#. module: survey
#: field:survey.answer,response:0
msgid "#Response"
msgstr ""
#. module: survey
#: field:survey.response,response_answer_ids:0
msgid "Response Answer"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "Response Summary"
msgstr ""
#. module: survey
#: wizard_view:wizard.send.invitation,init:0
#: wizard_field:wizard.send.invitation,init,send_mail:0
msgid "Send mail for new user"
msgstr ""
#. module: survey
#: code:addons/survey/survey.py:0
#, python-format
msgid "Error !"
msgstr "Viga !"
#. module: survey
#: rml:survey_analysis_report:0
msgid "Skipped Question"
msgstr ""
#. module: survey
#: wizard_button:wizard.send.invitation,send,end:0
msgid "_Ok"
msgstr "_Ok"
#. module: survey
#: selection:survey.response,response_type:0
msgid "Link"
msgstr "Link"
#. module: survey
#: model:ir.ui.menu,name:survey.menu_survey_config
msgid "Configuration"
msgstr "Seadistamine"
#. module: survey
#: model:ir.model,name:survey.model_survey_question_wiz
msgid "survey.question.wiz"
msgstr ""
#. module: survey
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Vigane XML vaate arhitektuurile!"
#. module: survey
#: model:ir.model,name:survey.model_survey_response_answer
#: view:survey.response.answer:0
msgid "Survey Response Answer"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "Page :-"
msgstr "Lehekülg :-"
#. module: survey
#: field:survey,response_user:0
msgid "Maximum Response per User"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "Total Started Survey :-"
msgstr ""
#. module: survey
#: view:survey.response:0
msgid "Comment"
msgstr "Kommentaar"
#. module: survey
#: field:survey.response,date_modify:0
msgid "Modify Date"
msgstr "Muutmise aeg"
#. module: survey
#: rml:survey_analysis_report:0
msgid "Answered Question"
msgstr ""
#. module: survey
#: code:addons/survey/survey.py:0
#, python-format
msgid "You can not give response for this survey more than %s times"
msgstr ""
#. module: survey
#: selection:survey.response,response_type:0
msgid "Manually"
msgstr "Käsitsi"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_survey_form1
msgid "All Surveys"
msgstr ""
#. module: survey
#: view:survey:0
#: field:survey,users:0
msgid "Users"
msgstr "Kasutajad"
#. module: survey
#: wizard_view:wizard.send.invitation,init:0
msgid "Message"
msgstr "Sõnum"
#. module: survey
#: field:survey.name.wiz,page_no:0
msgid "Page Number"
msgstr "Lehekülje number"
#. module: survey
#: wizard_field:wizard.send.invitation,send,note:0
msgid "Log"
msgstr "Logi"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_survey_question_form
msgid "All Survey Questions"
msgstr ""
#. module: survey
#: field:survey,date_close:0
msgid "Survey Close Date"
msgstr ""
#. module: survey
#: view:survey.name.wiz:0
msgid "Start"
msgstr "Käivita"
#. module: survey
#: selection:survey,state:0
#: selection:survey.response,state:0
msgid "Draft"
msgstr "Mustand"
#. module: survey
#: selection:survey,state:0
msgid "Closed"
msgstr "Suletud"
#. module: survey
#: view:survey:0
#: field:survey.answer,answer:0
#: view:survey.page:0
#: view:survey.question:0
#: field:survey.question,answer_choice_ids:0
#: field:survey.response.answer,answer_id:0
msgid "Answer"
msgstr "Vastus"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_survey_page_form
msgid "All Survey Pages"
msgstr ""
#. module: survey
#: field:survey.name.wiz,store_ans:0
msgid "Store Answer"
msgstr ""
#. module: survey
#: field:survey,state:0
#: field:survey.response,state:0
msgid "Status"
msgstr "Olek"
#. module: survey
#: model:ir.module.module,shortdesc:survey.module_meta_information
msgid "Survey Module"
msgstr ""
#. module: survey
#: model:ir.module.module,description:survey.module_meta_information
msgid ""
"\n"
" This module is used for surveing. It depends on the answers or reviews "
"of some questions by different users.\n"
" A survey may have multiple pages. Each page may contain multiple "
"questions and each question may have multiple answers.\n"
" Different users may give different answers of question and according to "
"that survey is done. \n"
" Partners are also sent mails with user name and password for the "
"invitation of the survey\n"
" "
msgstr ""
#. module: survey
#: view:survey:0
#: view:survey.name.wiz:0
msgid "Survey Details"
msgstr ""
#. module: survey
#: field:survey.question,is_require_answer:0
msgid "Required Answer"
msgstr ""
#. module: survey
#: field:survey.history,user_id:0
#: field:survey.response,response_id:0
msgid "User"
msgstr "Kasutaja"
#. module: survey
#: field:res.users,survey_id:0
msgid "Groups"
msgstr "Grupid"
#. module: survey
#: view:survey:0
#: view:survey.page:0
#: view:survey.question:0
#: field:survey.question,response_ids:0
#: view:survey.response:0
#: field:survey.response.answer,response_id:0
msgid "Response"
msgstr "Vastus"
#. module: survey
#: model:ir.actions.act_window,name:survey.action_new_survey_form1
#: model:ir.ui.menu,name:survey.menu_new_survey_form
msgid "New Survey"
msgstr ""
#. module: survey
#: model:ir.ui.menu,name:survey.main_menu_survey
msgid "Survey Management"
msgstr ""
#. module: survey
#: selection:survey.response,state:0
msgid "Skiped"
msgstr ""
#. module: survey
#: model:ir.model,name:survey.model_survey_answer
#: view:survey.answer:0
msgid "Survey Answer"
msgstr ""
#. module: survey
#: code:addons/survey/wizard/wizard_survey.py:0
#, python-format
msgid "Attention!"
msgstr "Tähelepanu!"
#. module: survey
#: model:ir.model,name:survey.model_survey
#: view:res.users:0
#: view:survey:0
#: field:survey.history,survey_id:0
#: view:survey.name.wiz:0
#: field:survey.name.wiz,survey_id:0
#: field:survey.page,survey_id:0
#: field:survey.question,survey:0
msgid "Survey"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "Total Completed Survey :-"
msgstr ""
#. module: survey
#: view:survey:0
msgid "History"
msgstr "Ajalugu"
#. module: survey
#: view:survey:0
#: view:survey.answer:0
#: view:survey.page:0
#: view:survey.question:0
msgid "Seq"
msgstr "Jrk"
#. module: survey
#: field:survey,tot_comp_survey:0
msgid "Total Completed Survey"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "Response Percentage"
msgstr ""
#. module: survey
#: field:survey.question.wiz,name:0
msgid "Number"
msgstr "Number"
#. module: survey
#: rml:survey_analysis_report:0
msgid "Survey Title :-"
msgstr ""
#. module: survey
#: view:survey.response:0
msgid "Done"
msgstr "Valmis"
#. module: survey
#: code:addons/survey/survey.py:0
#, python-format
msgid "'\" + que_rec[0]['question'] + \"' This question requires an answer."
msgstr "'\" + que_rec[0]['question'] + \"' See küsimus nõuab vastust."
#. module: survey
#: view:survey:0
#: view:survey.name.wiz:0
#: wizard_button:wizard.send.invitation,init,end:0
msgid "Cancel"
msgstr "Katkesta"
#. module: survey
#: view:survey:0
msgid "Close"
msgstr "Sulge"
#. module: survey
#: view:survey:0
#: selection:survey,state:0
msgid "Open"
msgstr "Ava"
#. module: survey
#: field:survey,tot_start_survey:0
msgid "Total Started Survey"
msgstr ""
#. module: survey
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !"
#. module: survey
#: model:ir.model,name:survey.model_survey_response
#: view:survey.response:0
msgid "Survey Response"
msgstr ""
#. module: survey
#: field:survey.answer,average:0
msgid "#Avg"
msgstr ""
#. module: survey
#: field:survey,responsible_id:0
msgid "Responsible"
msgstr "Vastutaja"
#. module: survey
#: selection:survey.response,state:0
msgid "Answered"
msgstr "Vastatud"
#. module: survey
#: view:survey:0
msgid "Other"
msgstr "Muu"
#. module: survey
#: model:ir.actions.wizard,name:survey.wizard_send_invitation
#: wizard_view:wizard.send.invitation,init:0
msgid "Send Invitation"
msgstr "Saada kutse"
#. module: survey
#: field:survey,title:0
msgid "Survey Title"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "%"
msgstr "%"
#. module: survey
#: view:survey:0
#: field:survey,note:0
#: field:survey.name.wiz,note:0
#: view:survey.page:0
#: field:survey.page,note:0
#: view:survey.response:0
msgid "Description"
msgstr "Kirjeldus"
#. module: survey
#: view:survey.name.wiz:0
msgid "Select Survey"
msgstr ""
#. module: survey
#: model:ir.actions.act_window,name:survey.action_new_survey_page_form
#: model:ir.ui.menu,name:survey.menu_new_survey_page_form1
msgid "New Survey Page"
msgstr ""
#. module: survey
#: view:survey:0
#: view:survey.page:0
#: field:survey.question,page_id:0
msgid "Survey Page"
msgstr ""
#. module: survey
#: model:ir.actions.act_window,name:survey.act_survey_answer
msgid "Survey Answers"
msgstr ""
#. module: survey
#: view:survey.page:0
msgid "#Questions"
msgstr "#Küsimused"
#. module: survey
#: rml:survey_analysis_report:0
msgid "Que:"
msgstr ""
#. module: survey
#: field:survey,page_ids:0
msgid "Page"
msgstr "Lehekülg"
#. module: survey
#: wizard_view:wizard.send.invitation,send:0
msgid "User creation"
msgstr "Kasutaja loomine"
#. module: survey
#: field:survey.answer,sequence:0
#: field:survey.page,sequence:0
#: field:survey.question,sequence:0
msgid "Sequence"
msgstr "Järjestus"
#. module: survey
#: wizard_view:wizard.send.invitation,send:0
msgid "Results :"
msgstr "Tulemused :"
#. module: survey
#: code:addons/survey/wizard/wizard_survey.py:0
#, python-format
msgid "%sSurvey is not in open state"
msgstr ""
#. module: survey
#: wizard_view:wizard.send.invitation,init:0
msgid "Select Partner"
msgstr "Märgi partner"
#. module: survey
#: field:survey.response,date_create:0
msgid "Create Date"
msgstr "Loomise aeg"
#. module: survey
#: model:ir.actions.act_window,name:survey.act_survey_pages
#: model:ir.model,name:survey.model_survey_page
#: model:ir.ui.menu,name:survey.menu_survey_page_form1
msgid "Survey Pages"
msgstr ""
#. module: survey
#: rml:survey_analysis_report:0
msgid "Response Count"
msgstr ""
#. module: survey
#: field:survey.name.wiz,page:0
msgid "Page Position"
msgstr ""
+86
View File
@@ -0,0 +1,86 @@
# Estonian translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-26 06:05+0000\n"
"PO-Revision-Date: 2010-05-07 16:33+0000\n"
"Last-Translator: lyyser <logard.1961@gmail.com>\n"
"Language-Team: Estonian <et@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: 2010-05-08 04:05+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: thunderbird
#: field:tinythunderbird.partner,copy_to:0
msgid "Copy To"
msgstr "Kopeeri..."
#. module: thunderbird
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !"
#. module: thunderbird
#: field:tinythunderbird.partner,description:0
msgid "Description"
msgstr "Kirjeldus"
#. module: thunderbird
#: field:tinythunderbird.partner,reference:0
msgid "Reference"
msgstr "Viide"
#. module: thunderbird
#: model:ir.model,name:thunderbird.model_tinythunderbird_partner
msgid "Thunderbid mails"
msgstr "Thunderbid kirjad"
#. module: thunderbird
#: field:tinythunderbird.partner,attachments:0
msgid "Attached Files"
msgstr "Lisatud failid"
#. module: thunderbird
#: field:tinythunderbird.partner,res_user_id:0
msgid "User"
msgstr "Kasutaja"
#. module: thunderbird
#: field:tinythunderbird.partner,receiver:0
msgid "Receiver"
msgstr "Saaja"
#. module: thunderbird
#: field:tinythunderbird.partner,date:0
msgid "Date"
msgstr "Kuupäev"
#. module: thunderbird
#: field:tinythunderbird.partner,title:0
msgid "Subject"
msgstr "Subjekt"
#. module: thunderbird
#: code:addons/thunderbird/partner/partner.py:0
#, python-format
msgid "Archive"
msgstr "Arhiiv"
#. module: thunderbird
#: model:ir.module.module,shortdesc:thunderbird.module_meta_information
msgid "Thunderbird Interface"
msgstr "Thunderbird liides"
#. module: thunderbird
#: field:tinythunderbird.partner,sender:0
msgid "Sender"
msgstr "Saatja"

Some files were not shown because too many files have changed in this diff Show More