[MERGE]: Merge with lp:openobject-addons

bzr revid: ksa@tinyerp.co.in-20100426054329-fmty0j1ac8kxs46a
This commit is contained in:
ksa (Open ERP)
2010-04-26 11:13:29 +05:30
85 changed files with 2362 additions and 1387 deletions
+2
View File
@@ -70,6 +70,8 @@ module named account_voucherss
'wizard/account_pay_invoice_view.xml',
'wizard/account_unreconcile_view.xml',
'wizard/account_invoice_state_view.xml',
'wizard/account_use_model_view.xml',
'wizard/account_partner_balance_report_view.xml',
'project/wizard/project_account_analytic_line_view.xml',
'account_view.xml',
'account_end_fy.xml',
+18 -12
View File
@@ -291,7 +291,7 @@ class account_account(osv.osv):
"special effects in Open ERP: view can not have entries, consolidation are accounts that "\
"can have children accounts for multi-company consolidations, payable/receivable are for "\
"partners accounts (for debit/credit computations), closed for depreciated accounts."),
'user_type': fields.many2one('account.account.type', 'Account Type', required=True,
'user_type': fields.many2one('account.account.type', 'Account Type', required=True,
help="These types are defined according to your country. The type contains more information "\
"about the account and its specificities."),
'parent_id': fields.many2one('account.account', 'Parent', ondelete='cascade'),
@@ -437,18 +437,18 @@ class account_account(osv.osv):
elif method == 'unlink':
raise osv.except_osv(_('Error !'), _('You cannot remove an account which has account entries!. '))
return True
def write(self, cr, uid, ids, vals, context=None):
if not context:
context = {}
if 'active' in vals and not vals['active']:
self._check_moves(cr, uid, ids, "write", context)
return super(account_account, self).write(cr, uid, ids, vals, context=context)
def unlink(self, cr, uid, ids, context={}):
self._check_moves(cr, uid, ids, "unlink", context)
return super(account_account, self).unlink(cr, uid, ids, context)
account_account()
class account_journal_view(osv.osv):
@@ -791,7 +791,7 @@ class account_move(osv.osv):
for id in ids:
result.setdefault(id, 0.0)
return result
def _search_amount(self, cr, uid, obj, name, args, context):
ids = []
cr.execute('select move_id,sum(debit) from account_move_line group by move_id')
@@ -801,10 +801,10 @@ class account_move(osv.osv):
if item[1] == '>=':
res = [('id', 'in', [k for k,v in result.iteritems() if v >= item[2]])]
else:
res = [('id', 'in', [k for k,v in result.iteritems() if v <= item[2]])]
res = [('id', 'in', [k for k,v in result.iteritems() if v <= item[2]])]
ids += res
if not ids:
if not ids:
return [('id', '>', '0')]
return ids
@@ -1056,7 +1056,13 @@ class account_move(osv.osv):
if line.account_id.currency_id.id != line.currency_id.id and (line.account_id.currency_id.id != line.account_id.company_id.currency_id.id or line.currency_id):
raise osv.except_osv(_('Error'), _("""Couldn't create move with currency different from the secondary currency of the account "%s - %s". Clear the secondary currency field of the account definition if you want to accept all currencies.""" % (line.account_id.code, line.account_id.name)))
if abs(amount) < 0.0001:
# Check that the move balances, the tolerance for debit/credit must
# be smaller than the smallest value according to price accuracy
# (hence the +1 below)
# Example:
# difference == 0.01 is OK iff price_accuracy <= 1!
# difference == 0.0001 is OK iff price_accuracy <= 3!
if abs(amount) < 10 ** -(int(config['price_accuracy'])):
if not len(line_draft_ids):
continue
self.pool.get('account.move.line').write(cr, uid, line_draft_ids, {
@@ -1126,7 +1132,7 @@ class account_move_reconcile(osv.osv):
'name': lambda self,cr,uid,ctx={}: self.pool.get('ir.sequence').get(cr, uid, 'account.reconcile') or '/',
}
def reconcile_partial_check(self, cr, uid, ids, type='auto', context={}):
total = 0.0
total = 0.0
for rec in self.browse(cr, uid, ids, context):
for line in rec.line_partial_ids:
total += (line.debit or 0.0) - (line.credit or 0.0)
@@ -1880,7 +1886,7 @@ account_account_template()
class account_add_tmpl_wizard(osv.osv_memory):
"""Add one more account from the template.
With the 'nocreate' option, some accounts may not be created. Use this to add them later."""
_name = 'account.addtmpl.wizard'
@@ -1906,7 +1912,7 @@ class account_add_tmpl_wizard(osv.osv_memory):
_defaults = {
'cparent_id': _get_def_cparent,
}
def action_create(self,cr,uid,ids,context=None):
acc_obj=self.pool.get('account.account')
tmpl_obj=self.pool.get('account.account.template')
@@ -1933,7 +1939,7 @@ class account_add_tmpl_wizard(osv.osv_memory):
# print "Creating:", vals
new_account = acc_obj.create(cr,uid,vals)
return {'type':'state', 'state': 'end' }
def action_cancel(self,cr,uid,ids,context=None):
return { 'type': 'state', 'state': 'end' }
+1 -1
View File
@@ -1176,7 +1176,7 @@
<separator string="Legend" colspan="4"/>
<field name="legend" colspan="4" nolabel="1"/>
<group col="1" colspan="4">
<button name="%(wizard_account_use_model)d" string="Create entries" type="action" icon="gtk-execute"/>
<button name="%(action_account_use_model_create_entry)d" string="Create entries" type="action" icon="gtk-execute"/>
</group>
</form>
</field>
+5 -5
View File
@@ -76,8 +76,8 @@
<menuitem icon="STOCK_PRINT" action="wizard_aged_trial_balance" id="menu_aged_trial_balance" parent="next_id_22" type="wizard"/>
<!-- report-related wizards -->
<wizard id="wizard_partner_balance_report" menu="False" model="res.partner" name="account.partner.balance.report" string="Partner Balance"/>
<menuitem icon="STOCK_PRINT" action="wizard_partner_balance_report" id="menu_partner_balance" parent="account.next_id_22" type="wizard"/>
<!-- <wizard id="wizard_partner_balance_report" menu="False" model="res.partner" name="account.partner.balance.report" string="Partner Balance"/>
<menuitem icon="STOCK_PRINT" action="wizard_partner_balance_report" id="menu_partner_balance" parent="account.next_id_22" type="wizard"/> -->
<wizard id="wizard_third_party_ledger" menu="False" model="res.partner" name="account.third_party_ledger.report" string="Partner Ledger"/>
<menuitem icon="STOCK_PRINT" action="wizard_third_party_ledger" id="menu_third_party_ledger" parent="account.next_id_22" type="wizard"/>
@@ -96,10 +96,10 @@
<wizard id="wizard_validate_account_moves_line" menu="True" model="account.move.line" name="account.move_line.validate" string="Validate Ledger Postings"/>-->
<!-- Use Models -->
<wizard string="Create Entries From Models" model="account.model" name="account_use_models" menu="False" id="wizard_account_use_model"/>
<menuitem action="wizard_account_use_model" type="wizard" parent="account.menu_finance_recurrent_entries" id="menu_account_use_model"/>
<!-- <wizard string="Create Entries From Models" model="account.model" name="account_use_models" menu="False" id="wizard_account_use_model"/>-->
<!-- <menuitem action="wizard_account_use_model" type="wizard" parent="account.menu_finance_recurrent_entries" id="menu_account_use_model"/>-->
<wizard string="Create Entries From Models" model="account.move.line" name="account_use_models" menu="True" id="wizard_line_account_use_model"/>
<!-- <wizard string="Create Entries From Models" model="account.move.line" name="account_use_models" menu="True" id="wizard_line_account_use_model"/>-->
<!-- account.invoice -->
<!-- <wizard string="Open State" model="account.invoice" name="account.wizard_paid_open" menu="False" id="wizard_paid_open" groups="base.group_user"/> -->
+10 -10
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-11 12:31+0000\n"
"PO-Revision-Date: 2010-04-25 17:34+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-04-17 04:07+0000\n"
"X-Launchpad-Export-Date: 2010-04-26 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -1121,7 +1121,7 @@ msgstr "Wylicz kod dla cen z podatkiem"
#: model:ir.actions.act_window,name:account.action_tax_code_list
#: model:ir.ui.menu,name:account.menu_action_tax_code_list
msgid "Tax codes"
msgstr "Prawa podatkowe"
msgstr "Rejestr podatkowy"
#. module: account
#: field:account.fiscal.position.template,chart_template_id:0
@@ -1151,7 +1151,7 @@ msgstr "Szablony obszarów podatkowych"
#: rml:account.invoice:0
#: field:account.invoice.line,price_unit:0
msgid "Unit Price"
msgstr "Cena jednostkowa"
msgstr "Cena jedn."
#. module: account
#: rml:account.analytic.account.journal:0
@@ -1562,7 +1562,7 @@ msgstr "Szablony planu kont"
#. module: account
#: field:account.invoice,move_id:0
msgid "Invoice Movement"
msgstr "Zapisy faktury"
msgstr "Nr zapisu faktury"
#. module: account
#: model:ir.actions.act_window,name:account.action_wizard_multi_chart
@@ -2042,7 +2042,7 @@ msgstr "Dziennik - nazwa okresu"
#: field:account.tax.code,name:0
#: field:account.tax.code.template,name:0
msgid "Tax Case Name"
msgstr ""
msgstr "Nazwa rejestru"
#. module: account
#: help:account.journal,entry_posted:0
@@ -3077,7 +3077,7 @@ msgstr "Zapis dla tej pozycji."
#. module: account
#: field:account.invoice.line,uos_id:0
msgid "Unit of Measure"
msgstr "Jednostka miary"
msgstr "Jedn. miary"
#. module: account
#: field:account.chart.template,property_account_receivable:0
@@ -4095,7 +4095,7 @@ msgstr "Kwota opodatkowana"
#. module: account
#: field:account.invoice.line,price_subtotal:0
msgid "Subtotal w/o tax"
msgstr "Suma częściowa bez podatku"
msgstr "Wartość"
#. module: account
#: field:account.invoice.line,invoice_id:0
@@ -5041,7 +5041,7 @@ msgstr "Opis podatku"
#. module: account
#: help:account.invoice,move_id:0
msgid "Link to the automatically generated account moves."
msgstr "Łącznik do automatycznie wygenerowanych zapisów konta."
msgstr "Numer automatycznie wygenerowanego zapisu konta."
#. module: account
#: wizard_field:account.automatic.reconcile,reconcile,reconciled:0
@@ -5771,7 +5771,7 @@ msgstr ""
#: field:account.tax.code,code:0
#: field:account.tax.code.template,code:0
msgid "Case Code"
msgstr ""
msgstr "Kod rejestru"
#. module: account
#: selection:account.automatic.reconcile,init,power:0
+4 -4
View File
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-08 15:51+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-25 12:11+0000\n"
"Last-Translator: Dragan Životić <dragan_zivotic@yahoo.com>\n"
"Language-Team: Serbian <sr@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:07+0000\n"
"X-Launchpad-Export-Date: 2010-04-26 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
#: field:account.tax.template,description:0
msgid "Internal Name"
msgstr "Interni naziv"
msgstr "Interno ime"
#. module: account
#: view:account.tax.code:0
+4 -10
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-03-24 14:33+0000\n"
"Last-Translator: Anders Eriksson (Mobila System) <ae@mobilasystem.se>\n"
"PO-Revision-Date: 2010-04-21 15:12+0000\n"
"Last-Translator: djn (XCLUDE) <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 04:08+0000\n"
"X-Launchpad-Export-Date: 2010-04-22 03:43+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -26,12 +26,6 @@ msgstr "Internt namn"
msgid "Account Tax Code"
msgstr "Konto, skattekod"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree9
#: model:ir.ui.menu,name:account.menu_action_invoice_tree9
msgid "Unpaid Supplier Invoices"
msgstr "Obetalda leverantörsfakturor"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_entries
msgid "Entries Encoding"
@@ -1593,7 +1587,7 @@ msgstr "Moms"
#. module: account
#: rml:account.analytic.account.journal:0
msgid "Account n°"
msgstr ""
msgstr "Konto Nr"
#. module: account
#: view:account.tax:0
+6 -6
View File
@@ -7,24 +7,24 @@ 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-09-16 17:14+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-22 09:56+0000\n"
"Last-Translator: BlueT - Matthew Lien - 練喆明 <bluet@ubuntu-tw.org>\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:08+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
#: field:account.tax.template,description:0
msgid "Internal Name"
msgstr ""
msgstr "內部名稱"
#. module: account
#: view:account.tax.code:0
msgid "Account Tax Code"
msgstr ""
msgstr "會計稅碼"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree9
@@ -177,7 +177,7 @@ msgstr ""
#. module: account
#: field:account.config.wizard,charts:0
msgid "Charts of Account"
msgstr ""
msgstr "會計圖表"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_move_line_select
+28 -25
View File
@@ -67,10 +67,10 @@ class partner_balance(report_sxw.rml_parse):
## Get All Period Date
#
# If we have no period we will take all perdio in the FiscalYear.
if not data['form']['periods'][0][2] :
if not data['form']['periods']:
periods_id = self.pool.get('account.period').search(self.cr, self.uid, [('fiscalyear_id','=',data['form']['fiscalyear'])])
else:
periods_id = data['form']['periods'][0][2]
periods_id = data['form']['periods']
date_array = []
for period_id in periods_id:
period_obj = self.pool.get('account.period').browse(self.cr, self.uid, period_id)
@@ -85,35 +85,38 @@ class partner_balance(report_sxw.rml_parse):
self.date_lst.sort()
def transform_both_into_date_array(self,data):
if not data['form']['periods'][0][2] :
final_date_array = []
date_start_date = data['form']['date1']
date_stop_date = data['form']['date2']
if not data['form']['periods']:
periods_id = self.pool.get('account.period').search(self.cr, self.uid, [('fiscalyear_id','=',data['form']['fiscalyear'])])
else:
periods_id = data['form']['periods'][0][2]
periods_id = data['form']['periods']
date_array = []
for period_id in periods_id:
period_obj = self.pool.get('account.period').browse(self.cr, self.uid, period_id)
date_array = date_array + self.date_range(period_obj.date_start,period_obj.date_stop)
if periods_id:
for period_id in periods_id:
period_obj = self.pool.get('account.period').browse(self.cr, self.uid, period_id)
date_array = date_array + self.date_range(period_obj.date_start,period_obj.date_stop)
period_start_date = date_array[0]
period_stop_date = date_array[-1]
period_start_date = date_array[0]
date_start_date = data['form']['date1']
period_stop_date = date_array[-1]
date_stop_date = data['form']['date2']
if period_start_date<date_start_date:
start_date = period_start_date
else :
start_date = date_start_date
if period_start_date<date_start_date:
start_date = period_start_date
if date_stop_date<period_stop_date:
stop_date = period_stop_date
else :
stop_date = date_stop_date
final_date_array = final_date_array + self.date_range(start_date,stop_date)
self.date_lst = final_date_array
self.date_lst.sort()
else :
start_date = date_start_date
if date_stop_date<period_stop_date:
stop_date = period_stop_date
else :
stop_date = date_stop_date
final_date_array = []
final_date_array = final_date_array + self.date_range(start_date,stop_date)
self.date_lst = final_date_array
self.date_lst.sort()
final_date_array = final_date_array + self.date_range(date_start_date,date_stop_date)
self.date_lst = final_date_array
self.date_lst.sort()
def transform_none_into_date_array(self,data):
+2 -3
View File
@@ -33,8 +33,7 @@ import account_subscription_generate
import wizard_aged_trial_balance
import wizard_general_ledger_report
import wizard_third_party_ledger
import wizard_account_balance_report
import wizard_partner_balance_report
import account_partner_balance_report
import account_period_close
import account_fiscalyear_close
import account_fiscalyear_close_state
@@ -48,7 +47,7 @@ import account_chart
import wizard_move_line_select
import account_validate_account_move
import wizard_use_model
import account_use_model
import account_state_open
@@ -0,0 +1,109 @@
# -*- 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 time
from tools.translate import _
from osv import fields, osv
class account_partner_balance(osv.osv_memory):
"""
This wizard will provide the partner balance report by periods, between any two dates.
"""
_name = 'account.partner.balance'
_description = 'Account Partner Balance'
_columns = {
'company_id': fields.many2one('res.company', 'Company', required=True),
'state': fields.selection([('bydate','By Date'),
('byperiod','By Period'),
('all','By Date and Period'),
('none','No Filter')
],'Date/Period Filter'),
'fiscalyear': fields.many2one('account.fiscalyear', 'Fiscal year', help='Keep empty for all open fiscal year'),
'periods': fields.many2many('account.period', 'period_report_rel', 'report_id', 'period_id', 'Periods', help='All periods if empty'),
'result_selection': fields.selection([('customer','Receivable Accounts'),
('supplier','Payable Accounts'),
('all','Receivable and Payable Accounts')],
'Partner', required=True),
'soldeinit': fields.boolean('Include initial balances'),
'date1': fields.date('Start date', required=True),
'date2': fields.date('End date', required=True),
}
def _get_company(self, cr, uid, ids, context=None):
user_obj = self.pool.get('res.users')
company_obj = self.pool.get('res.company')
user = user_obj.browse(cr, uid, uid, context=context)
if user.company_id:
return user.company_id.id
else:
return company_obj.search(cr, uid, [('parent_id', '=', False)])[0]
_defaults={
'state' : 'none',
'date1' : lambda *a: time.strftime('%Y-01-01'),
'date2' : lambda *a: time.strftime('%Y-%m-%d'),
'result_selection' : lambda *a: 'all',
'soldeinit' : True,
'company_id' : _get_company,
'fiscalyear' : False,
}
def check_state(self, cr, uid, ids, context=None):
data = {
'ids':[],
'model': 'res.partner',
'form': self.read(cr, uid, ids, [])[0],
}
if data['form']['state'] == 'bydate' :
return self._check_date(cr, uid, data, context)
if data['form']['state'] == 'byperiod':
if not data['form']['periods']:
raise osv.except_osv(_('Warning'),_('Please Enter Periods ! '))
return {
'type': 'ir.actions.report.xml',
'report_name': 'account.partner.balance',
'datas': data,
}
def _check_date(self, cr, uid, data, context):
sql = """
SELECT f.id, f.date_start, f.date_stop FROM account_fiscalyear f Where %s between f.date_start and f.date_stop """
cr.execute(sql,(data['form']['date1'],))
res = cr.dictfetchall()
if res:
if (data['form']['date2'] > res[0]['date_stop'] or data['form']['date2'] < res[0]['date_start']):
raise osv.except_osv(_('UserError'),_('Date to must be set between %s and %s') % (str(res[0]['date_start']), str(res[0]['date_stop'])))
else:
return {
'type': 'ir.actions.report.xml',
'report_name': 'account.partner.balance',
'datas': data,
}
else:
raise osv.except_osv(_('UserError'),_('Date not in a defined fiscal year'))
account_partner_balance()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="account_partner_balance_view" model="ir.ui.view">
<field name="name">Select period</field>
<field name="model">account.partner.balance</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Select Date-Period">
<field name="company_id"/>
<field name="result_selection" required = "True"/>
<newline/>
<field name="fiscalyear"/>
<label colspan="2" string="(Keep empty for all open fiscal years)" align="0.0"/>
<newline/>
<separator string="Filters" colspan="4"/>
<field name="state" required="True"/>
<newline/>
<group attrs="{'invisible':[('state','=','none')]}" colspan="4">
<group attrs="{'invisible':[('state','=','byperiod')]}" colspan="4">
<separator string="Date Filter" colspan="4"/>
<field name="date1"/>
<field name="date2"/>
</group>
<group attrs="{'invisible':[('state','=','bydate')]}" colspan="4">
<separator string="Filter on Periods" colspan="4"/>
<field name="periods" colspan="4" nolabel="1"/>
</group>
</group>
<newline/>
<group colspan="4" col="6">
<label string ="" colspan="2"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="check_state" string="Print" type="object" icon="gtk-print"/>
</group>
</form>
</field>
</record>
<record id="action_account_partner_balance" model="ir.actions.act_window">
<field name="name">Select Period</field>
<field name="res_model">account.partner.balance</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="account_partner_balance_view"/>
<field name="context">{'record_id':active_id}</field>
<field name="target">new</field>
</record>
<menuitem icon="STOCK_PRINT"
name="Partner Balance"
action="action_account_partner_balance"
id="menu_account_partner_balance_report"
parent="account.next_id_22"/>
</data>
</openerp>
+116
View File
@@ -0,0 +1,116 @@
# -*- 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 time
import datetime
from osv import fields, osv
from tools.translate import _
class account_use_model(osv.osv_memory):
_name = 'account.use.model'
_description = 'Use model'
_columns = {
'model': fields.many2many('account.model', 'account_use_model_relation','account_id','model_id','Account Model'),
}
def create_entries(self, cr, uid, ids, context=None):
account_model_obj = self.pool.get('account.model')
account_period_obj = self.pool.get('account.period')
account_move_obj = self.pool.get('account.move')
account_move_line_obj = self.pool.get('account.move.line')
mod_obj = self.pool.get('ir.model.data')
if context is None:
context = {}
data = self.read(cr, uid, ids,context=context)[0]
record_id = context and context.get('model_line', False) or False
if record_id:
data_model = account_model_obj.browse(cr,uid,data['model'])
else:
data_model = account_model_obj.browse(cr,uid,context['active_ids'])
move_ids = []
for model in data_model:
period_id = account_period_obj.find(cr, uid, context=context)
if not period_id:
raise osv.except_osv(_('No period found !'), _('Unable to find a valid period !'))
period_id = period_id[0]
move_id = account_move_obj.create(cr, uid, {
'ref': model.ref,
'period_id': period_id,
'journal_id': model.journal_id.id,
})
move_ids.append(move_id)
for line in model.lines_id:
val = {
'move_id': move_id,
'journal_id': model.journal_id.id,
'period_id': period_id
}
val.update({
'name': line.name,
'quantity': line.quantity,
'debit': line.debit,
'credit': line.credit,
'account_id': line.account_id.id,
'move_id': move_id,
'ref': line.ref,
'partner_id': line.partner_id.id,
'date': time.strftime('%Y-%m-%d'),
'date_maturity': time.strftime('%Y-%m-%d')
})
c = context.copy()
c.update({'journal_id': model.journal_id.id,'period_id': period_id})
id_line = account_move_line_obj.create(cr, uid, val, context=c)
context.update({'move_ids':move_ids})
model_data_ids = mod_obj.search(cr, uid,[('model','=','ir.ui.view'),('name','=','view_account_use_model_open_entry')], context=context)
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
return {
'name': _('Use Model'),
'context': context,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'account.use.model',
'views': [(resource_id,'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}
def open_moves(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
if context is None:
context = {}
model_data_ids = mod_obj.search(cr, uid,[('model','=','ir.ui.view'),('name','=','view_move_form')], context=context)
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
return {
'domain': "[('id','in', ["+','.join(map(str,context['move_ids']))+"])]",
'name': 'Entries',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'account.move',
'views': [(False,'tree'),(resource_id,'form')],
'type': 'ir.actions.act_window',
}
account_use_model()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_account_use_model" model="ir.ui.view">
<field name="name">account.use.model.form</field>
<field name="model">account.use.model</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Create Entries From Models">
<group colspan="4" >
<field name="model"/>
</group>
<group colspan="4" col="6">
<label string ="" colspan="2"/>
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-execute" string="Create Entries" name="create_entries" type="object"/>
</group>
</form>
</field>
</record>
<record id="action_view_account_use_model" model="ir.actions.act_window">
<field name="name">Create Entries From Models</field>
<field name="res_model">account.use.model</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_account_use_model"/>
<field name="target">new</field>
<field name="context">{'model_line':'model_line'}</field>
</record>
<record model="ir.values" id="action_account_use_model_values">
<field name="model_id" ref="account.model_account_move_line" />
<field name="object" eval="1" />
<field name="name">Create Entries From Models</field>
<field name="key2">client_action_multi</field>
<field name="value" eval="'ir.actions.act_window,' +str(ref('action_view_account_use_model'))" />
<field name="key">action</field>
<field name="model">account.move.line</field>
</record>
<menuitem action="action_view_account_use_model" name="Create Entries From Models"
parent="account.menu_finance_recurrent_entries" id="menu_account_use_model"/>
<record id="view_account_use_model_open_entry" model="ir.ui.view">
<field name="name">account.use.model.open.entry.form</field>
<field name="model">account.use.model</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Use Model">
<group colspan="4" col="6">
<label string = "Entry Lines Created." colspan="2"/>
<newline/>
<button icon="gtk-ok" special="cancel" string="Ok"/>
<button icon="gtk-execute" string="Open" name="open_moves" type="object"/>
</group>
</form>
</field>
</record>
<record id="view_account_use_model_create_entry" model="ir.ui.view">
<field name="name">account.use.model.create.entry.form</field>
<field name="model">account.use.model</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Use Model">
<group colspan="4" col="6">
<label string = "Are you sure you want to create entries?" colspan="2"/>
<newline/>
<button icon="gtk-ok" special="cancel" string="Cancel"/>
<button icon="gtk-execute" string="Ok" name="create_entries" type="object"/>
</group>
</form>
</field>
</record>
<record id="action_account_use_model_create_entry" model="ir.actions.act_window">
<field name="name">Create Entries From Models</field>
<field name="res_model">account.use.model</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_account_use_model_create_entry"/>
<field name="target">new</field>
</record>
</data>
</openerp>
@@ -1,127 +0,0 @@
# -*- 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 time
import wizard
import pooler
from tools.translate import _
period_form = '''<?xml version="1.0"?>
<form string="Select Date-Period">
<field name="company_id"/>
<field name="result_selection"/>
<newline/>
<field name="fiscalyear"/>
<label colspan="2" string="(Keep empty for all open fiscal years)" align="0.0"/>
<newline/>
<separator string="Filters" colspan="4"/>
<field name="state" required="True"/>
<newline/>
<group attrs="{'invisible':[('state','=','none')]}" colspan="4">
<group attrs="{'invisible':[('state','=','byperiod')]}" colspan="4">
<separator string="Date Filter" colspan="4"/>
<field name="date1"/>
<field name="date2"/>
</group>
<group attrs="{'invisible':[('state','=','bydate')]}" colspan="4">
<separator string="Filter on Periods" colspan="4"/>
<field name="periods" colspan="4" nolabel="1"/>
</group>
</group>
</form>'''
period_fields = {
'company_id': {'string': 'Company', 'type': 'many2one', 'relation': 'res.company', 'required': True},
'state':{
'string':"Date/Period Filter",
'type':'selection',
'selection':[('bydate','By Date'),('byperiod','By Period'),('all','By Date and Period'),('none','No Filter')],
'default': lambda *a:'none'
},
'fiscalyear': {
'string':'Fiscal year', 'type': 'many2one', 'relation': 'account.fiscalyear',
'default': lambda *a:False,
'help': 'Keep empty for all open fiscal year'
},
'periods': {'string': 'Periods', 'type': 'many2many', 'relation': 'account.period', 'help': 'All periods if empty'},
'result_selection':{
'string':"Partner",
'type':'selection',
'selection':[('customer','Receivable Accounts'),('supplier','Payable Accounts'),('all','Receivable and Payable Accounts')],
'required':True
},
'soldeinit':{'string':"Include initial balances",'type':'boolean'},
'date1': {'string':' Start date', 'type':'date', 'required':True,'default': lambda *a: time.strftime('%Y-01-01')},
'date2': {'string':'End date', 'type':'date', 'required':True,'default': lambda *a: time.strftime('%Y-%m-%d')},
}
class wizard_report(wizard.interface):
def _get_defaults(self,cr,uid,data,context):
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context)
if user.company_id:
company_id = user.company_id.id
else:
company_id = pooler.get_pool(cr.dbname).get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
fiscalyear_obj = pooler.get_pool(cr.dbname).get('account.fiscalyear')
periods_obj=pooler.get_pool(cr.dbname).get('account.period')
data['form']['fiscalyear'] = fiscalyear_obj.find(cr, uid)
data['form']['periods'] =periods_obj.search(cr, uid, [('fiscalyear_id','=',data['form']['fiscalyear'])])
data['form']['company_id'] = company_id
data['form']['soldeinit'] = True
data['form']['fiscalyear'] = False
data['form']['result_selection'] = 'all'
return data['form']
def _check_state(self, cr, uid, data, context):
if data['form']['state'] == 'bydate' :
self._check_date(cr, uid, data, context)
return data['form']
def _check_date(self, cr, uid, data, context):
sql = """
SELECT f.id, f.date_start, f.date_stop FROM account_fiscalyear f Where %s between f.date_start and f.date_stop """
cr.execute(sql,(data['form']['date1'],))
res = cr.dictfetchall()
if res:
if (data['form']['date2'] > res[0]['date_stop'] or data['form']['date2'] < res[0]['date_start']):
raise wizard.except_wizard(_('UserError'),_('Date to must be set between %s and %s') % (str(res[0]['date_start']), str(res[0]['date_stop'])))
else:
return 'report'
else:
raise wizard.except_wizard(_('UserError'),_('Date not in a defined fiscal year'))
states = {
'init': {
'actions': [_get_defaults],
'result': {'type':'form', 'arch':period_form, 'fields':period_fields, 'state':[('end','Cancel','gtk-cancel'),('report','Print','gtk-print')]}
},
'report': {
'actions': [_check_state],
'result': {'type':'print', 'report':'account.partner.balance', 'state':'end'}
}
}
wizard_report('account.partner.balance.report')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-131
View File
@@ -1,131 +0,0 @@
# -*- 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 wizard
import time
import datetime
import pooler
from tools.translate import _
model_form = """<?xml version="1.0"?>
<form string="Create entries from models">
<field name="model"/>
</form>"""
model_fields = {
'model': {'string': 'Account Model', 'type': 'many2many', 'relation': 'account.model', 'required': True},
}
form = """<?xml version="1.0"?>
<form string="Use Model">
<label string="Entry Lines Created."/>
</form>
"""
fields = {
}
def _create_entries(self, cr, uid, data, context):
pool_obj = pooler.get_pool(cr.dbname)
if data['model']=='ir.ui.menu' or data['model']=='account.move.line':
model_ids = data['form']['model'][0][2]
data_model = pool_obj.get('account.model').browse(cr,uid,model_ids)
else:
data_model = pool_obj.get('account.model').browse(cr,uid,data['ids'])
move_ids = []
for model in data_model:
period_id = pool_obj.get('account.period').find(cr,uid, context=context)
if not period_id:
raise wizard.except_wizard(_('No period found !'), _('Unable to find a valid period !'))
period_id = period_id[0]
move_id = pool_obj.get('account.move').create(cr, uid, {
'ref': model.ref,
'period_id': period_id,
'journal_id': model.journal_id.id,
})
move_ids.append(move_id)
for line in model.lines_id:
val = {
'move_id': move_id,
'journal_id': model.journal_id.id,
'period_id': period_id
}
val.update({
'name': line.name,
'quantity': line.quantity,
'debit': line.debit,
'credit': line.credit,
'account_id': line.account_id.id,
'move_id': move_id,
'ref': line.ref,
'partner_id': line.partner_id.id,
'date': time.strftime('%Y-%m-%d'),
'date_maturity': time.strftime('%Y-%m-%d')
})
c = context.copy()
c.update({'journal_id': model.journal_id.id,'period_id': period_id})
id_line = pool_obj.get('account.move.line').create(cr, uid, val, context=c)
data['form']['move_ids']=move_ids
return data['form']
class use_model(wizard.interface):
def _open_moves(self, cr, uid, data, context):
pool_obj = pooler.get_pool(cr.dbname)
model_data_ids = pool_obj.get('ir.model.data').search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_move_form')])
resource_id = pool_obj.get('ir.model.data').read(cr,uid,model_data_ids,fields=['res_id'])[0]['res_id']
return {
'domain': "[('id','in', ["+','.join(map(str,data['form']['move_ids']))+"])]",
'name': 'Entries',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'account.move',
'views': [(False,'tree'),(resource_id,'form')],
'type': 'ir.actions.act_window'
}
def _check(self, cr, uid, data, context):
if data['model']=='ir.ui.menu' or data['model']=='account.move.line':
return 'init_form'
return 'create'
states = {
'init': {
'actions': [],
'result': {'type':'choice','next_state':_check}
},
'init_form': {
'actions': [],
'result': {'type':'form', 'arch':model_form, 'fields':model_fields, 'state':[('end','Cancel', 'gtk-cancel'),('create','Create', 'gtk-ok')]},
},
'create': {
'actions': [_create_entries],
'result': {'type': 'form','arch':form, 'fields':fields, 'state':[('end','Ok'),('open_move','Open')]},
},
'open_move': {
'actions': [],
'result': {'type':'action', 'action':_open_moves, 'state':'end'}
}
}
use_model("account_use_models")# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+64
View File
@@ -0,0 +1,64 @@
# 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-24 12:50+0000\n"
"PO-Revision-Date: 2010-04-23 09:43+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-24 03:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_anglo_saxon
#: view:product.category:0
msgid " Accounting Property"
msgstr ""
#. module: account_anglo_saxon
#: model:ir.module.module,description:account_anglo_saxon.module_meta_information
msgid ""
"This module will support the Anglo-Saxons accounting methodology by \n"
" changing the accounting logic with stock transactions. The difference "
"between the Anglo-Saxon accounting countries \n"
" and the Rhine or also called Continental accounting countries is the "
"moment of taking the Cost of Goods Sold versus Cost of Sales. \n"
" Anglo-Saxons accounting does take the cost when sales invoice is "
"created, Continental accounting will take the cost at he moment the goods "
"are shipped.\n"
" This module will add this functionality by using a interim account, to "
"store the value of shipped goods and will contra book this interim account \n"
" when the invoice is created to transfer this amount to the debtor or "
"creditor account."
msgstr ""
#. module: account_anglo_saxon
#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
msgid "Stock Account"
msgstr "Laoarvestuse"
#. module: account_anglo_saxon
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Vigane XML vaate arhitektuurile!"
#. module: account_anglo_saxon
#: field:product.category,property_account_creditor_price_difference_categ:0
#: field:product.template,property_account_creditor_price_difference:0
msgid "Price Difference Account"
msgstr ""
#. module: account_anglo_saxon
#: help:product.category,property_account_creditor_price_difference_categ:0
#: help:product.template,property_account_creditor_price_difference:0
msgid ""
"This account will be used to value price difference between purchase price "
"and cost price."
msgstr ""
+618
View File
@@ -0,0 +1,618 @@
# Occitan (post 1500) 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-04-22 12:18+0000\n"
"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
"Language-Team: Occitan (post 1500) <oc@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-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_payment
#: field:payment.order,date_planned:0
msgid "Scheduled date if fixed"
msgstr ""
#. module: account_payment
#: field:payment.line,currency:0
msgid "Partner Currency"
msgstr ""
#. module: account_payment
#: view:payment.order:0
msgid "Set to draft"
msgstr ""
#. module: account_payment
#: help:payment.order,mode:0
msgid "Select the Payment Mode to be applied."
msgstr ""
#. module: account_payment
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Nom del Modèl invalid per la definicion de l'accion."
#. module: account_payment
#: view:payment.line:0
#: field:payment.line,info_owner:0
#: view:payment.order:0
msgid "Owner Account"
msgstr ""
#. module: account_payment
#: help:account.invoice,amount_to_pay:0
msgid ""
"The amount which should be paid at the current date\n"
"minus the amount which is already in payment order"
msgstr ""
#. module: account_payment
#: help:payment.line,date:0
msgid ""
"If no payment date is specified, the bank will treat this payment line "
"directly"
msgstr ""
#. module: account_payment
#: field:payment.order,date_prefered:0
msgid "Preferred date"
msgstr ""
#. module: account_payment
#: selection:payment.line,state:0
msgid "Free"
msgstr "Liure"
#. module: account_payment
#: wizard_field:populate_payment,search,entries:0
msgid "Entries"
msgstr "Entradas"
#. module: account_payment
#: wizard_field:populate_payment,init,duedate:0
msgid "Due Date"
msgstr "Data d'escasença"
#. module: account_payment
#: view:account.move.line:0
msgid "Account Entry Line"
msgstr "Linha d'escritura comptabla"
#. module: account_payment
#: wizard_button:populate_payment,search,create:0
msgid "_Add to payment order"
msgstr ""
#. module: account_payment
#: rml:payment.order:0
#: view:payment.order:0
msgid "Amount"
msgstr "Soma"
#. module: account_payment
#: rml:payment.order:0
msgid "Execution date:"
msgstr ""
#. module: account_payment
#: view:payment.order:0
msgid "Total in Company Currency"
msgstr ""
#. module: account_payment
#: selection:payment.order,state:0
msgid "Cancelled"
msgstr "Anullat"
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_payment_order_tree_new
#: model:ir.ui.menu,name:account_payment.menu_action_payment_order_form_new
msgid "New Payment Order"
msgstr ""
#. module: account_payment
#: rml:payment.order:0
#: field:payment.order,reference:0
msgid "Reference"
msgstr "Referéncia"
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_payment_order_tree
#: model:ir.ui.menu,name:account_payment.menu_action_payment_order_form
msgid "Payment Orders"
msgstr ""
#. module: account_payment
#: selection:payment.order,date_prefered:0
msgid "Directly"
msgstr "Dirèctament"
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_payment_line_form
#: model:ir.model,name:account_payment.model_payment_line
#: view:payment.line:0
#: view:payment.order:0
msgid "Payment Line"
msgstr ""
#. module: account_payment
#: field:payment.type,suitable_bank_types:0
msgid "Suitable bank types"
msgstr ""
#. module: account_payment
#: view:payment.line:0
msgid "Amount Total"
msgstr ""
#. module: account_payment
#: selection:payment.order,state:0
msgid "Confirmed"
msgstr ""
#. module: account_payment
#: help:payment.line,ml_date_created:0
msgid "Invoice Effective Date"
msgstr ""
#. module: account_payment
#: field:payment.order,line_ids:0
msgid "Payment lines"
msgstr ""
#. module: account_payment
#: help:payment.order,date_planned:0
msgid "Select a date if you have chosen Preferred Date to be fixed."
msgstr ""
#. module: account_payment
#: selection:payment.line,state:0
msgid "Structured"
msgstr ""
#. module: account_payment
#: field:payment.order,state:0
msgid "State"
msgstr "Estat"
#. module: account_payment
#: view:payment.line:0
#: view:payment.order:0
msgid "Transaction Information"
msgstr ""
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_payment_mode_form
#: model:ir.ui.menu,name:account_payment.menu_action_payment_mode_form
#: view:payment.mode:0
msgid "Payment Mode"
msgstr ""
#. module: account_payment
#: field:payment.line,ml_date_created:0
msgid "Effective Date"
msgstr ""
#. module: account_payment
#: field:payment.line,ml_inv_ref:0
msgid "Invoice Ref."
msgstr ""
#. module: account_payment
#: help:payment.order,date_prefered:0
msgid ""
"Choose an option for the Payment Order:'Fixed' stands for a date specified "
"by you.'Directly' stands for the direct execution.'Due date' stands for the "
"scheduled date of execution."
msgstr ""
#. module: account_payment
#: view:account.move.line:0
msgid "Total debit"
msgstr "Debit total"
#. module: account_payment
#: field:payment.order,date_done:0
msgid "Execution date"
msgstr ""
#. module: account_payment
#: selection:payment.order,date_prefered:0
msgid "Fixed date"
msgstr "Data fixa"
#. module: account_payment
#: field:payment.line,info_partner:0
msgid "Destination Account"
msgstr "Compte de destinacion"
#. module: account_payment
#: view:payment.line:0
#: view:payment.order:0
msgid "Desitination Account"
msgstr "Compte de destinacion"
#. module: account_payment
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML invalid per l'arquitectura de la vista"
#. module: account_payment
#: wizard_button:populate_payment,init,end:0
#: wizard_button:populate_payment,search,end:0
#: wizard_button:populate_statement,init,end:0
msgid "_Cancel"
msgstr "_Anullar"
#. module: account_payment
#: field:payment.line,create_date:0
msgid "Created"
msgstr "Creat"
#. module: account_payment
#: view:payment.line:0
msgid "Currency Amount Total"
msgstr ""
#. module: account_payment
#: view:payment.order:0
msgid "Make Payments"
msgstr ""
#. module: account_payment
#: field:payment.line,state:0
msgid "Communication Type"
msgstr ""
#. module: account_payment
#: model:ir.module.module,shortdesc:account_payment.module_meta_information
msgid "Payment Management"
msgstr ""
#. module: account_payment
#: field:payment.line,communication:0
msgid "Communication"
msgstr "Comunicacion"
#. module: account_payment
#: selection:payment.order,date_prefered:0
msgid "Due date"
msgstr "Data de tèrme"
#. module: account_payment
#: field:account.invoice,amount_to_pay:0
msgid "Amount to be paid"
msgstr ""
#. module: account_payment
#: help:payment.line,info_owner:0
msgid "Address of the Main Partner"
msgstr ""
#. module: account_payment
#: help:payment.mode,name:0
msgid "Mode of Payment"
msgstr ""
#. module: account_payment
#: view:payment.type:0
#: help:payment.type,name:0
msgid "Payment Type"
msgstr ""
#. module: account_payment
#: help:payment.line,amount_currency:0
msgid "Payment amount in the partner currency"
msgstr ""
#. module: account_payment
#: selection:payment.order,state:0
msgid "Draft"
msgstr "Borrolhon"
#. module: account_payment
#: field:payment.line,partner_id:0
#: rml:payment.order:0
msgid "Partner"
msgstr "Partenari"
#. module: account_payment
#: help:payment.line,communication2:0
msgid "The successor message of Communication."
msgstr ""
#. module: account_payment
#: help:payment.line,info_partner:0
msgid "Address of the Ordering Customer."
msgstr ""
#. module: account_payment
#: view:account.move.line:0
msgid "Total credit"
msgstr "Credit total"
#. module: account_payment
#: model:ir.actions.wizard,name:account_payment.wizard_populate_payment
msgid "Populate payment"
msgstr ""
#. module: account_payment
#: field:payment.order,user_id:0
msgid "User"
msgstr "Utilizaire"
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.act_account_invoice_2_payment_line
#: wizard_field:populate_statement,init,lines:0
msgid "Payment Lines"
msgstr ""
#. module: account_payment
#: rml:payment.order:0
msgid "Date"
msgstr "Data"
#. module: account_payment
#: rml:payment.order:0
msgid "Reference:"
msgstr ""
#. module: account_payment
#: help:payment.line,move_line_id:0
msgid ""
"This Entry Line will be referred for the information of the ordering "
"customer."
msgstr ""
#. module: account_payment
#: field:payment.line,date:0
msgid "Payment Date"
msgstr ""
#. module: account_payment
#: field:payment.order,date_created:0
msgid "Creation date"
msgstr "Data de creacion"
#. module: account_payment
#: field:payment.line,ml_maturity_date:0
msgid "Maturity Date"
msgstr ""
#. module: account_payment
#: view:account.bank.statement:0
msgid "Import payment lines"
msgstr ""
#. module: account_payment
#: help:payment.type,code:0
msgid "Specify the Code for Payment Type"
msgstr ""
#. module: account_payment
#: field:account.move.line,amount_to_pay:0
msgid "Amount to pay"
msgstr "Soma de pagar"
#. module: account_payment
#: field:payment.line,amount:0
msgid "Amount in Company Currency"
msgstr ""
#. module: account_payment
#: help:payment.line,partner_id:0
msgid "The Ordering Customer"
msgstr ""
#. module: account_payment
#: field:payment.type,code:0
msgid "Code"
msgstr "Còde"
#. module: account_payment
#: field:payment.line,name:0
msgid "Your Reference"
msgstr ""
#. module: account_payment
#: view:payment.order:0
msgid "Payment order"
msgstr ""
#. module: account_payment
#: view:payment.line:0
#: view:payment.order:0
msgid "General Information"
msgstr "Informacions generalas"
#. module: account_payment
#: selection:payment.order,state:0
msgid "Done"
msgstr "Acabat"
#. module: account_payment
#: view:payment.order:0
msgid "Select Invoices to Pay"
msgstr ""
#. module: account_payment
#: view:payment.order:0
msgid "Cancel"
msgstr "Anullar"
#. module: account_payment
#: view:payment.line:0
#: view:payment.order:0
msgid "Information"
msgstr "Informacion"
#. module: account_payment
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Lo nom de l'objècte deu començar amb x_ e conténer pas de caractèrs "
"especials !"
#. module: account_payment
#: model:ir.actions.wizard,name:account_payment.wizard_pay_payment
msgid "Pay"
msgstr "Pagar"
#. module: account_payment
#: model:ir.actions.report.xml,name:account_payment.payment_order1
#: model:ir.model,name:account_payment.model_payment_order
msgid "Payment Order"
msgstr ""
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_payment_order_draft
#: model:ir.ui.menu,name:account_payment.menu_action_payment_order_draft
msgid "Draft Payment Order"
msgstr ""
#. module: account_payment
#: help:payment.line,amount:0
msgid "Payment amount in the company currency"
msgstr ""
#. module: account_payment
#: wizard_view:populate_payment,init:0
msgid "Search Payment lines"
msgstr ""
#. module: account_payment
#: field:payment.line,amount_currency:0
msgid "Amount in Partner Currency"
msgstr ""
#. module: account_payment
#: field:payment.line,communication2:0
msgid "Communication 2"
msgstr "Comunicacion 2"
#. module: account_payment
#: field:payment.line,bank_id:0
msgid "Destination Bank account"
msgstr ""
#. module: account_payment
#: help:payment.mode,journal:0
msgid "Cash Journal for the Payment Mode"
msgstr ""
#. module: account_payment
#: field:payment.mode,bank_id:0
#: rml:payment.order:0
msgid "Bank account"
msgstr "Compte bancari"
#. module: account_payment
#: view:payment.order:0
msgid "Confirm Payments"
msgstr ""
#. module: account_payment
#: field:payment.line,company_currency:0
msgid "Company Currency"
msgstr ""
#. module: account_payment
#: model:ir.ui.menu,name:account_payment.menu_main
#: model:ir.ui.menu,name:account_payment.next_id_44
#: view:payment.line:0
#: view:payment.order:0
msgid "Payment"
msgstr ""
#. module: account_payment
#: field:payment.line,move_line_id:0
msgid "Entry line"
msgstr ""
#. module: account_payment
#: help:payment.line,communication:0
msgid ""
"Used as the message between ordering customer and current company. Depicts "
"'What do you want to say to the recipient about this order ?'"
msgstr ""
#. module: account_payment
#: field:payment.mode,name:0
#: field:payment.type,name:0
msgid "Name"
msgstr "Nom"
#. module: account_payment
#: wizard_button:populate_payment,init,search:0
msgid "_Search"
msgstr "_Recercar"
#. module: account_payment
#: view:payment.line:0
#: view:payment.order:0
msgid "Entry Information"
msgstr ""
#. module: account_payment
#: model:ir.actions.wizard,name:account_payment.wizard_populate_statement
msgid "Populate Statement with Payment lines"
msgstr ""
#. module: account_payment
#: field:payment.line,order_id:0
msgid "Order"
msgstr "Òrdre"
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_payment_order_open
#: model:ir.ui.menu,name:account_payment.menu_action_payment_order_open
msgid "Payment Orders to Validate"
msgstr ""
#. module: account_payment
#: model:ir.model,name:account_payment.model_payment_type
#: field:payment.mode,type:0
msgid "Payment type"
msgstr ""
#. module: account_payment
#: field:payment.order,total:0
msgid "Total"
msgstr "Total"
#. module: account_payment
#: wizard_button:populate_statement,init,add:0
msgid "_Add"
msgstr "_Apondre"
#. module: account_payment
#: help:payment.mode,type:0
msgid "Select the Payment Type for the Payment Mode."
msgstr ""
#. module: account_payment
#: model:ir.model,name:account_payment.model_payment_mode
#: field:payment.order,mode:0
msgid "Payment mode"
msgstr ""
#. module: account_payment
#: help:payment.mode,bank_id:0
msgid "Bank Account for the Payment Mode"
msgstr ""
#. module: account_payment
#: field:payment.mode,journal:0
msgid "Journal"
msgstr "Jornal"
+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: 2009-12-11 22:21+0000\n"
"Last-Translator: Pieter J. Kersten (EduSense BV) <Unknown>\n"
"PO-Revision-Date: 2010-04-22 08:49+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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:57+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_report
@@ -354,7 +354,7 @@ msgstr "Dochters"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
"De objectnaam moet beginnen met x_ en mag geen speciale tekens bevatten!"
#. module: account_report
#: help:account.report.report,goodness_limit:0
+7 -7
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-04-17 18:14+0000\n"
"Last-Translator: Valerie Engel <Unknown>\n"
"PO-Revision-Date: 2010-04-25 21:20+0000\n"
"Last-Translator: Martin Volf <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-21 04:05+0000\n"
"X-Launchpad-Export-Date: 2010-04-26 03:41+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_tax_include
@@ -34,19 +34,19 @@ msgstr ""
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax included"
msgstr ""
msgstr "Daně zahrnuty"
#. module: account_tax_include
#: selection:account.invoice,price_type:0
msgid "Tax excluded"
msgstr ""
msgstr "Daně vyloučeny"
#. module: account_tax_include
#: view:account.tax:0
msgid "Compute Code for Taxes included prices"
msgstr ""
msgstr "Výpočetní kód pro ceny včetně daně"
#. module: account_tax_include
#: field:account.invoice.line,price_subtotal_incl:0
msgid "Subtotal"
msgstr ""
msgstr "Mezisoučet"
@@ -310,6 +310,7 @@ class base_action_rule_line(osv.osv):
('create','Creation Date'),
('action_last','Last Action Date'),
('date','Date'),
('deadline', 'Deadline'),
], 'Trigger Date', size=16),
'trg_date_range': fields.integer('Delay after trigger date',help="Delay After Trigger Date,\
specifies you can put a negative number " \
+20 -20
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-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-09 16:43+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-23 09:48+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:20+0000\n"
"X-Launchpad-Export-Date: 2010-04-24 03:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_module_quality
@@ -42,22 +42,22 @@ msgstr ""
#. module: base_module_quality
#: view:module.quality.detail:0
msgid "Detail"
msgstr ""
msgstr "Detail"
#. module: base_module_quality
#: field:module.quality.detail,note:0
msgid "Note"
msgstr ""
msgstr "Märkus"
#. module: base_module_quality
#: field:module.quality.detail,state:0
msgid "State"
msgstr ""
msgstr "Olek"
#. module: base_module_quality
#: field:module.quality.detail,detail:0
msgid "Details"
msgstr ""
msgstr "Detailid"
#. module: base_module_quality
#: field:module.quality.detail,ponderation:0
@@ -75,12 +75,12 @@ msgstr ""
#: view:module.quality.check:0
#: field:module.quality.check,check_detail_ids:0
msgid "Tests"
msgstr ""
msgstr "Testid"
#. module: base_module_quality
#: selection:module.quality.detail,state:0
msgid "Skipped"
msgstr ""
msgstr "Vahele jäetud"
#. module: base_module_quality
#: help:module.quality.detail,state:0
@@ -102,17 +102,17 @@ msgstr ""
#. module: base_module_quality
#: field:module.quality.detail,name:0
msgid "Name"
msgstr ""
msgstr "Nimi"
#. module: base_module_quality
#: wizard_field:quality_detail_save,init,module_file:0
msgid "Save report"
msgstr ""
msgstr "Salvesta aruanne"
#. module: base_module_quality
#: wizard_field:quality_detail_save,init,name:0
msgid "File name"
msgstr ""
msgstr "Failinimi"
#. module: base_module_quality
#: field:module.quality.detail,score:0
@@ -122,13 +122,13 @@ msgstr ""
#. module: base_module_quality
#: help:quality_detail_save,init,name:0
msgid "Save report as .html format"
msgstr ""
msgstr "Salvesta aruanne .html vormingus"
#. module: base_module_quality
#: view:module.quality.detail:0
#: field:module.quality.detail,summary:0
msgid "Summary"
msgstr ""
msgstr "Kokkuvõte"
#. module: base_module_quality
#: model:ir.actions.wizard,name:base_module_quality.quality_detail_save
@@ -143,7 +143,7 @@ msgstr ""
#. module: base_module_quality
#: view:module.quality.detail:0
msgid "Save Report"
msgstr ""
msgstr "Aruande salvestamine"
#. module: base_module_quality
#: model:ir.actions.wizard,name:base_module_quality.create_quality_check_id
@@ -158,25 +158,25 @@ msgstr ""
#. module: base_module_quality
#: selection:module.quality.detail,state:0
msgid "Done"
msgstr ""
msgstr "Valmis"
#. module: base_module_quality
#: view:module.quality.check:0
#: view:module.quality.detail:0
msgid "Result"
msgstr ""
msgstr "Tulemus"
#. module: base_module_quality
#: wizard_button:quality_detail_save,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Katkesta"
#. module: base_module_quality
#: field:module.quality.detail,message:0
msgid "Message"
msgstr ""
msgstr "Sõnum"
#. module: base_module_quality
#: field:module.quality.detail,quality_check_id:0
msgid "Quality"
msgstr ""
msgstr "Kvaliteet"
+10 -3
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-11 18:58+0000\n"
"Last-Translator: Auduf <5097@mail.ru>\n"
"PO-Revision-Date: 2010-04-23 16:38+0000\n"
"Last-Translator: Nikita Shehov <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 04:16+0000\n"
"X-Launchpad-Export-Date: 2010-04-24 03:52+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_creator
@@ -23,6 +23,8 @@ msgid ""
"records.\n"
" e.g. res_partner.id=3"
msgstr ""
"Введите параметр для поиска нужных записей.\n"
"Например: res_partner.id=3"
#. module: base_report_creator
#: field:base_report_creator.report,view_graph_type:0
@@ -408,6 +410,11 @@ msgid ""
"After installing the module, it adds a menu to define custom report in\n"
"the \"Dashboard\" menu.\n"
msgstr ""
"С помощью этих модулей вы сможете создать статистический отчет\n"
"выбранных объектов. Это создатель и браузер SQL-запросов для пользователей.\n"
"\n"
"После установки модуля, в главном меню появится ссылка для выбора отчета по "
"умолчанию.\n"
#. module: base_report_creator
#: selection:base_report_creator.report.fields,calendar_mode: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: 2009-09-08 12:12+0000\n"
"Last-Translator: Freerk Kalsbeek (Mindswitch BV) <f.kalsbeek@mindswitch.nl>\n"
"PO-Revision-Date: 2010-04-22 08:50+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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 04:05+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_setup
@@ -272,7 +272,7 @@ msgstr "Logo"
#. module: base_setup
#: model:ir.module.module,shortdesc:base_setup.module_meta_information
msgid "Base Setup"
msgstr ""
msgstr "Basis setup"
#. module: base_setup
#: wizard_button:base_setup.base_setup,company,init: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: 2009-09-28 07:55+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-22 08:51+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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:57+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board_association
@@ -55,7 +55,7 @@ msgstr "Onbetaalde facturen"
#. module: board_association
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Ongeldige modelnaam in de definitie van de actie."
#. module: board_association
#: view:board.board:0
+69
View File
@@ -0,0 +1,69 @@
# Occitan (post 1500) 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-04-22 12:09+0000\n"
"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
"Language-Team: Occitan (post 1500) <oc@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-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board_association
#: model:ir.ui.menu,name:board_association.menu_board_associations_manager
msgid "Associations"
msgstr "Associacions"
#. module: board_association
#: model:ir.module.module,shortdesc:board_association.module_meta_information
msgid "Dashboard for Associations"
msgstr "Tablèu de Bòrd per las Associacions"
#. module: board_association
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML invalid per l'arquitectura de la vista"
#. module: board_association
#: view:board.board:0
#: model:ir.actions.act_window,name:board_association.open_board_associations_manager
msgid "Association Dashboard"
msgstr "Tablèu de Bòrd Associacion"
#. module: board_association
#: view:board.board:0
msgid "My tasks"
msgstr "Mos Prètzfaches"
#. module: board_association
#: view:board.board:0
msgid "New members"
msgstr "Membres novèls"
#. module: board_association
#: view:board.board:0
msgid "Unpaid Invoices"
msgstr "Facturas impagadas"
#. module: board_association
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Nom del Modèl invalid per la definicion de l'accion."
#. module: board_association
#: view:board.board:0
msgid "Next Events"
msgstr "Eveniments que venon"
#. module: board_association
#: view:board.board:0
msgid "Registrations by Events"
msgstr "Inscripcions per eveniment"
+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: 2009-12-14 21:34+0000\n"
"Last-Translator: Pieter J. Kersten (EduSense BV) <Unknown>\n"
"PO-Revision-Date: 2010-04-22 08:52+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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 04:00+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board_manufacturing
@@ -44,7 +44,7 @@ msgstr "Fabricage dashboard"
#. module: board_manufacturing
#: model:ir.ui.menu,name:board_manufacturing.next_id_87
msgid "Production"
msgstr ""
msgstr "Productie"
#. module: board_manufacturing
#: constraint:ir.actions.act_window:0
+7 -3
View File
@@ -629,7 +629,9 @@ class crm_case(osv.osv):
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.__history(cr, uid, cases, _('Close'))
self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
self.write(cr, uid, ids, {'state': 'done',
'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'),
'probability' : 100.0})
#
# We use the cache of cases to keep the old case state
#
@@ -690,7 +692,9 @@ class crm_case(osv.osv):
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.__history(cr, uid, cases, _('Cancel'))
self.write(cr, uid, ids, {'state': 'cancel', 'active': True})
self.write(cr, uid, ids, {'state': 'cancel',
'active': True,
'probability' : 0.0})
self._action(cr, uid, cases, 'cancel')
return True
@@ -773,7 +777,7 @@ class crm_case_history(osv.osv):
_columns = {
'description': fields.text('Description'),
'note': fields.function(_note_get, method=True, string="Description", type="text"),
'email_to': fields.char('Email TO', size=84),
'email_to': fields.char('Email To', size=84),
'email_from' : fields.char('Email From', size=84),
'log_id': fields.many2one('crm.case.log','Log',ondelete='cascade'),
'message_id': fields.char('Message Id', size=1024, readonly=True, help="Message Id on Email Server.", select=True),
+15 -1
View File
@@ -23,6 +23,7 @@ import time
import re
import os
import binascii
import mx.DateTime
import base64
@@ -72,6 +73,19 @@ class crm_cases(osv.osv):
res = self.create(cr, uid, vals, context)
cases = self.browse(cr, uid, [res])
self._history(cr, uid, cases, _('Receive'), history=True, details=body, email_from=msg_from, message_id=msg.get('id'))
attachents = msg.get('attachments', [])
for attactment in attachents or []:
data_attach = {
'name': attactment,
'datas':binascii.b2a_base64(str(attachents.get(attactment))),
'datas_fname': attactment,
'description': 'Mail attachment',
'res_model': self._name,
'res_id': res,
}
self.pool.get('ir.attachment').create(cr, uid, data_attach)
return res
def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context={}):
@@ -130,7 +144,7 @@ class crm_cases(osv.osv):
select = ids
for case in self.browse(cr, uid, select):
user_email = (case.user_id and case.user_id.address_id and case.user_id.address_id.email) or False
res += [(user_email, case.email_from, case.email_cc, getattr(case,'priority') and case.priority or False)]
res += [(user_email, case.email_from, case.email_cc or False, getattr(case,'priority') and case.priority or False)]
if isinstance(ids, (str, int, long)):
return len(res) and res[0] or False
return res
+2 -1
View File
@@ -27,7 +27,7 @@ import time
import mx.DateTime
AVAILABLE_STATES = [
('draft','New'),
('draft','Draft'),
('open','Open'),
('cancel', 'Lost'),
('done', 'Converted'),
@@ -190,6 +190,7 @@ class crm_opportunity(osv.osv):
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.opportunity', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'state' : 'draft',
}
def action_makeMeeting(self, cr, uid, ids, context=None):
+4 -4
View File
@@ -704,9 +704,9 @@
</record>
<record id="view_partners_form_crm2" model="ir.ui.view">
<field name="name">view.res.partner.form.crm.inherited2</field>
<field name="name">view.res.partner.tree.crm.inherited2</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="type">tree</field>
<field name="inherit_id" ref="base.view_partner_tree"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
@@ -718,9 +718,9 @@
</record>
<record id="view_partners_form_crm3" model="ir.ui.view">
<field name="name">view.res.partner.form.crm.inherited3</field>
<field name="name">view.res.partner.search.crm.inherited3</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="type">search</field>
<field name="inherit_id" ref="base.view_res_partner_filter"/>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
@@ -183,6 +183,7 @@ class email_parser(object):
'email_cc': msg_cc,
'user_id': False,
'description': message['body'],
'state' : 'draft',
}
data.update(self.partner_get(msg_from))
+27 -31
View File
@@ -1,43 +1,39 @@
<openerp>
<data>
<data>
<!-- CRM Email Add CC Form View -->
<!-- CRM Email Add CC Form View -->
<record id="view_crm_email_add_cc_wizard" model="ir.ui.view">
<record id="view_crm_email_add_cc_wizard" model="ir.ui.view">
<field name="name">Add CC</field>
<field name="model">crm.email.add.cc</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Add CC">
<field name="name" width="200" />
<field name="subject" width="200" />
<separator colspan="4" string="" />
<group col="2" colspan="2" attrs="{ 'invisible' : [('name','!=','user')]}">
<field name="user_id"
attrs="{ 'required' : [('name','=','user')]}"
on_change="on_change_email(user_id, partner_id)" />
</group>
<newline />
<group col="2" colspan="2"
attrs="{ 'invisible' : [('name','!=','partner')]}">
<field name="partner_id"
attrs="{'required' : [('name','=','partner')]}"
on_change="on_change_email(user_id, partner_id)" />
</group>
<newline />
<field name="email" attrs="{ 'required' : [('name','=','email')]}" />
<newline />
<separator colspan="4" string="" />
<group col="2" colspan="4">
<label string="" />
<button name="add_cc" string="_Add"
type="object" icon="gtk-ok" />
</group>
</form>
<form string="Forward">
<field name="name" width="200" />
<field name="subject" colspan="4" />
<separator colspan="4" string="" />
<group col="2" colspan="2" attrs="{ 'invisible' : [('name','!=','user')]}">
<field name="user_id"
attrs="{ 'required' : [('name','=','user')]}"
on_change="on_change_email(user_id, partner_id)" />
</group>
<newline />
<group col="2" colspan="2"
attrs="{ 'invisible' : [('name','!=','partner')]}">
<field name="partner_id"
attrs="{'required' : [('name','=','partner')]}"
on_change="on_change_email(user_id, partner_id)" />
</group>
<field colspan="4" name="email" attrs="{ 'required' : [('name','=','email')]}" />
<separator colspan="4" string="" />
<group col="1" colspan="4">
<button name="add_cc" string="_Forward" type="object" icon="gtk-ok" />
</group>
</form>
</field>
</record>
<!-- CRM Email Add CC Action -->
<!-- CRM Email Add CC Action -->
<record id="action_view_crm_email_add_cc_wizard" model="ir.actions.act_window">
<field name="name">Add CC</field>
@@ -48,5 +44,5 @@
<field name="target">new</field>
</record>
</data>
</data>
</openerp>
+68 -60
View File
@@ -51,74 +51,82 @@ class crm_lead2opportunity(osv.osv_memory):
@return : Dictionary value for created Opportunity form
"""
value = {}
record_id = context and context.get('active_id', False) or False
if record_id:
lead_obj = self.pool.get('crm.lead')
opp_obj = self. pool.get('crm.opportunity')
data_obj = self.pool.get('ir.model.data')
history_obj = self.pool.get('crm.case.history')
model_obj = self.pool.get('ir.model')
if not record_id:
return {}
# Get Opportunity views
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
res = data_obj.read(cr, uid, result, ['res_id'])
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
if id2:
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
if id3:
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
lead_obj = self.pool.get('crm.lead')
opp_obj = self. pool.get('crm.opportunity')
data_obj = self.pool.get('ir.model.data')
history_obj = self.pool.get('crm.case.history')
model_obj = self.pool.get('ir.model')
lead = lead_obj.browse(cr, uid, record_id, context=context)
model_ids = model_obj.search(cr, uid, [('model', '=', 'crm.opportunity')])
# Get Opportunity views
result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
res = data_obj.read(cr, uid, result, ['res_id'])
id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
if id2:
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
if id3:
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
lead = lead_obj.browse(cr, uid, record_id, context=context)
model_ids = model_obj.search(cr, uid, [('model', '=', 'crm.opportunity')])
for this in self.browse(cr, uid, ids, context=context):
new_opportunity_id = opp_obj.create(cr, uid, {
'name': this.name,
'referred': this.referred,
'planned_revenue': this.planned_revenue,
'probability': this.probability,
'partner_id': lead.partner_id and lead.partner_id.id or False ,
'section_id': lead.section_id and lead.section_id.id or False,
'description': lead.description or False,
'date_deadline': lead.date_deadline or False,
'partner_address_id': lead.partner_address_id and \
lead.partner_address_id.id or False ,
'priority': lead.priority,
'phone': lead.phone,
'email_from': lead.email_from
})
new_opportunity = opp_obj.browse(cr, uid, new_opportunity_id)
vals = {
'partner_id': this.partner_id and this.partner_id.id or False,
}
if not lead.opportunity_id:
vals.update({'opportunity_id' : new_opportunity.id})
for this in self.browse(cr, uid, ids, context=context):
new_opportunity_id = opp_obj.create(cr, uid, {
'name': this.name,
'referred': lead.referred,
'planned_revenue': this.planned_revenue,
'probability': this.probability,
'partner_id': lead.partner_id and lead.partner_id.id or False,
'section_id': lead.section_id and lead.section_id.id or False,
'description': lead.description or False,
'date_deadline': lead.date_deadline or False,
'partner_address_id': lead.partner_address_id and lead.partner_address_id.id or False ,
'priority': lead.priority,
'phone': lead.phone,
'email_from': lead.email_from
})
new_opportunity = opp_obj.browse(cr, uid, new_opportunity_id)
vals = {
'partner_id': this.partner_id and this.partner_id.id or False,
}
if not lead.opportunity_id:
vals.update({'opportunity_id' : new_opportunity.id})
lead_obj.write(cr, uid, [lead.id], vals)
lead_obj.case_close(cr, uid, [lead.id])
# Copy lead history to opportunity
for his_id in lead.history_line:
history_ids = history_obj.copy(cr, uid, his_id.id, \
{'model_id': model_ids[0], \
'res_id': new_opportunity_id})
model_opportunity_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'crm.opportunity')], context=context)[0]
opp_obj.case_open(cr, uid, [new_opportunity_id])
for model in ('crm.case.log', 'crm.case.history'):
log_proxy = self.pool.get(model)
log_ids = log_proxy.search(cr, uid, [('model_id.model', '=', 'crm.lead'),('res_id', '=', lead.id)], context=context)
for log_id in log_ids:
log_proxy.copy(cr, uid, log_id, {'model_id':model_opportunity_id}, context=context)
value = {
'name': _('Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.opportunity',
'res_id': int(new_opportunity_id),
'view_id': False,
'views': [(id2, 'form'), (id3, 'tree'), (False, 'calendar'), (False, 'graph')],
'type': 'ir.actions.act_window',
'search_view_id': res['res_id']
}
lead_obj.write(cr, uid, [lead.id], vals)
lead_obj.case_close(cr, uid, [lead.id])
# Copy lead history to opportunity
for his_id in lead.history_line:
history_ids = history_obj.copy(cr, uid, his_id.id, \
{'model_id': model_ids[0], \
'res_id': new_opportunity_id})
#opp_obj.case_open(cr, uid, [new_opportunity_id])
value = {
'name': _('Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.opportunity',
'res_id': int(new_opportunity_id),
'view_id': False,
'views': [(id2, 'form'), (id3, 'tree'), (False, 'calendar'), (False, 'graph')],
'type': 'ir.actions.act_window',
'search_view_id': res['res_id']
}
return value
_columns = {
-1
View File
@@ -97,7 +97,6 @@ class crm_send_new_email(osv.osv_memory):
}
flag = False
if case.section_id and case.section_id.server_id:
flag = smtp_pool.send_email(
cr=cr,
uid=uid,
+20 -21
View File
@@ -9,27 +9,26 @@
<field name="model">crm.send.mail</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Send New Mail" col="4">
<field name="email_to" />
<field name="email_cc"/>
<field name="subject" colspan="4"/>
<group colspan="4" string="Extended Options" expand="1">
<field name="email_from" />
<newline/>
<field name="doc1" filename="doc1_fname"/>
<field name="doc1_fname"/>
<field name="doc2" filename="doc2_fname" />
<field name="doc2_fname"/>
<field name="doc3" filename="doc3_fname" />
<field name="doc3_fname"/>
</group>
<separator string="" colspan="4"/>
<field name="text" nolabel="1" colspan="4"/>
<newline/>
<field name="state" />
<separator string=" " colspan="4"/>
<group colspan="4" col="3" >
<label string=" " />
<form string="Send New Mail" col="2">
<field name="email_from" />
<field name="email_to" />
<field name="email_cc" />
<field name="subject" />
<notebook colspan="2">
<page string="Message">
<field name="text" nolabel="1" colspan="4"/>
</page>
<page string="Attachments">
<field name="doc1" filename="doc1_fname"/>
<field name="doc1_fname"/>
<field name="doc2" filename="doc2_fname" />
<field name="doc2_fname"/>
<field name="doc3" filename="doc3_fname" />
<field name="doc3_fname"/>
</page>
</notebook>
<group colspan="2" col="4" >
<field name="state" />
<button name="action_cancel" string="_Cancel" icon="gtk-cancel" special="cancel" />
<button name="action_send" type="object" string="_Send" icon="gtk-go-forward" />
</group>
+19 -13
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-09-08 15:27+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-22 09:04+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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:58+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
@@ -41,7 +41,7 @@ msgstr "Afleveradres"
#. module: delivery
#: model:product.template,name:delivery.delivery_product_product_template
msgid "Delivery by Poste"
msgstr ""
msgstr "Aflevering per post"
#. module: delivery
#: constraint:ir.ui.view:0
@@ -51,7 +51,7 @@ msgstr "Ongeldige XML voor overzicht"
#. module: delivery
#: constraint:res.partner:0
msgid "Error ! You can not create recursive associated members."
msgstr ""
msgstr "Fout! U kunt geen recursieve geassocieerde leden aanmaken."
#. module: delivery
#: field:delivery.grid,state_ids:0
@@ -61,12 +61,14 @@ msgstr "Provincies"
#. module: delivery
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Ongeldige modelnaam in de definitie van de actie."
#. module: delivery
#: help:res.partner,property_delivery_carrier:0
msgid "This delivery method will be used when invoicing from packing."
msgstr ""
"Deze leveringsmethode wordt gebruikt bij het \"Facturering op basis van "
"verzending\""
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_grid
@@ -123,7 +125,7 @@ msgstr "Planning"
#. module: delivery
#: view:res.partner:0
msgid "Deliveries Properties"
msgstr ""
msgstr "Afleveringseigenschappen"
#. module: delivery
#: field:delivery.carrier,active:0
@@ -234,7 +236,7 @@ msgstr "Maximumwaarde"
#. module: delivery
#: wizard_button:delivery.sale.order,init,delivery:0
msgid "Add Delivery Costs"
msgstr ""
msgstr "Afleveringskosten toevoegen"
#. module: delivery
#: wizard_field:delivery.sale.order,init,carrier_id:0
@@ -247,7 +249,7 @@ msgstr "Verzendwijze"
#. module: delivery
#: field:sale.order,id:0
msgid "ID"
msgstr ""
msgstr "ID"
#. module: delivery
#: field:delivery.grid.line,operator:0
@@ -257,7 +259,7 @@ msgstr "Operator"
#. module: delivery
#: model:ir.module.module,shortdesc:delivery.module_meta_information
msgid "Carriers and deliveries"
msgstr ""
msgstr "Transporteurs en leveringen"
#. module: delivery
#: field:delivery.carrier,grids_id:0
@@ -288,6 +290,10 @@ msgid ""
"define your own carrier and delivery grids for prices. When creating "
"invoices from picking, Open ERP is able to add and compute the shipping line."
msgstr ""
"Hiermee kunt u afleveringsmethoden toe voegen in verkooporders en picking. U "
"kunt uw eigen transporteur en leveringsroosters met prijzen configureren. "
"Bij het aanmaken van facturen op basis van verzending, is OpenERP in staat "
"om een verzendregel te berekenen en toe te voegen aan de factuur."
#. module: delivery
#: field:delivery.grid,zip_to:0
@@ -298,18 +304,18 @@ msgstr "Poscode Afleverradres"
#: model:ir.actions.act_window,name:delivery.action_picking_tree4
#: model:ir.ui.menu,name:delivery.menu_action_picking_tree3
msgid "Packing to be invoiced"
msgstr ""
msgstr "Te factureren verzending"
#. module: delivery
#: help:sale.order,carrier_id:0
msgid ""
"Complete this field if you plan to invoice the shipping based on packing."
msgstr ""
msgstr "Vul dit veld in als u van plan te facturen op basis van verzending."
#. module: delivery
#: model:ir.actions.wizard,name:delivery.wizard_deliver_line_add
msgid "Delivery Costs"
msgstr ""
msgstr "Afleveringskosten"
#. module: delivery
#: field:delivery.grid.line,list_price:0
+14 -12
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-18 06:25+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-23 09:08+0000\n"
"Last-Translator: grisha <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:58+0000\n"
"X-Launchpad-Export-Date: 2010-04-24 03:52+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
@@ -42,7 +42,7 @@ msgstr "Назначение"
#. module: delivery
#: model:product.template,name:delivery.delivery_product_product_template
msgid "Delivery by Poste"
msgstr ""
msgstr "Доставка почтой"
#. module: delivery
#: constraint:ir.ui.view:0
@@ -52,7 +52,7 @@ msgstr "Неправильный XML для просмотра архитект
#. module: delivery
#: constraint:res.partner:0
msgid "Error ! You can not create recursive associated members."
msgstr ""
msgstr "Ошибка! Вы не можете создать рекурсивных связанных участников."
#. module: delivery
#: field:delivery.grid,state_ids:0
@@ -62,7 +62,7 @@ msgstr "Cостояния"
#. module: delivery
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия"
#. module: delivery
#: help:res.partner,property_delivery_carrier:0
@@ -72,7 +72,7 @@ msgstr ""
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_grid
msgid "Delivery Grid"
msgstr ""
msgstr "Расценки на доставку"
#. module: delivery
#: field:delivery.grid,zip_from:0
@@ -119,12 +119,12 @@ msgstr ""
#. module: delivery
#: field:delivery.grid.line,grid_id:0
msgid "Grid"
msgstr ""
msgstr "Расценка"
#. module: delivery
#: view:res.partner:0
msgid "Deliveries Properties"
msgstr ""
msgstr "Свойства доставки"
#. module: delivery
#: field:delivery.carrier,active:0
@@ -151,7 +151,7 @@ msgstr "="
#. module: delivery
#: field:delivery.carrier,product_id:0
msgid "Delivery Product"
msgstr ""
msgstr "Услуга или изделие, соответствующее доставке"
#. module: delivery
#: view:delivery.grid.line:0
@@ -166,7 +166,7 @@ msgstr ""
#. module: delivery
#: field:delivery.grid.line,standard_price:0
msgid "Cost Price"
msgstr ""
msgstr "Себестоимость"
#. module: delivery
#: field:delivery.grid.line,name:0
@@ -177,6 +177,8 @@ msgstr "Название"
#: constraint:product.template:0
msgid "Error: UOS must be in a different category than the UOM"
msgstr ""
"Ошибка. Единицы продажи и единицы измерения должны принадлежать к разным "
"категориям."
#. module: delivery
#: field:delivery.grid,country_ids:0
@@ -323,7 +325,7 @@ msgstr "Ошибка: Неправильный штрих-код"
#. module: delivery
#: view:delivery.grid:0
msgid "Delivery grids"
msgstr ""
msgstr "Расценки на доставку"
#. module: delivery
#: wizard_button:delivery.sale.order,init,end:0
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# fp@tinyerp.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import document_email
+44
View File
@@ -0,0 +1,44 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# fp@tinyerp.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
"name" : "Email Integrated Document",
"version" : "1.1",
"depends" : ["base", "document", "mail_gateway"],
"author" : "Tiny",
"description": """Email Integrated Document
* Email based Document submission
* user based document subission
""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
'init_xml': [],
'update_xml': [
"document_email.xml"
],
'demo_xml': [
],
'installable': True,
'active': False
}
+115
View File
@@ -0,0 +1,115 @@
#!/usr/bin/env python
#-*- coding:utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# fp@tinyerp.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import os
import binascii
import netsvc
from osv import osv
from osv import fields
from tools.translate import _
logger = netsvc.Logger()
class email_to_document(osv.osv):
_name = 'document.email'
_description = "Emails to Documents Gateway"
_columns = {
'name':fields.char('Name', size=64, required=True, readonly=False),
'user_id':fields.many2one('res.users', 'User', required=True),
'directory_id':fields.many2one('document.directory', 'Directory', required=True),
'accept_files':fields.char('File Extension', size=1024, required=True),
'note': fields.text('Description'),
'server_id': fields.many2one('email.server',"Mail Server", select=True),
}
_defaults = {
'accept_files': lambda *a: "['.txt', '.ppt', '.doc', '.xls', '.pdf', '.jpg', '.png']",
'user_id': lambda self, cr, uid, ctx: uid,
}
_sql_constraints = [
('name_uniq', 'unique (user_id, server_id)', 'You can not configure one serve for multiple directory !'),
]
def message_new(self, cr, uid, msg, context):
"""
Automatically calls when new email message arrives
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current user’s ID for security checks
"""
server_id = context.get('server_id', False)
file_pool = self.pool.get('ir.attachment')
if server_id:
ids = self.search(cr, uid, [('server_id', '=', server_id)])
dr = self.browse(cr, uid, ids[0])
id = dr.directory_id.id
partner = self.pool.get('email.server.tools').get_partner(cr, uid, msg.get('from'), context)
ext = eval(dr.accept_files, {})
attachents = msg.get('attachments', [])
for attactment in attachents:
file_ext = os.path.splitext(attactment)
if file_ext[1] not in ext:
logger.notifyChannel('document', netsvc.LOG_WARNING, 'file type %s is not allows to process for directory %s' % (file_ext[1], dr.directory_id.name))
continue
data_attach = {
'name': attactment,
'datas':binascii.b2a_base64(str(attachents.get(attactment))),
'datas_fname': attactment,
'description': msg.get('body', 'Mail attachment'),
'parent_id': id,
'partner_id':partner.get('partner_id', False),
'res_model': 'document.directory',
'res_id': id,
}
file_pool.create(cr, uid, data_attach)
return id
return 0
def message_update(self, cr, uid, ids, vals={}, msg="", default_act=None, context={}):
"""
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current user’s ID for security checks,
@param ids: List of update mail’s IDs
"""
logger.notifyChannel('document', netsvc.LOG_WARNING, 'method not implement to keep multipe version of file')
return True
email_to_document()
class document_directory(osv.osv):
_inherit = 'document.directory'
_columns = {
'email_ids':fields.one2many('document.email', 'directory_id', 'Document to Email', required=False),
}
document_directory()
+103
View File
@@ -0,0 +1,103 @@
<?xml version="1.0"?>
<openerp>
<data>
<record model="ir.ui.view" id="email_view_document_directory_form">
<field name="name">document.directory</field>
<field name="model">document.directory</field>
<field name="type">form</field>
<field name="inherit_id" ref="document.view_document_directory_form"/>
<field name="arch" type="xml">
<notebook colspan="4" position="inside">
<page string="Email Configuration">
<field name="email_ids" colspan="4" nolabel="1">
<tree string="Email to Document">
<field name="name" select="1"/>
<field name="user_id" select="1"/>
</tree>
<form string="Email to Documents">
<group col="6" colspan="4">
<field name="name" select="1" colspan="4"/>
<field name="user_id" select="1"/>
</group>
<notebook colspan="4">
<page string="General Information">
<group col="2" colspan="2">
<separator string="File types to Accept" colspan="2"/>
<field name="accept_files"/>
</group>
<group col="2" colspan="2">
<separator string="POP/IMAP Gateway" colspan="2"/>
<field name="server_id"/>
</group>
<separator string="Description" colspan="4"/>
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</page>
</notebook>
</field>
</record>
<record model="ir.ui.view" id="view_document_email_tree">
<field name="name">document.email.tree</field>
<field name="model">document.email</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Email to Document">
<field name="name" select="1"/>
<field name="directory_id" select="1"/>
<field name="user_id" select="1"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_document_email_form">
<field name="name">document.email.form</field>
<field name="model">document.email</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Email to Documents">
<group col="6" colspan="4">
<field name="name" select="1"/>
<field name="user_id" select="1"/>
<field name="directory_id" select="1"/>
</group>
<notebook colspan="4">
<page string="General Information">
<group col="2" colspan="2">
<separator string="File types to Allow" colspan="2"/>
<field name="accept_files"/>
</group>
<group col="2" colspan="2">
<separator string="POP/IMAP Gateway" colspan="2"/>
<field name="server_id"/>
</group>
<separator string="Description" colspan="4"/>
<field name="note" colspan="4" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_document_email_form">
<field name="name">Email to Document</field>
<field name="res_model">document.email</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_document_email_tree"/>
<field name="context">{}</field>
<field name="domain">[]</field>
</record>
<menuitem
parent="base.menu_document"
id="menu_action_document_email_tree"
name="Email to Documents"
action="action_document_email_form"/>
</data>
</openerp>
+19 -22
View File
@@ -117,7 +117,7 @@ def html2plaintext(html, body_id=None, encoding='utf-8'):
html += '[%s] %s\n' % (i+1, url)
return html
class mail_server(osv.osv):
class email_server(osv.osv):
_name = 'email.server'
_description = "POP/IMAP Server"
@@ -144,13 +144,14 @@ class mail_server(osv.osv):
'action_id':fields.many2one('ir.actions.server', 'Reply Email', required=False, domain="[('state','=','email')]"),
'object_id': fields.many2one('ir.model',"Model", required=True),
'priority': fields.integer('Server Priority', readonly=True, states={'draft':[('readonly',False)]}, help="Priority between 0 to 10, select define the order of Processing"),
'user_id':fields.many2one('res.users', 'User', required=False),
}
_defaults = {
# 'type': lambda *a: "imap",
'state': lambda *a: "draft",
'active': lambda *a: True,
'priority': lambda *a: 5,
'date': lambda *a: time.strftime('%Y-%m-%d'),
'user_id': lambda self, cr, uid, ctx: uid,
}
def check_duplicate(self, cr, uid, ids):
@@ -176,6 +177,9 @@ class mail_server(osv.osv):
return {'value':{'port':port}}
def _process_email(self, cr, uid, server, message, context={}):
context.update({
'server_id':server.id
})
history_pool = self.pool.get('mail.server.history')
msg_txt = email.message_from_string(message)
message_id = msg_txt.get('Message-ID', False)
@@ -289,16 +293,16 @@ class mail_server(osv.osv):
logger.notifyChannel('imap', netsvc.LOG_WARNING, 'method def message_new is not define in model %s' % (model_pool._name))
return False
for attactment in attachents or []:
data_attach = {
'name': attactment,
'datas':binascii.b2a_base64(str(attachents.get(attactment))),
'datas_fname': attactment,
'description': 'Mail attachment',
'res_model': server.object_id.model,
'res_id': res_id,
}
self.pool.get('ir.attachment').create(cr, uid, data_attach)
# for attactment in attachents or []:
# data_attach = {
# 'name': attactment,
# 'datas':binascii.b2a_base64(str(attachents.get(attactment))),
# 'datas_fname': attactment,
# 'description': 'Mail attachment',
# 'res_model': server.object_id.model,
# 'res_id': res_id,
# }
# self.pool.get('ir.attachment').create(cr, uid, data_attach)
if server.action_id:
action_pool = self.pool.get('ir.actions.server')
@@ -322,13 +326,10 @@ class mail_server(osv.osv):
return self.fetch_mail(cr, uid, ids, context)
def fetch_mail(self, cr, uid, ids, context={}):
fp = os.popen('ping www.google.com -c 1 -w 5',"r")
if not fp.read():
logger.notifyChannel('imap', netsvc.LOG_WARNING, 'No address associated with hostname !')
for server in self.browse(cr, uid, ids, context):
logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name))
count = 0
try:
if server.type == 'imap':
imap_server = None
@@ -363,7 +364,6 @@ class mail_server(osv.osv):
pop_server.list()
(numMsgs, totalSize) = pop_server.stat()
count = 0
for num in range(1, numMsgs + 1):
(header, msges, octets) = pop_server.retr(num)
msg = '\n'.join(msges)
@@ -379,7 +379,7 @@ class mail_server(osv.osv):
return True
mail_server()
email_server()
class mail_server_history(osv.osv):
@@ -404,10 +404,7 @@ class mail_server_history(osv.osv):
mail_server_history()
class fetchmail_tool(osv.osv):
"""
OpenERP Model : fetchmail_tool
"""
_name = 'email.server.tools'
_description = "Email Tools"
_auto = False
+16
View File
@@ -12,4 +12,20 @@
<field eval="'()'" name="args"/>
</record>
</data>
<data>
<record id="fetchmail_user_server" model="ir.rule.group">
<field name="name">User wise Server</field>
<field ref="model_email_server" name="model_id" model="ir.model"/>
<field eval="True" name="global"/>
</record>
<record id="fetchmail_user_server_rule" model="ir.rule">
<field model="ir.model.fields" name="field_id" search="[('model','=','email.server'),('name','=','user_id')]"/>
<field name="operator">=</field>
<field name="operand">user.id</field>
<field name="rule_group" ref="fetchmail_user_server"/>
</record>
</data>
</openerp>
+48
View File
@@ -0,0 +1,48 @@
# Occitan (post 1500) 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-04-22 12:06+0000\n"
"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
"Language-Team: Occitan (post 1500) <oc@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-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: google_map
#: model:ir.actions.wizard,name:google_map.wizard_google_map
msgid "Launch Google Map"
msgstr "Aviar Google Map"
#. module: google_map
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML invalid per l'arquitectura de la vista"
#. module: google_map
#: view:res.partner:0
#: view:res.partner.address:0
msgid "Street2 : "
msgstr "Adreça seguida : "
#. module: google_map
#: model:ir.module.module,description:google_map.module_meta_information
msgid ""
"The module adds google map field in partner address\n"
"so that we can directly open google map from the\n"
"url widget."
msgstr ""
#. module: google_map
#: view:res.partner:0
#: view:res.partner.address:0
msgid "Map"
msgstr "Mapa"
+5 -5
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-03-09 21:10+0000\n"
"Last-Translator: Anders Eriksson (Mobila System) <ae@mobilasystem.se>\n"
"PO-Revision-Date: 2010-04-21 15:10+0000\n"
"Last-Translator: djn (XCLUDE) <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 04:16+0000\n"
"X-Launchpad-Export-Date: 2010-04-22 03:43+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr
@@ -189,7 +189,7 @@ msgstr "Medlemmar"
#. module: hr
#: field:hr.employee,ssnid:0
msgid "SSN No"
msgstr ""
msgstr "Personnummer"
#. module: hr
#: model:process.transition,note:hr.process_transition_contactofemployee0
@@ -315,7 +315,7 @@ msgstr "Aktiv"
#. module: hr
#: constraint:hr.employee:0
msgid "Error ! You cannot create recursive Hierarchy of Employees."
msgstr ""
msgstr "Fel! Du kan inte skapa omvänd rangordning av anställda."
#. module: hr
#: model:process.process,name:hr.process_process_employeecontractprocess0
+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: 2009-12-11 20:08+0000\n"
"Last-Translator: Pieter J. Kersten (EduSense BV) <Unknown>\n"
"PO-Revision-Date: 2010-04-22 09:05+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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 04:15+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_holidays
@@ -600,7 +600,7 @@ msgstr "Verlofaanvraag"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_action_holiday_waiting
msgid "Holidays Requests Awaiting for Validation"
msgstr ""
msgstr "Verlofaanvragen wachtend op bevestiging"
#. module: hr_holidays
#: view:hr.holidays:0
+2 -1
View File
@@ -46,7 +46,8 @@ to set up a management by affair.
'hr_timesheet_wizard.xml',
'process/hr_timesheet_process.xml',
'wizard/hr_timesheet_print_employee_view.xml',
'wizard/hr_timesheet_print_users_view.xml'
'wizard/hr_timesheet_print_users_view.xml',
'wizard/hr_timesheet_sign_in_out_view.xml',
],
'demo_xml': ['hr_timesheet_demo.xml'],
'installable': True,
+2 -2
View File
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<data><!--
<wizard id="si_so" name="hr_timesheet.si_so" string="Sign in / Sign out by project"/>
<menuitem action="si_so" id="menu_si_so" parent="hr_attendance.menu_hr_time_tracking" type="wizard"/>
-->
</data>
</openerp>
+1 -1
View File
@@ -19,7 +19,7 @@
#
##############################################################################
import sign_in_out
import hr_timesheet_sign_in_out
import hr_timesheet_print_employee
import hr_timesheet_print_users
@@ -0,0 +1,169 @@
# -*- 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 time
from osv import osv, fields
from tools.translate import _
class hr_so_project(osv.osv_memory):
_name = 'hr.sign.out.project'
_description = 'Sign Out By Project'
_columns = {
'account_id': fields.many2one('account.analytic.account', 'Analytic Account', required=True, domain=[('type','=','normal')]),
'info': fields.char('Work Description', size=256, required=True),
'date_start': fields.datetime('Starting Date', readonly=True),
'date': fields.datetime('Closing Date'),
'analytic_amount': fields.float('Minimum Analytic Amount'),
'name': fields.char('Employees name', size=32, required=True, readonly=True),
'state': fields.char('Current state', size=32, required=True, readonly=True),
'server_date': fields.datetime('Current Date', required=True, readonly=True),
'emp_id': fields.char('Employee ID', size=256, required=False),
}
def _get_empid(self, cr, uid, context=None):
emp_obj = self.pool.get('hr.employee')
emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
if emp_id:
employee = emp_obj.read(cr, uid, emp_id)[0]
return {'name': employee['name'], 'state': employee['state'], 'emp_id': emp_id[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')}
raise osv.except_osv(_('UserError'), _('No employee defined for your user !'))
def _get_empid2(self, cr, uid, context):
res = self._get_empid(cr, uid, context)
cr.execute('select name,action from hr_attendance where employee_id=%s order by name desc limit 1', (res['emp_id'],))
res['server_date'] = time.strftime('%Y-%m-%d %H:%M:%S')
res['date_start'] = cr.fetchone()[0]
return res
def default_get(self, cr, uid, fields_list, context=None):
res = super(hr_so_project, self).default_get(cr, uid, fields_list, context=context)
res.update(self._get_empid2(cr, uid, context=context))
return res
def _write(self, cr, uid, data, emp_id, context=None):
timesheet_obj = self.pool.get('hr.analytic.timesheet')
emp_obj = self.pool.get('hr.employee')
hour = (time.mktime(time.strptime(data['date'] or time.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')) -
time.mktime(time.strptime(data['date_start'], '%Y-%m-%d %H:%M:%S'))) / 3600.0
minimum = data['analytic_amount']
if minimum:
hour = round(round((hour + minimum / 2) / minimum) * minimum, 2)
res = timesheet_obj.default_get(cr, uid, ['product_id','product_uom_id'])
if not res['product_uom_id']:
raise osv.except_osv(_('UserError'), _('No cost unit defined for this employee !'))
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour, res['product_uom_id'])['value']
res['name'] = data['info']
res['account_id'] = data['account_id']
res['unit_amount'] = hour
emp_journal = emp_obj.browse(cr, uid, emp_id, context).journal_id
res['journal_id'] = emp_journal and emp_journal.id or False
res.update(up)
up = timesheet_obj.on_change_account_id(cr, uid, [], res['account_id']).get('value', {})
res.update(up)
return timesheet_obj.create(cr, uid, res, context=context)
def sign_out_result_end(self, cr, uid, ids, context=None):
emp_obj = self.pool.get('hr.employee')
data = self.read(cr, uid, ids, [])[0]
emp_id = data['emp_id']
emp_obj.attendance_action_change(cr, uid, [emp_id], type='sign_out',dt=data['date'])
self._write(cr, uid, data, emp_id, context=context)
return {}
def sign_out_result(self, cr, uid, ids, context=None):
emp_obj = self.pool.get('hr.employee')
data = self.read(cr, uid, ids, [])[0]
emp_id = data['emp_id']
emp_obj.attendance_action_change(cr, uid, [emp_id], type='action', dt=data['date'])
self._write(cr, uid, data, emp_id, context=context)
return {}
hr_so_project()
class hr_si_project(osv.osv_memory):
_name = 'hr.sign.in.project'
_description = 'Sign In By Project'
_columns = {
'name': fields.char('Employees name', size=32, required=True, readonly=True),
'state': fields.char('Current state', size=32, required=True, readonly=True),
'date': fields.datetime('Starting Date'),
'server_date': fields.datetime('Current Date', required=True, readonly=True),
'emp_id': fields.char('Employee ID', size=512, required=False),
}
def check_state(self, cr, uid, ids, context=None):
obj_model = self.pool.get('ir.model.data')
emp_id = self._get_empid(cr, uid, context)['emp_id']
# get the latest action (sign_in or out) for this employee
cr.execute('select action from hr_attendance where employee_id=%s and action in (\'sign_in\',\'sign_out\') order by name desc limit 1', (emp_id,))
res = (cr.fetchone() or ('sign_out',))[0]
#TODO: invert sign_in et sign_out
if res == 'sign_out':
model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_hr_timesheet_sign_in')])
resource_id = obj_model.read(cr,uid,model_data_ids,fields=['res_id'])[0]['res_id']
return {
'name': 'Sign in / Sign out',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'hr.sign.in.project',
'views': [(False,'tree'), (resource_id,'form')],
'type': 'ir.actions.act_window',
'target': 'new'
}
else:
model_data_ids = obj_model.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_hr_timesheet_sign_out')])
resource_id = obj_model.read(cr,uid,model_data_ids,fields=['res_id'])[0]['res_id']
return {
'name': 'Sign in / Sign out',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'hr.sign.out.project',
'views': [(False,'tree'), (resource_id,'form')],
'type': 'ir.actions.act_window',
'target': 'new'
}
def _get_empid(self, cr, uid, context=None):
emp_obj = self.pool.get('hr.employee')
emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
if emp_id:
employee = emp_obj.read(cr, uid, emp_id)[0]
return {'name': employee['name'], 'state': employee['state'], 'emp_id': emp_id[0], 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')}
raise osv.except_osv(_('UserError'), _('No employee defined for your user !'))
def sign_in_result(self, cr, uid, ids, context):
emp_obj = self.pool.get('hr.employee')
data = self.read(cr, uid, ids, [], context)[0]
emp_id = data['emp_id']
try:
success = emp_obj.attendance_action_change(cr, uid, [emp_id], type = 'sign_in' ,dt=data['date'] or False)
except except_osv, e:
raise osv.except_osv(e.name, e.value)
return {}
def default_get(self, cr, uid, fields_list, context=None):
res = super(hr_si_project, self).default_get(cr, uid, fields_list, context=context)
res.update(self._get_empid(cr, uid, context=context))
return res
hr_si_project()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_hr_timesheet_sign_in_message" model="ir.ui.view">
<field name="name">hr.sign.in.project.message.form</field>
<field name="model">hr.sign.in.project</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sign In/Out By Project">
<group colspan="4" >
<separator string="This Wizard will make Sign In/Out By Project" colspan="4"/>
</group>
<group colspan="4" col="6">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" string="Sign in / Sign out" name="check_state" type="object"/>
</group>
</form>
</field>
</record>
<record id="view_hr_timesheet_sign_in" model="ir.ui.view">
<field name="name">hr.sign.in.project.form</field>
<field name="model">hr.sign.in.project</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sign In/Out By Project">
<group colspan="4" >
<separator string="Sign in" colspan="4"/>
<field name="name" readonly="True" />
<field name="state" readonly="True" />
<field name="server_date"/>
<label string="(local time on the server side)" colspan="2"/>
<field name="date"/>
<label string="(Keep empty for current time)" colspan="2"/>
</group>
<group colspan="4" col="6">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" string="Start Working" name="sign_in_result" type="object"/>
</group>
</form>
</field>
</record>
<record id="action_hr_timesheet_sign_in" model="ir.actions.act_window">
<field name="name">Sign in / Sign out by project</field>
<field name="res_model">hr.sign.in.project</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_hr_timesheet_sign_in_message"/>
<field name="target">new</field>
</record>
<menuitem action="action_hr_timesheet_sign_in"
id="menu_hr_timesheet_sign_in"
parent="hr_attendance.menu_hr_time_tracking"
/>
<record id="view_hr_timesheet_sign_out" model="ir.ui.view">
<field name="name">hr.sign.out.project.form</field>
<field name="model">hr.sign.out.project</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sign In/Out By Project">
<group colspan="4" >
<separator string="General Information" colspan="4" />
<field name="name" readonly="True" />
<field name="state" readonly="True" />
<field name="date_start"/>
<field name="server_date"/>
<separator string="Work done in the last period" colspan="4" />
<field name="account_id" colspan="3"/>
<field name="info" colspan="3"/>
<field name="date"/>
<label string="(Keep empty for current_time)" colspan="2"/>
<field name="analytic_amount"/> </group>
<group colspan="4" col="6">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" string="Change Work" name="sign_out_result" type="object"/>
<button icon="gtk-ok" string="Stop Working" name="sign_out_result_end" type="object"/>
</group>
</form>
</field>
</record>
<record id="action_hr_timesheet_sign_out" model="ir.actions.act_window">
<field name="name">Sign in / Sign out by project</field>
<field name="res_model">hr.sign.out.project</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_hr_timesheet_sign_out"/>
<field name="target">new</field>
</record>
</data>
</openerp>
-174
View File
@@ -1,174 +0,0 @@
# -*- 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 wizard
import time
import pooler
from tools.translate import _
si_form ='''<?xml version="1.0"?>
<form string="Sign in / Sign out">
<separator string="Sign in" colspan="4"/>
<field name="name" readonly="True" />
<field name="state" readonly="True" />
<field name="server_date"/>
<label string="(local time on the server side)" colspan="2"/>
<field name="date"/>
<label string="(Keep empty for current time)" colspan="2"/>
</form>'''
si_fields = {
'name': {'string': "Employee's name", 'type':'char', 'required':True, 'readonly':True},
'state': {'string': "Current state", 'type' : 'char', 'required' : True, 'readonly': True},
'date': {'string':"Starting Date", 'type':'datetime'},
'server_date': {'string':"Current Date", 'type':'datetime', 'readonly':True},
}
so_form = '''<?xml version="1.0" ?>
<form string="Sign in status">
<separator string="General Information" colspan="4" />
<field name="name" readonly="True" />
<field name="state" readonly="True" />
<field name="date_start"/>
<field name="server_date"/>
<separator string="Work done in the last period" colspan="4" />
<field name="account_id" colspan="3"/>
<field name="info" colspan="3"/>
<field name="date"/>
<label string="(Keep empty for current_time)" colspan="2"/>
<field name="analytic_amount"/>
</form>'''
so_fields = {
'name': {'string':"Employee's name", 'type':'char', 'required':True, 'readonly':True},
'state': {'string':"Current state", 'type':'char', 'required':True, 'readonly':True},
'account_id': {'string':"Analytic Account", 'type':'many2one', 'relation':'account.analytic.account', 'required':True, 'domain':"[('type','=','normal')]"},
'info': {'string':"Work Description", 'type':'char', 'size':256, 'required':True},
'date': {'string':"Closing Date", 'type':'datetime'},
'date_start': {'string':"Starting Date", 'type':'datetime', 'readonly':True},
'server_date': {'string':"Current Server Date", 'type':'datetime', 'readonly':True},
'analytic_amount': {'string':"Minimum Analytic Amount", 'type':'float'},
}
def _get_empid(self, cr, uid, data, context):
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
emp_id = emp_obj.search(cr, uid, [('user_id', '=', uid)])
if emp_id:
employee = emp_obj.read(cr, uid, emp_id)[0]
return {'name': employee['name'], 'state': employee['state'], 'emp_id': emp_id[0], 'date':False, 'server_date':time.strftime('%Y-%m-%d %H:%M:%S')}
raise wizard.except_wizard(_('UserError'), _('No employee defined for your user !'))
def _get_empid2(self, cr, uid, data, context):
res = _get_empid(self,cr, uid, data, context)
cr.execute('select name,action from hr_attendance where employee_id=%s order by name desc limit 1', (res['emp_id'],))
res['server_date'] = time.strftime('%Y-%m-%d %H:%M:%S')
res['date_start'] = cr.fetchone()[0]
res['info'] = ''
res['account_id'] = False
return res
def _sign_in_result(self, cr, uid, data, context):
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
emp_id = data['form']['emp_id']
from osv.osv import except_osv
try:
success = emp_obj.attendance_action_change(cr, uid, [emp_id], type = 'sign_in' ,dt=data['form']['date'] or False)
except except_osv, e:
raise wizard.except_wizard(e.name, e.value)
return {}
def _write(self, cr, uid, data, emp_id, context):
timesheet_obj = pooler.get_pool(cr.dbname).get('hr.analytic.timesheet')
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
hour = (time.mktime(time.strptime(data['form']['date'] or time.strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')) -
time.mktime(time.strptime(data['form']['date_start'], '%Y-%m-%d %H:%M:%S'))) / 3600.0
minimum = data['form']['analytic_amount']
if minimum:
hour = round(round((hour + minimum / 2) / minimum) * minimum, 2)
res = timesheet_obj.default_get(cr, uid, ['product_id','product_uom_id'])
if not res['product_uom_id']:
raise wizard.except_wizard(_('UserError'), _('No cost unit defined for this employee !'))
up = timesheet_obj.on_change_unit_amount(cr, uid, False, res['product_id'], hour, res['product_uom_id'])['value']
res['name'] = data['form']['info']
res['account_id'] = data['form']['account_id']
res['unit_amount'] = hour
emp_journal = emp_obj.browse(cr, uid, emp_id, context).journal_id
res['journal_id'] = emp_journal and emp_journal.id or False
res.update(up)
up = timesheet_obj.on_change_account_id(cr, uid, [], res['account_id']).get('value', {})
res.update(up)
return timesheet_obj.create(cr, uid, res, context)
def _sign_out_result_end(self, cr, uid, data, context):
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
emp_id = data['form']['emp_id']
emp_obj.attendance_action_change(cr, uid, [emp_id], type='sign_out',dt=data['form']['date'])
_write(self, cr, uid, data, emp_id, context)
return {}
def _sign_out_result(self, cr, uid, data, context):
emp_obj = pooler.get_pool(cr.dbname).get('hr.employee')
emp_id = data['form']['emp_id']
emp_obj.attendance_action_change(cr, uid, [emp_id], type='action',dt=data['form']['date'])
_write(self, cr, uid, data, emp_id, context)
return {}
def _state_check(self, cr, uid, data, context):
emp_id = _get_empid(self, cr, uid, data, context)['emp_id']
# get the latest action (sign_in or out) for this employee
cr.execute('select action from hr_attendance where employee_id=%s and action in (\'sign_in\',\'sign_out\') order by name desc limit 1', (emp_id,))
res = (cr.fetchone() or ('sign_out',))[0]
#TODO: invert sign_in et sign_out
return res
class wiz_si_so(wizard.interface):
states = {
'init' : {
'actions' : [_get_empid],
'result' : {'type' : 'choice', 'next_state': _state_check}
},
'sign_out' : { # this means sign_in...
'actions' : [_get_empid],
'result' : {'type':'form', 'arch':si_form, 'fields' : si_fields, 'state':[('end', 'Cancel'),('si_result', 'Start Working') ] }
},
'si_result' : {
'actions' : [_sign_in_result],
'result' : {'type':'state', 'state':'end'}
},
'sign_in' : { # this means sign_out...
'actions' : [_get_empid2],
'result' : {'type':'form', 'arch':so_form, 'fields':so_fields, 'state':[('end', 'Cancel'),('so_result', 'Change Work'),('so_result_end', 'Stop Working') ] }
},
'so_result' : {
'actions' : [_sign_out_result],
'result' : {'type':'state', 'state':'end'}
},
'so_result_end' : {
'actions' : [_sign_out_result_end],
'result' : {'type':'state', 'state':'end'}
},
}
wiz_si_so('hr_timesheet.si_so')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -39,6 +39,7 @@ reports, eso.""",
'hr_timesheet_invoice_report.xml',
'report/report_analytic_view.xml',
'report/hr_timesheet_invoice_report_view.xml',
'wizard/hr_timesheet_invoice_analytic_cost_ledger_view.xml',
],
'demo_xml': ['hr_timesheet_invoice_demo.xml'],
'installable': True,
@@ -13,7 +13,7 @@
sequence="2" />
<report auto="False" id="account_analytic_account_cost_ledger" menu="False" model="account.analytic.account" name="hr.timesheet.invoice.account.analytic.account.cost_ledger" rml="account/project/report/cost_ledger.rml" string="Cost Ledger"/>
<wizard id="account_analytic_account_cost_ledger_report" keyword="client_print_multi" model="account.analytic.account" name="hr.timesheet.invoice.account.analytic.account.cost_ledger.report" string="Cost Ledger"/>
<!--<wizard id="account_analytic_account_cost_ledger_report" keyword="client_print_multi" model="account.analytic.account" name="hr.timesheet.invoice.account.analytic.account.cost_ledger.report" string="Cost Ledger"/>-->
<report
auto="False"
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@@ -15,14 +15,14 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import hr_timesheet_invoice_create
import account_analytic_profit
import hr_timesheet_final_invoice_create
import wizard_account_analytic_cost_ledger_report
import hr_timesheet_analytic_cost_ledger_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -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/>.
#
##############################################################################
import time
from osv import osv, fields
class hr_timesheet_analytic_cost_ledger(osv.osv_memory):
_name = 'hr.timesheet.analytic.cost.ledger'
_description = 'hr.timesheet.analytic.cost.ledger'
_columns = {
'date1': fields.date('Start of period', required=True),
'date2': fields.date('End of period', required=True)
}
_defaults = {
'date1': lambda *a: time.strftime('%Y-01-01'),
'date2': lambda *a: time.strftime('%Y-%m-%d')
}
def print_report(self, cr, uid, ids, context=None):
if context is None:
context = {}
datas = {
'ids': 'active_ids' in context and context['active_ids'] or [],
'model': 'account.analytic.account',
'form': self.read(cr, uid, ids)[0]
}
return {
'type': 'ir.actions.report.xml',
'report_name': 'hr.timesheet.invoice.account.analytic.account.cost_ledger',
'datas': datas,
}
hr_timesheet_analytic_cost_ledger()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_hr_timesheet_invoice_cost_ledger" model="ir.ui.view">
<field name="name">Cost Ledger</field>
<field name="model">hr.timesheet.analytic.cost.ledger</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Select Period">
<group col="4" colspan="6">
<field name="date1"/>
<field name="date2"/>
</group>
<separator colspan="4"/>
<group col="2" colspan="4">
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
<button name="print_report" string="Print" colspan="1" type="object" icon="gtk-print"/>
</group>
</form>
</field>
</record>
<record id="action_hr_timesheet_invoice_cost_ledger" model="ir.actions.act_window">
<field name="name">Cost Ledger</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">hr.timesheet.analytic.cost.ledger</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record model="ir.values" id="hr_timesheet_invoice_cost_ledger_values">
<field name="model_id" ref="model_account_analytic_account" />
<field name="object" eval="1" />
<field name="name">Cost Ledger</field>
<field name="key2">client_print_multi</field>
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_hr_timesheet_invoice_cost_ledger'))" />
<field name="key">action</field>
<field name="model">account.analytic.account</field>
</record>
</data>
</openerp>
@@ -1,52 +0,0 @@
# -*- 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 time
import wizard
dates_form = '''<?xml version="1.0"?>
<form string="Select period">
<field name="date1"/>
<field name="date2"/>
</form>'''
dates_fields = {
'date1': {'string':'Start of period', 'type':'date', 'required':True, 'default': lambda *a: time.strftime('%Y-01-01')},
'date2': {'string':'End of period', 'type':'date', 'required':True, 'default': lambda *a: time.strftime('%Y-%m-%d')},
}
class wizard_report(wizard.interface):
states = {
'init': {
'actions': [],
'result': {'type':'form', 'arch':dates_form, 'fields':dates_fields, 'state':[('end','Cancel'),('report','Print')]}
},
'report': {
'actions': [],
'result': {'type':'print', 'report':'hr.timesheet.invoice.account.analytic.account.cost_ledger', 'state':'end'}
}
}
wizard_report('hr.timesheet.invoice.account.analytic.account.cost_ledger.report')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-1
View File
@@ -2058,7 +2058,6 @@ class olap_warehouse_wizard(osv.osv_memory):
@param uid: the current user’s ID for security checks,
@param context: A standard dictionary for contextual values
"""
query_obj = self.pool.get('olap.query.logs')
qry_ids = query_obj.search(cr, uid, [('user_id', '=', uid), ('count', '>=', 3)])
+1
View File
@@ -40,6 +40,7 @@ class olap_load_column(osv.osv_memory):
model_data_ids = self.pool.get('ir.model.data').search(cr, uid, \
[('model', '=', 'ir.ui.view'), \
('name', '=', 'view_olap_database_columns_form')], context={})
print "model_ids", model_data_ids
resource_id = self.pool.get('ir.model.data').read(cr, uid, \
model_data_ids, fields=['res_id'])[0]['res_id']
return {
+56 -19
View File
@@ -7,24 +7,24 @@ 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-15 09:57+0000\n"
"Last-Translator: The Loeki <the.loeki@gmail.com>\n"
"PO-Revision-Date: 2010-04-22 10:54+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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-21 04:06+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_operation:0
msgid "Manufacturing Operations"
msgstr ""
msgstr "Productie operaties"
#. module: profile_manufacturing
#: model:ir.module.module,description:profile_manufacturing.module_meta_information
msgid "Profile for manufacturing industries"
msgstr ""
msgstr "Profiel voor productie industrie"
#. module: profile_manufacturing
#: constraint:ir.model:0
@@ -36,22 +36,22 @@ msgstr ""
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_jit:0
msgid "Just in Time Scheduling"
msgstr ""
msgstr "Just in time planning"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,sale_journal:0
msgid "Manage by Journals"
msgstr ""
msgstr "Beheer middels dagboeken"
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
msgid "Relationship Management"
msgstr ""
msgstr "Relatiebeheer"
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,portal:0
msgid "This module allows you to manage a Portal system."
msgstr ""
msgstr "Deze module helpt u het portaal-systeem te beheren."
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,board_document:0
@@ -61,6 +61,11 @@ msgid ""
"documents, printed reports, calendar system). It opens an FTP access for the "
"users to easily browse association's document."
msgstr ""
"Met het documentbeheersysteem van OpenERP kunt u allerlei documenten "
"(interne documenten, afgedrukte overzichten, agenda's) opslaan, "
"doorbladeren, automatisch indexeren, zoeken en inzien.\r\n"
"Het systeem maakt gebruik van FTP toegang zodat gebruikers eenvoudig bij de "
"documenten kunnen komen."
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,sale_journal:0
@@ -69,17 +74,20 @@ msgid ""
"journals. You can define journals for trucks, salesman, departments, "
"invoicing date delivery period, etc."
msgstr ""
"Deze module help u uw verkopen, facturatie en materiaal picking the beheren "
"middels dagboeken. U kunt dagboeken definiëren voor vrachtwagens, verkopers, "
"afdelingen, factuurdatum aflever periode, enz."
#. module: profile_manufacturing
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Ongeldige modelnaam in de definitie van de actie."
#. module: profile_manufacturing
#: model:ir.actions.act_window,name:profile_manufacturing.action_config_install_module
#: view:profile.manufacturing.config.install_modules_wizard:0
msgid "Manufacturing Profile: Install Extra Modules"
msgstr ""
msgstr "Installeer extra modulen"
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,mrp_jit:0
@@ -88,6 +96,11 @@ msgid ""
"and faster for real time stock computation but, in counter-part, it manages "
"less efficiently priorities in procurements."
msgstr ""
"De JIT (Just in Time) module stelt u in staat een directe mrp-planningsrun "
"van het actieve product bij wijzigingen te laten uitvoeren. Dit is "
"makkelijker en sneller in gebruik voor real time voorraad berekening, maar "
"heeft als nadeel dat het minder efficiënt prioriteiten kan stellen bij "
"genereren van inkoopaanvragen."
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,mrp_operation:0
@@ -96,16 +109,20 @@ msgid ""
"work order/operation. You will be able to planify, analyse the cost, check "
"times, ... on all operations of each manufacturing order"
msgstr ""
"Deze module stelt u in staat om niet alleen de productie order te beheren, "
"maar ook de operaties. U zult in staat zijn om te plannen, haar kosten te "
"analyseren, tijden te controleren, ... over alle operaties van elke "
"productieorder."
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,board_document:0
msgid "Document Management"
msgstr ""
msgstr "Documentbeheer"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,portal:0
msgid "Portal"
msgstr ""
msgstr "Portaal"
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
@@ -118,6 +135,8 @@ msgid ""
"Allow to manage product repairs. Handle the guarantee limit date and the "
"invoicing of products and services."
msgstr ""
"Deze module stelt u in staat om productreparaties te beheren. Beheer "
"garantietermeinen en de facturatie van producten en services."
#. module: profile_manufacturing
#: constraint:ir.ui.view:0
@@ -131,21 +150,27 @@ msgid ""
"manufacturing profile you selected. You will be able to install them based "
"on our requirements."
msgstr ""
"Installeer meer modules. Enkele modules worden voorgesteld in "
"overeenstemming met dit productieprofiel dat u heeft geselecteerd. U zult in "
"staat om deze modules te installeren waarbij OpenERP rekening houd met de "
"benodigde afhankelijkheden."
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,mrp_subproduct:0
msgid "This module allows you to add sub poducts in mrp bom."
msgstr ""
"Deze module stelt u in staat om subproducten toe te voegen in de BOM (Bill "
"of Materials)"
#. module: profile_manufacturing
#: model:ir.module.module,shortdesc:profile_manufacturing.module_meta_information
msgid "Manufacturing industry profile"
msgstr ""
msgstr "Productie industrie profiel"
#. module: profile_manufacturing
#: model:ir.model,name:profile_manufacturing.model_profile_manufacturing_config_install_modules_wizard
msgid "profile.manufacturing.config.install_modules_wizard"
msgstr ""
msgstr "profile.manufacturing.config.install_modules_wizard"
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,sale_crm:0
@@ -154,6 +179,9 @@ msgid ""
"opportunities tracking, shared calendar, jobs tracking, bug tracker, and so "
"on."
msgstr ""
"Deze module installeert de Customer Relation Management (CRM) uitbreidingen "
"als: volgen van leads en kansen, gedeelde agenda's, HRM werving- & "
"selectieproces, foutenrapportbeheer, enz."
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
@@ -163,7 +191,7 @@ msgstr "Installeren"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,sale_crm:0
msgid "CRM and Calendars"
msgstr ""
msgstr "CRM en calenders"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_repair:0
@@ -173,7 +201,7 @@ msgstr "Reparatie"
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,sale_margin:0
msgid "Display margins on the sale order form."
msgstr ""
msgstr "Toont marges op het verkooporderformulier."
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,point_of_sale:0
@@ -183,16 +211,20 @@ msgid ""
"a perfect ergonomy with touchscreen materials and payment processing "
"hardware."
msgstr ""
"Deze module stelt u in staat om een kassa systeem (POS) te beheren. Het bied "
"een basis formulier voor kassa operaties. Selecteert u ook onze "
"gebruikersinterface kassa systeem voor een uitstekende ergonomy met "
"touchscreen schermen en betaalautomaten hardware."
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_subproduct:0
msgid "Mrp Sub Product"
msgstr ""
msgstr "Mrp sub-product"
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
msgid "Sales Management"
msgstr ""
msgstr "Verkoopbeheer"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,warning:0
@@ -213,6 +245,11 @@ msgid ""
"managing a manufacturing chain, a quality control location, product that you "
"rent, etc."
msgstr ""
"Stelt u in staat om geavanceerde logistiek te beheren met diverse locaties "
"en magazijnen. U kunt per product definiëren: standaard locaties voor "
"verschillende operaties, etc. Deze module wordt vaak gebruikt voor "
"lokalisatie van producten, beheren van en productieketen, kwaliteitscontrole "
"lokaties, bij verhuur van producten, enz."
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
+1 -1
View File
@@ -84,7 +84,7 @@ class project_issue(osv.osv):
resource_id = False
if issue.user_id:
resource_ids = res_obj.search(cr, uid, [('user_id','=',issue.user_id.id)])
resource_id = len(resource_ids) or resource_ids[0]
resource_id = len(resource_ids) and resource_ids[0] or False
duration = float(ans.days)
if issue.section_id.resource_calendar_id:
+5 -24
View File
@@ -17,12 +17,12 @@
<!--Inventory control-->
<menuitem id="menu_procurement_management_nventory" name="Inventory Control"
<menuitem id="menu_procurement_management_inventory" name="Inventory Control"
parent="base.menu_purchase_root" sequence="4"/>
<menuitem action="stock.action_picking_tree4" id="menu_action_picking_tree4" parent="menu_procurement_management_nventory"
<menuitem action="stock.action_picking_tree4" id="menu_action_picking_tree4" parent="menu_procurement_management_inventory"
name="Incoming Shipments" sequence="9"/>
<menuitem action="stock.action_reception_picking_move" id="menu_action_reception_picking_move"
name="Incoming Products" parent="menu_procurement_management_nventory" sequence="10"/>
name="Incoming Products" parent="menu_procurement_management_inventory" sequence="10"/>
<!--Invoice control-->
<menuitem id="menu_procurement_management_invoice" name="Invoice Control"
@@ -300,28 +300,9 @@
<field name="model">purchase.order</field>
</record>
-->
<record id="purchase_line_form_action" model="ir.actions.act_window">
<field name="name">Purchase Order Lines</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order.line</field>
<field name="view_mode">tree,form</field>
</record>
<record id="purchase_line_form_action_tree" model="ir.actions.act_window.view">
<field eval="1" name="sequence"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="purchase_order_line_tree"/>
<field name="act_window_id" ref="purchase_line_form_action"/>
</record>
<record id="purchase_line_form_action_form" model="ir.actions.act_window.view">
<field eval="2" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="purchase_order_line_form"/>
<field name="act_window_id" ref="purchase_line_form_action"/>
</record>
<menuitem action="purchase_line_form_action" id="menu_purchase_line_form_action" parent="base.menu_purchase_root"/>
<record id="purchase_line_form_action2" model="ir.actions.act_window">
<field name="name">Uninvoiced Purchase Order Lines</field>
<field name="name">Lines To Invoices</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order.line</field>
<field name="domain">[('state','in',('confirmed','done')), ('invoiced','=',False)]</field>
@@ -340,7 +321,7 @@
<field name="view_id" ref="purchase_order_line_form"/>
<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_purchase_line_form_action"/>
<menuitem action="purchase_line_form_action2" id="menu_purchase_line_order_draft" parent="menu_procurement_management_invoice"/>
</data>
+14 -9
View File
@@ -8,16 +8,21 @@
<field name="inherit_id" ref="base.res_config_installer"/>
<field name="arch" type="xml">
<data>
<form position="attributes">
<attribute name="string">Purchase Modules Installation</attribute>
</form>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string"> This module allows you to manage your Purchase Requisition.</attribute>
</xpath>
<separator string="title" position="replace"/>
<form position="attributes">
<attribute name="string">Purchase Modules Installation</attribute>
</form>
<separator string="title" position="attributes">
<attribute name="string"
>Configure Your Purchase System</attribute>
</separator>
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string">After having installed the core purchase application, you can extend it with more modules on needs of your organization</attribute>
</xpath>
<group colspan="8">
<separator string="Purchase Requisition" colspan="4"/>
<separator string="Purchase Application" colspan="4"/>
<field name="purchase_requisition"/>
</group>
</data>
@@ -39,24 +39,18 @@ class purchase_requisition(osv.osv):
'company_id': fields.many2one('res.company', 'Company', required=True),
'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders'),
'line_ids' : fields.one2many('purchase.requisition.line','requisition_id','Products to Purchase'),
'state': fields.selection([('draft','Draft'),('open','Open'),('cancel','Cancelled'),('close','Close'),('done','Done')], 'State', required=True)
'state': fields.selection([('draft','Draft'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True)
}
_defaults = {
'date_start': lambda *args: time.strftime('%Y-%m-%d %H:%M:%S'),
'state': lambda *args: 'open',
'state': lambda *args: 'draft',
'exclusive': lambda *args: 'multiple',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
'user_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).id ,
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'purchase.order.requisition'),
}
def tender_close(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'done', 'date_end': time.strftime('%Y-%m-%d %H:%M:%S')})
return True
def tender_open(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'open'}, context=context)
return True
def tender_cancel(self, cr, uid, ids, context={}):
purchase_order_obj = self.pool.get('purchase.order')
for purchase in self.browse(cr, uid, ids):
@@ -65,14 +59,14 @@ class purchase_requisition(osv.osv):
purchase_order_obj.action_cancel(cr,uid,[purchase_id.id])
self.write(cr, uid, ids, {'state': 'cancel'})
return True
def tender_confirm(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'done','date_end':time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
def tender_in_progress(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'in_progress'} ,context=context)
return True
def tender_reset(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'draft'})
return True
def tender_done(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'done'}, context=context)
self.write(cr, uid, ids, {'state':'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
return True
@@ -84,7 +78,7 @@ class purchase_requisition_line(osv.osv):
_description="Purchase Requisition Line"
_rec_name = 'product_id'
_columns = {
'product_id': fields.many2one('product.product', 'Product'),
'product_id': fields.many2one('product.product', 'Product' , domain=[('purchase_requisition', '=', True)]),
'product_uom_id': fields.many2one('product.uom', 'Product UoM'),
'product_qty': fields.float('Quantity', digits=(16,2)),
'requisition_id' : fields.many2one('purchase.requisition','Purchase Requisition', ondelete='cascade'),
@@ -156,10 +150,10 @@ class mrp_procurement(osv.osv):
procurement = self.browse(cr, uid, proc_id)
if procurement.product_id.purchase_requisition:
self.pool.get('purchase.requisition').create(cr, uid, {
'name': procurement.name,
'name': sequence_obj.get(cr, uid, 'purchase.order.requisition'),
'origin': procurement.name,
'date_end': procurement.date_planned,
'lines_ids': [(0,0,{
'line_ids': [(0,0,{
'product_id': procurement.product_id.id,
'product_uom_id': procurement.product_uom.id,
'product_qty': procurement.product_qty
@@ -73,11 +73,10 @@
<separator colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="1" readonly ="1"/>
<button name="tender_close" states="open,draft" string="Close" type="object" icon="gtk-close" />
<button name="tender_open" states="draft,in_progress" string="Open" type="object" icon="gtk-go-forward" />
<button name="tender_cancel" states="draft,open," string="Cancel" type="object" icon="gtk-cancel" />
<button name="tender_confirm" states="open" string="Confirm" type="object" icon="gtk-go-up" />
<button name="tender_in_progress" states="draft" string="Confirm" type="object" icon="gtk-apply" />
<button name="tender_reset" states="done,cancel" string="Reset to Draft" type="object" icon="gtk-convert" />
<button name="tender_done" states="in_progress" string="Done" type="object" icon="gtk-jump-to" />
<button name="tender_cancel" states="draft,in_progress" string="Cancel" type="object" icon="gtk-cancel" />
</group>
@@ -107,8 +106,7 @@
<field name="arch" type="xml">
<search string="Search Purchase Requisition">
<group col='10' colspan='4'>
<filter icon="terp-purchase" string="Quotations" domain="[('state','=','draft')]" separator="1"/>
<filter icon="terp-purchase" string="Approved" domain="[('state','=','open')]" separator="1"/>
<filter icon="terp-purchase" string=" Current" domain="[('state','=','draft,in_progress')]" separator="1" help="Current Purchaes Requisition"/>
<separator orientation="vertical"/>
<field name="name" select="1" string="Requisition Reference"/>
<field name="purchase_ids" select="1"/>
@@ -31,7 +31,7 @@ class purchase_requisition_partner(osv.osv_memory):
_name = "purchase.requisition.partner"
_description = "Purchase Requisition Partner"
_columns = {
'partner_id': fields.many2one('res.partner', 'Partner', required=True),
'partner_id': fields.many2one('res.partner', 'Partner', required=True,domain=[('supplier', '=', True)]),
'partner_address_id':fields.many2one('res.partner.address', 'Address', required=True),
}
-4
View File
@@ -483,10 +483,6 @@ class smtpclient(osv.osv):
return result
def _send_emails(self, cr, uid, ids, context={}):
fp = os.popen('ping www.google.com -c 1 -w 5',"r")
if not fp.read():
return False
queue = self.pool.get('email.smtpclient.queue')
history = self.pool.get('email.smtpclient.history')
queue.write(cr, uid, ids, {'state':'sending'})
-3
View File
@@ -52,10 +52,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
"wizard/stock_location_product_view.xml",
"wizard/stock_inventory_line_split_view.xml",
"wizard/stock_change_standard_price_view.xml",
"wizard/stock_picking_make_view.xml",
"wizard/stock_traceability_view.xml",
"wizard/stock_picking_make_view.xml",
"wizard/stock_return_picking_view.xml",
"stock_workflow.xml",
"stock_incoterms.xml",
"stock_wizard.xml",
@@ -42,6 +42,5 @@
"access_stock_traceability_lot_downstream","stock.traceability.lot.downstream","model_stock_traceability_lot_downstream","stock.group_stock_user",1,0,0,0
"access_stock_partial_picking",stock.partial.picking","model_stock_partial_picking","stock.group_stock_user",1,0,0,0
"access_stock_partial_move","stock.partial.move","model_stock_partial_move","stock.group_stock_user",1,0,0,0
"access_stock_picking_make","stock.picking.make","model_stock_picking_make","stock.group_stock_user",1,0,0,0
"access_stock_inventory_merge","stock.inventory.merge","model_stock_inventory_merge","stock.group_stock_user",1,0,0,0
"access_stock_change_standard_price","stock.change.standard.price","model_stock_change_standard_price","stock.group_stock_user",1,0,0,0
Can't render this file because it contains an unexpected character in line 43 and column 53.
+4 -1
View File
@@ -1339,8 +1339,11 @@ class stock_move(osv.osv):
new_moves = []
for picking, todo in self._chain_compute(cr, uid, moves, context).items():
ptype = self.pool.get('stock.location').picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0])
pick_name = ''
if ptype == 'delivery':
pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.delivery')
pickid = self.pool.get('stock.picking').create(cr, uid, {
'name': picking.name,
'name': pick_name or picking.name,
'origin': str(picking.origin or ''),
'type': ptype,
'note': picking.note,
-48
View File
@@ -601,18 +601,6 @@
<field name="min_date" select="1"/>
<field name="type"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
<button name="%(act_stock_make_picking_wizard)d"
states="confirmed,assigned"
string="Make Picking"
type="action"
icon="gtk-go-forward"
help="Make Picking" colspan="2"/>
<button name="%(act_stock_return_picking)d"
states="done"
string="Return Picking"
type="action"
icon="gtk-go-back"
help="Return Picking" colspan="2"/>
</group>
<notebook colspan="4">
<page string="General Information">
@@ -763,18 +751,6 @@
<field name="date" />
<field name="min_date" select="1"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
<button name="%(act_stock_make_picking_wizard)d"
states="assigned"
string="Make Picking"
type="action"
icon="gtk-go-forward"
help="Make Picking" colspan="2"/>
<button name="%(act_stock_return_picking)d"
states="done"
string="Return Picking"
type="action"
icon="gtk-go-back"
help="Return Picking" colspan="2"/>
</group>
<notebook colspan="4">
<page string="General Information">
@@ -953,18 +929,6 @@
<field name="backorder_id" readonly="1"/>
<field name="origin" readonly="1"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
<button name="%(act_stock_make_picking_wizard)d"
states="assigned"
string="Make Picking"
type="action"
icon="gtk-go-forward"
help="Make Picking" colspan="2"/>
<button name="%(act_stock_return_picking)d"
states="done"
string="Return Picking"
type="action"
icon="gtk-go-back"
help="Return Picking" colspan="2"/>
</group>
<notebook colspan="4">
<page string="General Information">
@@ -1140,18 +1104,6 @@
<field name="min_date" readonly="1"/>
<field name="invoice_state" string="Invoice Control"/>
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
<button name="%(act_stock_make_picking_wizard)d"
states="confirmed,assigned"
string="Make Picking"
type="action"
icon="gtk-go-forward"
help="Make Picking" colspan="2"/>
<button name="%(act_stock_return_picking)d"
states="done"
string="Return Picking"
type="action"
icon="gtk-go-back"
help="Return Picking" colspan="2"/>
</group>
<notebook colspan="4">
<page string="General Information">
-2
View File
@@ -23,9 +23,7 @@ import stock_traceability
import stock_move
import stock_partial_picking
import stock_partial_move
import stock_picking_make
import wizard_replacement
import stock_return_picking
import wizard_ups
import stock_inventory_merge
import stock_inventory_set_stock_zero
+20 -21
View File
@@ -25,35 +25,34 @@ class stock_location_product(osv.osv_memory):
_name = "stock.location.product"
_description = "Products by Location"
_columns = {
'from_date': fields.datetime('From'),
'to_date': fields.datetime('To'),
'from_date': fields.datetime('From'),
'to_date': fields.datetime('To'),
}
def action_open_window(self, cr, uid, ids, context):
"""
To open location wise product information specific to given duration
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param ids: the ID or list of IDs if we want more than one
@param context: A standard dictionary
@return: invoice type
To open location wise product information specific to given duration
"""
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param ids: the ID or list of IDs if we want more than one
@param context: A standard dictionary
@return: invoice type
"""
mod_obj = self.pool.get('ir.model.data')
for location_obj in self.read(cr, uid, ids, ['from_date', 'to_date']):
return {
'name': False,
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'product.product',
'type': 'ir.actions.act_window',
'context': {'location': context['active_id'],
'from_date': location_obj['from_date'],
'to_date': location_obj['to_date']},
'domain': [('type', '<>', 'service')],
'name': False,
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'product.product',
'type': 'ir.actions.act_window',
'context': {'location': context['active_id'],
'from_date': location_obj['from_date'],
'to_date': location_obj['to_date']},
'domain': [('type', '<>', 'service')],
}
stock_location_product()
-80
View File
@@ -1,80 +0,0 @@
# -*- 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 fields, osv
import netsvc
class stock_picking_make(osv.osv_memory):
_name = 'stock.picking.make'
_description = "Make Picking"
_columns = {
'picking_ids': fields.many2many('stock.picking', 'stock_picking_ids', 'parent_id', 'child_id', 'Pickings'),
}
def default_get(self, cursor, user, fields, context):
"""
To get default values for the object.
@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 which we want default values
@param context: A standard dictionary
@return: A dictionary which of fields with values.
"""
res = super(stock_picking_make, self).default_get(cursor, user, fields, context=context)
record_ids = context and context.get('active_ids',False) or False
if record_ids:
picking_obj = self.pool.get('stock.picking')
picking_ids = picking_obj.search(cursor, user, [
('id', 'in', record_ids),
('state', '<>', 'done'),
('state', '<>', 'cancel')], context=context)
res['picking_ids'] = picking_ids
return res
def make_packing(self, cursor, user, ids, context):
"""
Make Picking.
@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 which we want default values
@param context: A standard dictionary
@return: A dictionary which of fields with values.
"""
record_ids = context and context.get('active_ids',False) or False
wkf_service = netsvc.LocalService('workflow')
picking_obj = self.pool.get('stock.picking')
data = self.read(cursor, user, ids[0])
pick_ids = data['picking_ids']
picking_obj.force_assign(cursor, user, pick_ids)
picking_obj.action_move(cursor, user, pick_ids)
for picking_id in ids:
wkf_service.trg_validate(user, 'stock.picking', picking_id,
'button_done', cursor)
return {}
stock_picking_make()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_stock_make_picking_wizard" model="ir.ui.view">
<field name="name">Make Picking</field>
<field name="model">stock.picking.make</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Make Picking">
<field name="picking_ids" nolabel="1" colspan="4"
width="600" height="300"/>
<separator string="" colspan="4" />
<button icon='gtk-cancel' special="cancel"
string="Cancel" />
<button name="make_packing" string="Ok"
type="object" icon="gtk-apply" />
</form>
</field>
</record>
<record id="act_stock_make_picking_wizard" model="ir.actions.act_window">
<field name="name">Make Picking</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stock.picking.make</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>
-221
View File
@@ -1,221 +0,0 @@
# -*- 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 netsvc
import time
from osv import osv,fields
from tools.translate import _
class stock_return_picking(osv.osv_memory):
_name = 'stock.return.picking'
_description = 'Return Picking'
def default_get(self, cr, uid, fields, context):
"""
To get default values for the object.
@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 which we want default values
@param context: A standard dictionary
@return: A dictionary which of fields with values.
"""
res = super(stock_return_picking, self).default_get(cr, uid, fields, context=context)
record_id = context and context.get('active_id', False) or False
pick_obj = self.pool.get('stock.picking')
pick = pick_obj.browse(cr, uid, record_id)
for m in [line for line in pick.move_lines]:
res['return%s'%(m.id)] = m.product_qty
if pick.invoice_state=='invoiced':
res['invoice_state'] = '2binvoiced'
else:
res['invoice_state'] = 'none'
return res
def view_init(self, cr, uid, fields_list, context=None):
"""
Creates view dynamically and adding fields at runtime.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return: New arch of view with new columns.
"""
res = super(stock_return_picking, self).view_init(cr, uid, fields_list, context=context)
record_id = context and context.get('active_id', False) or False
if record_id:
pick_obj = self.pool.get('stock.picking')
try:
pick = pick_obj.browse(cr, uid, record_id)
for m in [line for line in pick.move_lines]:
if 'return%s'%(m.id) not in self._columns:
self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True)
if 'invoice_state' not in self._columns:
self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True)
except Exception, e:
return res
return res
def fields_view_get(self, cr, uid, view_id=None, view_type='form',
context=None, toolbar=False, submenu=False):
"""
Changes the view dynamically
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return: New arch of view.
"""
res = super(stock_return_picking, 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
assert record_id,'Active ID not found'
if record_id:
pick_obj = self.pool.get('stock.picking')
pick = pick_obj.browse(cr, uid, record_id)
try:
if pick.state != 'done':
raise osv.except_osv(_('Warning !'), _("The Picking is not completed yet!\nYou cannot return picking which is not in 'Done' state!"))
return_history = {}
for m_line in pick.move_lines:
return_history[m_line.id] = 0
for rec in m_line.move_stock_return_history:
return_history[m_line.id] += rec.product_qty
res['fields'].clear()
arch_lst=['<?xml version="1.0"?>', '<form string="%s">' % _('Return lines'), '<label string="%s" colspan="4"/>' % _('Provide the quantities of the returned products.')]
for m in [line for line in pick.move_lines]:
quantity = m.product_qty
if quantity > return_history[m.id] and (quantity - return_history[m.id])>0:
arch_lst.append('<field name="return%s"/>\n<newline/>' % (m.id,))
res['fields']['return%s' % m.id]={'string':m.name, 'type':'float', 'required':True}
res.setdefault('returns', []).append(m.id)
if not res.get('returns',False):
raise osv.except_osv(_('Warning!'),_('There is no product to return!'))
arch_lst.append('<field name="invoice_state"/>\n<newline/>')
if pick.invoice_state=='invoiced':
new_invoice_state='2binvoiced'
else:
new_invoice_state=pick.invoice_state
res['fields']['invoice_state']={'string':_('Invoice state'), 'type':'selection','required':True, 'selection':[('2binvoiced', _('To Be Invoiced')), ('none', _('None'))]}
arch_lst.append('<group col="2" colspan="4">')
arch_lst.append('<button icon="gtk-cancel" special="cancel" string="Cancel" />')
arch_lst.append('<button name="action_open_window" string="Return" colspan="1" type="object" icon="gtk-apply" />')
arch_lst.append('</group>')
arch_lst.append('</form>')
res['arch'] = '\n'.join(arch_lst)
except Exception,e:
return res
return res
def _create_returns(self, cr, uid, ids, context):
"""
Creates return picking.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param ids: List of ids selected
@param context: A standard dictionary
@return: A dictionary which of fields with values.
"""
record_id = context and context.get('active_id', False) or False
move_obj = self.pool.get('stock.move')
pick_obj = self.pool.get('stock.picking')
uom_obj = self.pool.get('product.uom')
wf_service = netsvc.LocalService("workflow")
pick = pick_obj.browse(cr, uid, record_id)
data = self.read(cr, uid, ids[0])
new_picking = None
date_cur = time.strftime('%Y-%m-%d %H:%M:%S')
move_ids = [m.id for m in [line for line in pick.move_lines]]
set_invoice_state_to_none = True
for move in move_obj.browse(cr, uid, move_ids):
if not new_picking:
if pick.type=='out':
new_type = 'in'
elif pick.type=='in':
new_type = 'out'
else:
new_type = 'internal'
new_picking = pick_obj.copy(cr, uid, pick.id, {'name':'%s (return)' % pick.name,
'move_lines':[], 'state':'draft', 'type':new_type,
'date':date_cur, 'invoice_state':data['invoice_state'],})
new_location=move.location_dest_id.id
new_qty = data['return%s' % move.id]
returned_qty = move.product_qty
for rec in move.move_stock_return_history:
returned_qty -= rec.product_qty
if returned_qty != new_qty:
set_invoice_state_to_none = False
new_move=move_obj.copy(cr, uid, move.id, {
'product_qty': new_qty,
'product_uos_qty': uom_obj._compute_qty(cr, uid, move.product_uom.id,
new_qty, move.product_uos.id),
'picking_id':new_picking, 'state':'draft',
'location_id':new_location, 'location_dest_id':move.location_id.id,
'date':date_cur, 'date_planned':date_cur,})
move_obj.write(cr, uid, [move.id], {'move_stock_return_history':[(4,new_move)]})
if set_invoice_state_to_none:
pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'})
if new_picking:
if new_picking:
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
pick_obj.force_assign(cr, uid, [new_picking], context)
return new_picking
def action_open_window(self, cr, uid, ids, context):
"""
Opens return picking list.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param ids: List of ids selected
@param context: A standard dictionary
@return: A dictionary which of fields with values.
"""
res = self._create_returns(cr, uid, ids, context)
if not res:
return {}
return {
'domain': "[('id', 'in', ["+str(res)+"])]",
'name': 'Picking List',
'view_type':'form',
'view_mode':'tree,form',
'res_model':'stock.picking',
'view_id':False,
'type':'ir.actions.act_window',
}
stock_return_picking()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Return Picking -->
<record id="act_stock_return_picking" model="ir.actions.act_window">
<field name="name">Return Picking</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stock.return.picking</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>
</openerp>
+4 -4
View File
@@ -7,16 +7,16 @@ 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-04-10 14:08+0000\n"
"Last-Translator: <>\n"
"PO-Revision-Date: 2010-04-25 14:27+0000\n"
"Last-Translator: Andrey Kulakov <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 04:20+0000\n"
"X-Launchpad-Export-Date: 2010-04-26 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_invoice_directly
#: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information
msgid "Invoice Picking Directly"
msgstr ""
msgstr "Напрямую выставляемый счет"
+21 -48
View File
@@ -3,7 +3,7 @@
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
# Copyright (c) 2004 Axelor SPRL. (http://www.axelor.com) All Rights Reserved.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,54 +19,27 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
##############################################################################
#
# Copyright (c) 2004 Axelor SPRL. (http://www.axelor.com) All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
{
"name" : "Thunderbird Interface",
"version" : "1.0",
"author" : "Axelor",
"website" : "http://www.axelor.com/",
"depends" : ["base","crm"],
"category" : "Generic Modules/Thunderbird interface",
"description": '''
This module is required for the thuderbird plug-in to work
properly.
"name" : "Thunderbird Interface",
"version" : "1.0",
"author" : "Axelor",
"website" : "http://www.axelor.com/",
"depends" : ["base","crm"],
"category" : "Generic Modules/Thunderbird interface",
"description": '''
This module is required for the thuderbird plug-in to work
properly.
This allows you to select an object that you’d like to add
to your email and its attachments. You can select a partner, a task,
a project, an analytical account, or any other object and attach selected
mail as .eml file in attachment of selected record.
This allows you to select an object that you’d like to add
to your email and its attachments. You can select a partner, a task,
a project, an analytical account, or any other object and attach selected
mail as .eml file in attachment of selected record.
You can create new case in crm using Create Case button.
Select a section for which you want to create case.''',
"init_xml" : [],
"demo_xml" : [],
"update_xml" : ['security/ir.model.access.csv'],
"active": False,
"installable": True
You can create new case in crm using Create Case button.
Select a section for which you want to create case.''',
"init_xml" : [],
"demo_xml" : [],
"update_xml" : ['security/ir.model.access.csv'],
"active": False,
"installable": True
}
+17 -13
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-09-16 17:45+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-04-22 09:28+0000\n"
"Last-Translator: Jan Verlaan (Veritos) <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 04:19+0000\n"
"X-Launchpad-Export-Date: 2010-04-23 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: warning
@@ -39,7 +39,7 @@ msgstr "Verkooporderregel"
#. module: warning
#: view:product.product:0
msgid "Warning when Purchasing this Product"
msgstr ""
msgstr "Waarschuw wanneer dit product gekocht wordt"
#. module: warning
#: view:product.product:0
@@ -54,12 +54,12 @@ msgstr "Waarschuwingen"
#: selection:res.partner,purchase_warn:0
#: selection:res.partner,sale_warn:0
msgid "Blocking Message"
msgstr ""
msgstr "Blokkerend bericht"
#. module: warning
#: view:res.partner:0
msgid "Warning on the Invoice"
msgstr ""
msgstr "Waarschuwing op de factuur"
#. module: warning
#: selection:product.product,purchase_line_warn:0
@@ -69,12 +69,12 @@ msgstr ""
#: selection:res.partner,purchase_warn:0
#: selection:res.partner,sale_warn:0
msgid "No Message"
msgstr ""
msgstr "Geen bericht"
#. module: warning
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Ongeldige XML voor overzicht"
msgstr "Ongeldige XML, kan overzicht niet weergeven!"
#. module: warning
#: field:res.partner,invoice_warn:0
@@ -89,7 +89,7 @@ msgstr ""
#. module: warning
#: view:product.product:0
msgid "Warning when Selling this Product"
msgstr ""
msgstr "Waarschuw bij verkopen van dit product"
#. module: warning
#: field:res.partner,sale_warn:0
@@ -128,6 +128,10 @@ msgid ""
"Selecting \"Blocking Message\" will throw an exception with the message and "
"block the flow. The Message has to be written in the next field."
msgstr ""
"Door de 'Waarschuwingsoptie' te selecteren wordt het bericht naar de "
"gebruiker gestuurd. Door het 'Blokkerend bericht' te kiezen wordt een fout "
"gegenereerd met de boodschap en het proces wordt geblokkeerd. Het bericht "
"moet in het volgende veld worden ingevoerd."
#. module: warning
#: field:res.partner,invoice_warn_msg:0
@@ -142,17 +146,17 @@ msgstr ""
#. module: warning
#: view:res.partner:0
msgid "Warning on the Picking"
msgstr ""
msgstr "Waarschuwing op de pickinglijst"
#. module: warning
#: view:res.partner:0
msgid "Warning on the Purchase Order"
msgstr ""
msgstr "Waarschuwing op de inkooporder"
#. module: warning
#: view:res.partner:0
msgid "Warning on the Sale Order"
msgstr ""
msgstr "Waarschuwing bij de verkooporder."
#. module: warning
#: selection:product.product,purchase_line_warn:0
@@ -162,7 +166,7 @@ msgstr ""
#: selection:res.partner,purchase_warn:0
#: selection:res.partner,sale_warn:0
msgid "Warning"
msgstr ""
msgstr "Waarschuwing"
#. module: warning
#: field:res.partner,picking_warn_msg:0
+1 -1
View File
@@ -43,7 +43,7 @@
'security/ir.model.access.csv'
],
'demo_xml': ['test/wiki_test00.yml'],
# 'demo_xml': [],
# 'test': ['test/wiki_test00.yml'],
'installable': True,
'active': False,
'certificate': '0086363630317',
+13 -15
View File
@@ -7,20 +7,20 @@
notes: I can Generate New Group for Select Display method = Tree.
-
Now I will create new wikipage and assign Group test to this page
-
-
!record {model: wiki.wiki, id: wiki_wiki_openerpwikiediting0}:
group_id: wiki.wiki_groups_wikigrouptest0
name: OpenERP Wiki Test
section: '1.1'
text_area: '=The Open ERP wiki=
The Open ERP wiki allows you to manage your enterprise contents using wiki
restructured texts. This module provides a collaborative way to manage internal
FAQs, quality manuals, technical references, etc.
'
'
-
I Get Help on this current page by clicking on "Basic wiki Editing" wizard
-
@@ -30,7 +30,7 @@
I create Index on this current page by clicking on "Create Index" wizard
-
!python {model: wiki.make.index}: |
ids = self.search(cr, uid, [])
ids = self.search(cr, uid, [])
self.wiki_do_index(cr, uid, ids , {'active_ids': [ref('wiki_wiki_openerpwikiediting0')]})
-
# Remaining Act window
@@ -50,23 +50,21 @@
-
# Remaining beacuse of Act window (I search the page by clicking on the "search page".)
In order to create a menu I will create wizard data
-
-
!record {model: wiki.groups, id: wiki.wiki_groups_wikiformatting0}:
home: wiki.wiki_wiki_main
-
I create a Menu by clicking on "create menu" button.
# The folowing is not running properly because of osv memory problem
-
!record {model: wiki.create.menu, id: wiki_create_menu_0}:
menu_name: Wiki Test menu
menu_parent_id: base.menu_base_partner
page: wiki.wiki_wiki_openerpwikiediting0
-
#I will check that menu is generated properly
I will check that menu is generated properly
-
# Remaining because some problem occur
#!python {model: wiki.create.menu}: |
# ids = self.search(cr, uid, [])
# self.wiki_menu_create(cr, uid, ids, context)
!python {model: wiki.create.menu}: |
ids = self.search(cr, uid, [])
self.wiki_menu_create(cr, uid, ids, context)
+9 -9
View File
@@ -28,9 +28,9 @@ class wiki_create_menu(osv.osv_memory):
_description = "Wizard Create Menu"
_columns = {
'menu_name': fields.char('Menu Name', size=256, select=True, required=True),
'menu_parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', required=True),
'page': fields.many2one('wiki.wiki', 'Group Home Page'),
'menu_name': fields.char('Menu Name', size=256, select=True, required=True),
'menu_parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', required=True),
'page': fields.many2one('wiki.wiki', 'Group Home Page'),
}
def wiki_menu_create(self, cr, uid, ids, context):
@@ -46,22 +46,22 @@ class wiki_create_menu(osv.osv_memory):
for menu in self.browse(cr, uid, ids):
menu_id = self.pool.get('ir.ui.menu').create(cr, uid, {
'name':menu.menu_name,
'parent_id':menu.menu_parent_id.id,
'icon': 'STOCK_DIALOG_QUESTION',
'name': menu.menu_name,
'parent_id':menu.menu_parent_id.id,
'icon': 'STOCK_DIALOG_QUESTION',
'action': 'ir.actions.act_window,'+ str(action_id)
}, context)
home = menu.page.id
group_id = menu.id
res = {
'home':home,
'home': home,
}
self.pool.get('wiki.groups').write(cr, uid, ids, res)
self.pool.get('wiki.groups.link').create(cr, uid,
self.pool.get('wiki.groups.link').create(cr, uid,
{'group_id': group_id, 'action_id': menu_id})
return {}
wiki_create_menu()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: