diff --git a/addons/account/account.py b/addons/account/account.py
index f6a5680e6f3..87eb6dfd2a8 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -616,17 +616,17 @@ class account_journal(osv.osv):
'type_control_ids': fields.many2many('account.account.type', 'account_journal_type_rel', 'journal_id','type_id', 'Type Controls', domain=[('code','<>','view'), ('code', '<>', 'closed')]),
'account_control_ids': fields.many2many('account.account', 'account_account_type_rel', 'journal_id','account_id', 'Account', domain=[('type','<>','view'), ('type', '<>', 'closed')]),
'view_id': fields.many2one('account.journal.view', 'Display Mode', required=True, help="Gives the view used when writing or browsing entries in this journal. The view tells Open ERP which fields should be visible, required or readonly and in which order. You can create your own view for a faster encoding in each journal."),
- 'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account', domain="[('type','!=','view')]",help="It acts as a default account for credit amount"),
- 'default_debit_account_id': fields.many2one('account.account', 'Default Debit Account', domain="[('type','!=','view')]",help="It acts as a default account for debit amount"),
+ 'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account', domain="[('type','!=','view')]", help="It acts as a default account for credit amount"),
+ 'default_debit_account_id': fields.many2one('account.account', 'Default Debit Account', domain="[('type','!=','view')]", help="It acts as a default account for debit amount"),
'centralisation': fields.boolean('Centralised counterpart', help="Check this box to determine that each entry of this journal won't create a new counterpart but will share the same counterpart. This is used in fiscal year closing."),
- 'update_posted': fields.boolean('Allow Cancelling Entries',help="Check this box if you want to cancel the entries related to this journal or want to cancel the invoice related to this journal"),
+ 'update_posted': fields.boolean('Allow Cancelling Entries', help="Check this box if you want to allow the cancellation the entries related to this journal or of the invoice related to this journal"),
'group_invoice_lines': fields.boolean('Group invoice lines', help="If this box is checked, the system will try to group the accounting lines when generating them from invoices."),
'sequence_id': fields.many2one('ir.sequence', 'Entry Sequence', help="The sequence gives the display order for a list of journals", required=True),
'user_id': fields.many2one('res.users', 'User', help="The user responsible for this journal"),
'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'),
'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
'entry_posted': fields.boolean('Skip \'Draft\' State for Created Entries', help='Check this box if you don\'t want new account moves to pass through the \'draft\' state and instead goes directly to the \'posted state\' without any manual validation.'),
- 'company_id': fields.many2one('res.company', 'Company', required=True,select=1,help="Company associated with a journal"),
+ 'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"),
'invoice_sequence_id': fields.many2one('ir.sequence', 'Invoice Sequence', \
help="The sequence used for invoice numbers in this journal."),
'allow_date':fields.boolean('Check Date not in the Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'),
@@ -678,7 +678,6 @@ class account_journal(osv.osv):
res= {'value':{'centralisation': False}}
return res
-
account_journal()
class account_fiscalyear(osv.osv):
@@ -772,7 +771,7 @@ class account_period(osv.osv):
'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal Year', required=True, states={'done':[('readonly',True)]}, select=True),
'state': fields.selection([('draft','Draft'), ('done','Done')], 'State', readonly=True,
help='When monthly periods are created. The state is \'Draft\'. At the end of monthly period it is in \'Done\' state.'),
- 'company_id': fields.related('fiscalyear_id','company_id',type='many2one',relation='res.company',string='Company',store=True)
+ 'company_id': fields.related('fiscalyear_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True)
}
_defaults = {
'state': lambda *a: 'draft',
@@ -878,7 +877,7 @@ class account_journal_period(osv.osv):
'state': fields.selection([('draft','Draft'), ('printed','Printed'), ('done','Done')], 'State', required=True, readonly=True,
help='When journal period is created. The state is \'Draft\'. If a report is printed it comes to \'Printed\' state. When all transactions are done, it comes in \'Done\' state.'),
'fiscalyear_id': fields.related('period_id', 'fiscalyear_id', string='Fiscal Year', type='many2one', relation='account.fiscalyear'),
- 'company_id': fields.related('journal_id','company_id',type='many2one',relation='res.company',string='Company')
+ 'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company')
}
def _check(self, cr, uid, ids, context={}):
@@ -2122,7 +2121,7 @@ class account_tax_code_template(osv.osv):
'info': fields.text('Description'),
'parent_id': fields.many2one('account.tax.code.template', 'Parent Code', select=True),
'child_ids': fields.one2many('account.tax.code.template', 'parent_id', 'Child Codes'),
- 'sign': fields.float('Sign for parent', required=True),
+ 'sign': fields.float('Sign for parent', required=True, help="Choose 1.00 to add the total to the parent account or -1.00 to subtract it"),
'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any VAT related to this Tax Code to appear on invoices"),
}
@@ -2154,7 +2153,7 @@ class account_chart_template(osv.osv):
_columns={
'name': fields.char('Name', size=64, required=True),
- 'account_root_id': fields.many2one('account.account.template','Root Account',required=True,domain=[('parent_id','=',False)]),
+ 'account_root_id': fields.many2one('account.account.template','Root Account',required=True,domain=[('parent_id','=',False)], help=""),
'tax_code_root_id': fields.many2one('account.tax.code.template','Root Tax Code',required=True,domain=[('parent_id','=',False)]),
'tax_template_ids': fields.one2many('account.tax.template', 'chart_template_id', 'Tax Template List', help='List of all the taxes that have to be installed by the wizard'),
'bank_account_view_id': fields.many2one('account.account.template','Bank Account',required=True),
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 9efcc377d5c..4e2f2fb62e3 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -12,12 +12,14 @@
form
+
+ account.period.search
+ account.period
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Periods
account.period
form
- tree,form
+ tree,form,search
@@ -154,10 +198,21 @@
search
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -262,7 +317,28 @@
-
+
+ account.journal.search
+ account.journal
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
account.journal.form
account.journal
@@ -351,16 +427,38 @@
-
+
+ account.bank.statement.search
+ account.bank.statement
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
account.bank.statement.form
account.bank.statement
form
-
-
-
+
+
+
@@ -427,7 +525,7 @@
Draft statements
account.bank.statement
form
- tree,form
+ tree,form,search
[('state','=','draft')]
@@ -629,6 +727,26 @@
+
+ account.tax.search
+ account.tax
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
account.tax.form
account.tax
@@ -847,6 +965,13 @@
+
+
+
+
+
+
+
@@ -1296,7 +1421,7 @@
-
+
@@ -1592,13 +1717,14 @@
- Account Add wizard
+ Create Account
account.addtmpl.wizard
form
-
-
+
+
+
@@ -1608,7 +1734,8 @@
-
+
-
+
-
-
+
+
-
+
+
@@ -1671,12 +1799,36 @@
+
+
+ account.account.template.search
+ account.account.template
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Account Templates
account.account.template
form
- tree,form
+ tree,form,search
@@ -1690,21 +1842,50 @@
form
-
-
-
+
+
+
+
-
+
+
+
+
+
+ account.chart.template.search
+ account.chart.template
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
account.chart.template.tree
account.chart.template
@@ -1722,7 +1903,7 @@
Chart of Accounts Templates
account.chart.template
form
- tree,form
+ tree,form,search
@@ -1736,11 +1917,11 @@
-
-
+
+
-
-
+
+
@@ -1794,6 +1975,27 @@
+
+ account.tax.template.search
+ account.tax.template
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tax Templates
account.tax.template
@@ -1816,7 +2018,26 @@
-
+
+
+ account.tax.code.template.search
+ account.tax.code.template
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
account.tax.code.template.form
account.tax.code.template
@@ -1828,7 +2049,8 @@
-
+
+
@@ -1837,7 +2059,7 @@
Tax Code Templates
account.tax.code.template
form
- tree,form
+ tree,form,search
diff --git a/addons/account/company.py b/addons/account/company.py
index 8aa41dc47c6..8ea9c80f694 100644
--- a/addons/account/company.py
+++ b/addons/account/company.py
@@ -34,4 +34,4 @@ void. Do not hesitate to contact our accounting department'
}
res_company()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/account/installer.py b/addons/account/installer.py
index b1ba6221fff..45ea43040a4 100644
--- a/addons/account/installer.py
+++ b/addons/account/installer.py
@@ -23,7 +23,6 @@ import datetime
from dateutil.relativedelta import relativedelta
from os.path import join as opj
from operator import itemgetter
-
from tools.translate import _
from osv import fields, osv
import netsvc
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index 5353438dc17..a5df2a6f1a0 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -936,13 +936,13 @@ class account_invoice(osv.osv):
account_move_obj = self.pool.get('account.move')
invoices = self.read(cr, uid, ids, ['move_id', 'payment_ids'])
for i in invoices:
- if i['move_id']:
+ if i['move_id']:
account_move_obj.button_cancel(cr, uid, [i['move_id'][0]])
# delete the move this invoice was pointing to
# Note that the corresponding move_lines and move_reconciles
# will be automatically deleted too
account_move_obj.unlink(cr, uid, [i['move_id'][0]])
- if i['payment_ids']:
+ if i['payment_ids']:
account_move_line_obj = self.pool.get('account.move.line')
pay_ids = account_move_line_obj.browse(cr, uid , i['payment_ids'])
for move_line in pay_ids:
diff --git a/addons/account/partner.py b/addons/account/partner.py
index c4faf780886..bfd74889c1c 100644
--- a/addons/account/partner.py
+++ b/addons/account/partner.py
@@ -187,7 +187,7 @@ class res_partner(osv.osv):
help="This payment term will be used instead of the default one for the current partner"),
'ref_companies': fields.one2many('res.company', 'partner_id',
'Companies that refers to partner'),
- 'last_reconciliation_date': fields.datetime('Last Reconcilation Date', help='Date on which partner account entries reconciled last time')
+ 'last_reconciliation_date': fields.datetime('Last Reconciliation Date', help='Date on which partner account entries reconciled last time')
}
res_partner()
diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml
index 5d9bbb7e9b0..a22e6860a15 100644
--- a/addons/account/partner_view.xml
+++ b/addons/account/partner_view.xml
@@ -10,9 +10,9 @@
+
-
-
+
@@ -22,7 +22,7 @@
-
+
@@ -32,6 +32,8 @@
+
+
diff --git a/addons/account/product.py b/addons/account/product.py
index 0d17b83ea58..ce91b9b0743 100644
--- a/addons/account/product.py
+++ b/addons/account/product.py
@@ -20,7 +20,6 @@
##############################################################################
import time
-
import netsvc
from osv import fields, osv
diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml
index 6431b9f9144..15bbd58b0c2 100644
--- a/addons/account/project/project_view.xml
+++ b/addons/account/project/project_view.xml
@@ -203,6 +203,14 @@
+
+
+
+
+
+
+
+
diff --git a/addons/account/wizard/account_automatic_reconcile.py b/addons/account/wizard/account_automatic_reconcile.py
index 3fb921696f4..0ee58eeb01a 100644
--- a/addons/account/wizard/account_automatic_reconcile.py
+++ b/addons/account/wizard/account_automatic_reconcile.py
@@ -241,7 +241,6 @@ class account_automatic_reconcile(osv.osv_memory):
'type': 'ir.actions.act_window',
'target': 'new',
'context': context,
- 'nodestroy':True,
}
account_automatic_reconcile()
diff --git a/addons/account/wizard/account_fiscalyear_close_state.xml b/addons/account/wizard/account_fiscalyear_close_state.xml
index 370aacbf2e3..f0384134a66 100644
--- a/addons/account/wizard/account_fiscalyear_close_state.xml
+++ b/addons/account/wizard/account_fiscalyear_close_state.xml
@@ -7,16 +7,18 @@
form
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/account/wizard/account_move_line_select.py b/addons/account/wizard/account_move_line_select.py
index 32ecf85f375..546bb08c754 100644
--- a/addons/account/wizard/account_move_line_select.py
+++ b/addons/account/wizard/account_move_line_select.py
@@ -43,7 +43,6 @@ class account_move_line_select(osv.osv_memory):
else:
fiscalyear_ids = [context['fiscalyear']]
-# fiscalyear_ids = fiscalyear_obj.search(cr, uid, [('state', '=', 'draft')])
fiscalyears = fiscalyear_obj.browse(cr, uid, fiscalyear_ids)
period_ids = []
diff --git a/addons/account/wizard/account_reconcile.py b/addons/account/wizard/account_reconcile.py
index e8db687edf7..59ea16b2c23 100644
--- a/addons/account/wizard/account_reconcile.py
+++ b/addons/account/wizard/account_reconcile.py
@@ -23,19 +23,19 @@ import time
from osv import fields, osv
from tools.translate import _
-class account_move_line_reconcile_prompt(osv.osv_memory):
- """
- Asks user he wants to reconcile entries or not.
- """
- _name = 'account.move.line.reconcile.prompt'
- _description = 'Account move line reconcile'
- _columns = {
- }
-
- def ask_reconcilation(self, cr, uid, ids, context):
- return self.pool.get('account.move.line.reconcile').partial_check(cr, uid, ids, context)
-
-account_move_line_reconcile_prompt()
+#class account_move_line_reconcile_prompt(osv.osv_memory):
+# """
+# Asks user he wants to reconcile entries or not.
+# """
+# _name = 'account.move.line.reconcile.prompt'
+# _description = 'Account move line reconcile'
+# _columns = {
+# }
+#
+# def ask_reconcilation(self, cr, uid, ids, context):
+# return self.pool.get('account.move.line.reconcile').partial_check(cr, uid, ids, context)
+#
+#account_move_line_reconcile_prompt()
class account_move_line_reconcile(osv.osv_memory):
"""
diff --git a/addons/account/wizard/account_reconcile_partner_process_view.xml b/addons/account/wizard/account_reconcile_partner_process_view.xml
index cd296759752..f119243a470 100644
--- a/addons/account/wizard/account_reconcile_partner_process_view.xml
+++ b/addons/account/wizard/account_reconcile_partner_process_view.xml
@@ -4,7 +4,7 @@
- Account Partner Reconcile
+ Partner Reconcilation Process
account.partner.reconcile.process
form
@@ -17,14 +17,14 @@
-
+
- Manual Reconciliation
+ Reconciliation: Go to Next Partner
account.partner.reconcile.process
ir.actions.act_window
form
diff --git a/addons/account/wizard/account_use_model_view.xml b/addons/account/wizard/account_use_model_view.xml
index 9ff781ea53c..59ff85e1a57 100644
--- a/addons/account/wizard/account_use_model_view.xml
+++ b/addons/account/wizard/account_use_model_view.xml
@@ -8,9 +8,10 @@
form
-
+
-
+
+
diff --git a/addons/account_coda/wizard/coda_import.py b/addons/account_coda/wizard/coda_import.py
index 34054bc5009..82fc7bf877c 100644
--- a/addons/account_coda/wizard/coda_import.py
+++ b/addons/account_coda/wizard/coda_import.py
@@ -221,7 +221,7 @@ def _coda_parsing(self, cr, uid, data, context):
bk_st_id = pool.get('account.bank.statement').create(cr,uid,{
'journal_id': statement['journal_id'],
'date':time.strftime('%Y-%m-%d',time.strptime(statement['date'],"%y/%m/%d")),
-# 'period_id':statement['period_id'],
+ 'period_id':statement['period_id'],
'balance_start': statement["balance_start"],
'balance_end_real': statement["balance_end_real"],
'state': 'draft',
diff --git a/addons/board/i18n/id.po b/addons/board/i18n/id.po
index 8c3357a0c30..8a8a3b2a9e0 100644
--- a/addons/board/i18n/id.po
+++ b/addons/board/i18n/id.po
@@ -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-11-09 13:47+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2010-06-19 01:36+0000\n"
+"Last-Translator: Abdul Munif Hanafi \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-06-20 03:34+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board
@@ -21,6 +21,7 @@ msgstr ""
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Nama Objek harus berawalan dengan x_ dan tidak mengandung karakter khusus !"
#. module: board
#: model:ir.model,name:board.model_board_board
@@ -30,7 +31,7 @@ msgstr ""
#. module: board
#: field:board.note,user_id:0
msgid "Author"
-msgstr ""
+msgstr "Pencipta"
#. module: board
#: model:ir.module.module,shortdesc:board.module_meta_information
@@ -41,22 +42,22 @@ msgstr ""
#: view:board.note:0
#: field:board.note,note:0
msgid "Note"
-msgstr ""
+msgstr "Catatan"
#. module: board
#: field:board.board.line,width:0
msgid "Width"
-msgstr ""
+msgstr "Lebar"
#. module: board
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nama model tidak sah di definsi aksi"
#. module: board
#: field:board.board.line,name:0
msgid "Title"
-msgstr ""
+msgstr "Judul"
#. module: board
#: model:ir.actions.act_window,name:board.action_view_board_list_form
@@ -73,7 +74,7 @@ msgstr ""
#. module: board
#: wizard_view:board.board.menu.create,init:0
msgid "Menu Information"
-msgstr ""
+msgstr "Informasi Menu"
#. module: board
#: field:board.board,line_ids:0
@@ -88,12 +89,12 @@ msgstr ""
#. module: board
#: field:board.note,date:0
msgid "Date"
-msgstr ""
+msgstr "Tanggal"
#. module: board
#: model:ir.ui.menu,name:board.next_id_50
msgid "Configuration"
-msgstr ""
+msgstr "Konfigurasi"
#. module: board
#: field:board.note.type,name:0
@@ -108,7 +109,7 @@ msgstr ""
#. module: board
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "XML tidak sah untuk Menampilkan Arsitektur!"
#. module: board
#: wizard_field:board.board.menu.create,init,menu_parent_id:0
@@ -118,7 +119,7 @@ msgstr ""
#. module: board
#: view:board.note:0
msgid "Notes"
-msgstr ""
+msgstr "Catatan"
#. module: board
#: model:ir.model,name:board.model_board_note_type
@@ -140,7 +141,7 @@ msgstr ""
#. module: board
#: field:board.board.line,position:0
msgid "Position"
-msgstr ""
+msgstr "Posisi"
#. module: board
#: model:ir.actions.act_window,name:board.dashboard_open
@@ -150,7 +151,7 @@ msgstr ""
#. module: board
#: wizard_field:board.board.menu.create,init,menu_name:0
msgid "Menu Name"
-msgstr ""
+msgstr "Nama Menu"
#. module: board
#: field:board.note,type:0
@@ -160,7 +161,7 @@ msgstr ""
#. module: board
#: selection:board.board.line,position:0
msgid "Left"
-msgstr ""
+msgstr "Kiri"
#. module: board
#: field:board.board,view_id:0
@@ -170,7 +171,7 @@ msgstr ""
#. module: board
#: selection:board.board.line,position:0
msgid "Right"
-msgstr ""
+msgstr "Kanan"
#. module: board
#: field:board.board.line,sequence:0
@@ -181,7 +182,7 @@ msgstr ""
#: view:board.board:0
#: wizard_button:board.board.menu.create,init,create_menu:0
msgid "Create Menu"
-msgstr ""
+msgstr "Buat Menu"
#. module: board
#: model:ir.ui.menu,name:board.dashboard_menu
@@ -191,7 +192,7 @@ msgstr ""
#. module: board
#: field:board.board.line,height:0
msgid "Height"
-msgstr ""
+msgstr "Tinggi"
#. module: board
#: model:ir.actions.wizard,name:board.wizard_board_create_menu
@@ -201,7 +202,7 @@ msgstr ""
#. module: board
#: wizard_button:board.board.menu.create,init,end:0
msgid "Cancel"
-msgstr ""
+msgstr "Batal"
#. module: board
#: view:board.board:0
diff --git a/addons/delivery/i18n/pl.po b/addons/delivery/i18n/pl.po
index d395d60a8a2..20d2799ecd9 100644
--- a/addons/delivery/i18n/pl.po
+++ b/addons/delivery/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-03 08:04+0000\n"
-"Last-Translator: Piotr Lipski \n"
+"PO-Revision-Date: 2010-06-19 13:34+0000\n"
+"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-05 03:47+0000\n"
+"X-Launchpad-Export-Date: 2010-06-20 03:34+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
@@ -57,7 +57,7 @@ msgstr ""
#. module: delivery
#: field:delivery.grid,state_ids:0
msgid "States"
-msgstr "Stany"
+msgstr "Regiony"
#. module: delivery
#: constraint:ir.actions.act_window:0
@@ -68,6 +68,7 @@ msgstr "Nieprawidłowa nazwa modelu w definicji akcji."
#: help:res.partner,property_delivery_carrier:0
msgid "This delivery method will be used when invoicing from packing."
msgstr ""
+"Ta metoda dostawy będzie stosowana przy fakturowaniu z wydania zewnętrznego."
#. module: delivery
#: model:ir.model,name:delivery.model_delivery_grid
@@ -109,7 +110,7 @@ msgstr "Pozycja tabeli opłat za dostawy"
#. module: delivery
#: model:ir.ui.menu,name:delivery.menu_delivery
msgid "Delivery"
-msgstr "Dostawa"
+msgstr "Wydanie zewnętrzne"
#. module: delivery
#: view:delivery.grid.line:0
@@ -151,7 +152,7 @@ msgstr "="
#. module: delivery
#: field:delivery.carrier,product_id:0
msgid "Delivery Product"
-msgstr ""
+msgstr "Dostawa jako produkt"
#. module: delivery
#: view:delivery.grid.line:0
diff --git a/addons/email_template/email_template_account_view.xml b/addons/email_template/email_template_account_view.xml
index 65973fea9f7..4a35134bb41 100644
--- a/addons/email_template/email_template_account_view.xml
+++ b/addons/email_template/email_template_account_view.xml
@@ -96,6 +96,8 @@
+
diff --git a/addons/hr_attendance/wizard/hr_attendance_sign_in_out.py b/addons/hr_attendance/wizard/hr_attendance_sign_in_out.py
index f919299e583..d40829cf120 100644
--- a/addons/hr_attendance/wizard/hr_attendance_sign_in_out.py
+++ b/addons/hr_attendance/wizard/hr_attendance_sign_in_out.py
@@ -164,7 +164,6 @@ class hr_sign_in_out(osv.osv_memory):
return {} # To do: Return Success message
def sign_out(self, cr, uid, data, context=None):
-
emp_id = data['emp_id']
if 'last_time' in data:
if data['last_time'] > time.strftime('%Y-%m-%d %H:%M:%S'):
diff --git a/addons/hr_contract/i18n/hi.po b/addons/hr_contract/i18n/hi.po
index a80f3f55224..c3a930020a5 100644
--- a/addons/hr_contract/i18n/hi.po
+++ b/addons/hr_contract/i18n/hi.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-01-25 07:27+0000\n"
-"Last-Translator: vir (Open ERP) \n"
+"PO-Revision-Date: 2010-06-20 20:17+0000\n"
+"Last-Translator: abhishek \n"
"Language-Team: Hindi \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:14+0000\n"
+"X-Launchpad-Export-Date: 2010-06-21 03:42+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_contract
@@ -57,7 +57,7 @@ msgstr ""
#. module: hr_contract
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "कार्य की परिभाषा में मॉडल का नाम अमान्य है."
#. module: hr_contract
#: field:hr.contract,employee_id:0
@@ -82,7 +82,7 @@ msgstr ""
#. module: hr_contract
#: field:hr.contract,function:0
msgid "Function"
-msgstr ""
+msgstr "फंक्शन"
#. module: hr_contract
#: field:hr.employee,marital_status:0
@@ -91,7 +91,7 @@ msgstr ""
#: model:ir.actions.act_window,name:hr_contract.action_hr_marital_status
#: model:ir.ui.menu,name:hr_contract.hr_menu_marital_status
msgid "Marital Status"
-msgstr ""
+msgstr "वैवाहिक वस्तुस्थिति"
#. module: hr_contract
#: view:hr.employee:0
@@ -108,7 +108,7 @@ msgstr ""
#. module: hr_contract
#: field:hr.contract.wage.type,type:0
msgid "Type"
-msgstr ""
+msgstr "प्रकार"
#. module: hr_contract
#: field:hr.contract,wage_type_id:0
@@ -150,19 +150,19 @@ msgstr ""
#. module: hr_contract
#: field:hr.contract,date_end:0
msgid "End Date"
-msgstr ""
+msgstr "समाप्ति तिथि"
#. module: hr_contract
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "संरचना देखने के लिए अमान्य XML!"
#. module: hr_contract
#: view:hr.contract:0
#: field:hr.contract,notes:0
#: view:hr.employee:0
msgid "Notes"
-msgstr ""
+msgstr "टिप्पणियाँ"
#. module: hr_contract
#: view:hr.contract:0
@@ -209,12 +209,12 @@ msgstr ""
#. module: hr_contract
#: field:hr.employee,place_of_birth:0
msgid "Place of Birth"
-msgstr ""
+msgstr "जन्म स्थान"
#. module: hr_contract
#: field:hr.employee,manager:0
msgid "Manager"
-msgstr ""
+msgstr "मैनेजर"
#. module: hr_contract
#: view:hr.contract.wage.type.period:0
@@ -239,7 +239,7 @@ msgstr ""
#. module: hr_contract
#: field:hr.contract,date_start:0
msgid "Start Date"
-msgstr ""
+msgstr "प्रारंभ दिनांक"
#. module: hr_contract
#: field:hr.employee.marital.status,description:0
diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py
index 9f1c59abc4f..9a5ff2187e2 100644
--- a/addons/hr_payroll/__openerp__.py
+++ b/addons/hr_payroll/__openerp__.py
@@ -37,7 +37,6 @@
'website':'http://www.openerp.com',
'depends': [
'hr',
- 'account',
'hr_contract',
'hr_holidays',
'hr_expense'
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index 93146b565b9..ee24bc3cd21 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -213,66 +213,29 @@ class payroll_register(osv.osv):
def compute_sheet(self, cr, uid, ids, context={}):
emp_pool = self.pool.get('hr.employee')
slip_pool = self.pool.get('hr.payslip')
- func_pool = self.pool.get('hr.payroll.structure')
- slip_line_pool = self.pool.get('hr.payslip.line')
wf_service = netsvc.LocalService("workflow")
- vals = self.read(cr, uid, ids)[0]
+ vals = self.browse(cr, uid, ids)[0]
emp_ids = emp_pool.search(cr, uid, [])
for emp in emp_pool.browse(cr, uid, emp_ids):
- old_slips = slip_pool.search(cr, uid, [('employee_id','=',emp.id), ('date','=',vals['date'])])
+ old_slips = slip_pool.search(cr, uid, [('employee_id','=',emp.id), ('date','=',vals.date)])
if old_slips:
slip_pool.write(cr, uid, old_slips, {'register_id':ids[0]})
for sid in old_slips:
wf_service.trg_validate(uid, 'hr.payslip', sid, 'compute_sheet', cr)
continue
-
- sql_req= '''
- SELECT c.wage as wage, struct_id as function
- FROM hr_contract c
- LEFT JOIN hr_employee emp on (c.employee_id=emp.id)
- LEFT JOIN hr_contract_wage_type cwt on (cwt.id = c.wage_type_id)
- LEFT JOIN hr_contract_wage_type_period p on (cwt.period_id = p.id)
- WHERE
- (emp.id=%s) AND
- (date_start <= %s) AND
- (date_end IS NULL OR date_end >= %s)
- LIMIT 1
- '''
- cr.execute(sql_req, (emp.id, vals['date'], vals['date']))
- contract_info = cr.dictfetchone()
-
- if not contract_info:
- continue
-
- function = contract_info['struct_id']
- lines = []
- if function:
- func = func_pool.read(cr, uid, function, ['line_ids'])
- lines = slip_line_pool.browse(cr, uid, func['line_ids'])
-
+
res = {
'employee_id':emp.id,
- 'basic':contract_info['wage'],
'register_id':ids[0],
- 'name':vals['name'],
- 'date':vals['date'],
- 'journal_id':vals['journal_id'][0],
- 'bank_journal_id':vals['bank_journal_id'][0]
+ 'name':vals.name,
+ 'date':vals.date,
+ 'journal_id':vals.journal_id.id,
+ 'bank_journal_id':vals.bank_journal_id.id
}
slip_id = slip_pool.create(cr, uid, res)
-
- old_slip_id = slip_line_pool.search(cr, uid, [('slip_id','=',slip_id)])
- slip_line_pool.unlink(cr, uid, old_slip_id)
-
- for line in lines:
- slip_line_pool.copy(cr, uid, line.id, {'slip_id':slip_id, 'employee_id':False, 'function_id':False}, {})
-
- for line in emp.line_ids:
- slip_line_pool.copy(cr, uid, line.id, {'slip_id':slip_id, 'employee_id':False, 'function_id':False}, {})
-
wf_service.trg_validate(uid, 'hr.payslip', slip_id, 'compute_sheet', cr)
number = self.pool.get('ir.sequence').get(cr, uid, 'salary.register')
@@ -314,15 +277,17 @@ class payroll_register(osv.osv):
for sid in sids:
wf_service.trg_validate(uid, 'hr.payslip', sid, 'final_verify_sheet', cr)
-
for reg in self.browse(cr, uid, ids):
accs = {}
for slip in reg.line_ids:
pid = False
if accs.get(slip.employee_id.property_bank_account.code, False) == False:
+ company_name = self.pool.get('res.users').browse(cr, uid, uid).company_id.name
+ bank_name = slip.employee_id.property_bank_account.name
+ number = self.pool.get('ir.sequence').get(cr, uid, 'payment.advice')
advice = {
- 'name': 'Payment Advice from %s / Bank Account %s' % (self.pool.get('res.users').browse(cr, uid, uid).company_id.name, slip.employee_id.property_bank_account.name),
- 'number': self.pool.get('ir.sequence').get(cr, uid, 'payment.advice'),
+ 'name': 'Payment Advice from %s / Bank Account %s' % (company_name, bank_name),
+ 'number': number,
'register_id':reg.id,
'account_id':slip.employee_id.property_bank_account.id
}
@@ -331,16 +296,18 @@ class payroll_register(osv.osv):
else:
pid = accs[slip.employee_id.property_bank_account.code]
- pline = {
- 'advice_id':pid,
- 'name':slip.employee_id.otherid,
- 'employee_id':slip.employee_id.id,
- 'amount':slip.other_pay + slip.net,
- 'bysal':slip.net
- }
- id = advice_line_pool.create(cr, uid, pline)
+ if not slip.employee_id.bank_account_id:
+ raise osv.except_osv(_('Warning'), _("Bank Account not defined for %s !" % (slip.employee_id.name)))
+ else:
+ pline = {
+ 'advice_id':pid,
+ 'name':slip.employee_id.bank_account_id.acc_number,
+ 'employee_id':slip.employee_id.id,
+ 'amount':slip.other_pay + slip.net,
+ 'bysal':slip.net
+ }
+ id = advice_line_pool.create(cr, uid, pline)
- #, 'advice_ids':[(6, 0, [pid])]
self.write(cr, uid, ids, {'state':'confirm'})
return True
@@ -529,7 +496,7 @@ class payment_category(osv.osv):
_name = 'hr.allounce.deduction.categoty'
_description = 'Allowance Deduction Heads'
-
+
_columns = {
'name':fields.char('Categoty Name', size=64, required=True, readonly=False),
'code':fields.char('Categoty Code', size=64, required=True, readonly=False),
@@ -538,13 +505,15 @@ class payment_category(osv.osv):
('deduction','Deduction'),
('other','Others'),
],'Type', select=True),
- 'base':fields.char('Based on', size=64, required=True, readonly=False, help='This will use to computer the % fields values, in general its on basic, but You can use all heads code field in small letter as a variable name i.e. hra, ma, lta, etc...., also you can use, static varible basic'),
+ 'base': fields.text('Based on', required=True, readonly=False, help='This will use to computer the % fields values, in general its on basic, but You can use all heads code field in small letter as a variable name i.e. hra, ma, lta, etc...., also you can use, static varible basic'),
+ #'base':fields.char('Based on', size=64, required=True, readonly=False, help='This will use to computer the % fields values, in general its on basic, but You can use all heads code field in small letter as a variable name i.e. hra, ma, lta, etc...., also you can use, static varible basic'),
'condition':fields.char('Condition', size=1024, required=True, readonly=False, help='Applied this head for calculation if condition is true'),
'sequence': fields.integer('Sequence', required=True, help='Use to arrange calculation sequence'),
'note': fields.text('Description'),
'user_id':fields.char('User', size=64, required=False, readonly=False),
'state':fields.char('Label', size=64, required=False, readonly=False),
'company_id':fields.many2one('res.company', 'Company', required=False),
+ 'contribute_ids':fields.one2many('company.contribution', 'category_id', 'Company Contribution', required=False),
}
_defaults = {
'condition': lambda *a: 'True',
@@ -786,11 +755,7 @@ class hr_payslip(osv.osv):
'other_pay': fields.function(_calculate, method=True, store=True, multi='dc', string='Others', digits=(16, 2)),
'total_pay': fields.function(_calculate, method=True, store=True, multi='dc', string='Total Payment', digits=(16, 2)),
'line_ids':fields.one2many('hr.payslip.line', 'slip_id', 'Payslip Line', required=False, readonly=True, states={'draft': [('readonly', False)]}),
- 'move_ids':fields.one2many('hr.payslip.account.move', 'slip_id', 'Accounting vouchers', required=False),
- 'move_line_ids':fields.many2many('account.move.line', 'payslip_lines_rel', 'slip_id', 'line_id', 'Accounting Lines', readonly=True),
- 'move_payment_ids':fields.many2many('account.move.line', 'payslip_payment_rel', 'slip_id', 'payment_id', 'Payment Lines', readonly=True),
'company_id':fields.many2one('res.company', 'Company', required=False),
- 'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
'holiday_days': fields.integer('No of Leaves', readonly=True),
'worked_days': fields.integer('Worked Day', readonly=True),
'working_days': fields.integer('Working Days', readonly=True),
@@ -824,185 +789,16 @@ class hr_payslip(osv.osv):
res_id = super(hr_payslip, self).copy(cr, uid, id, default, context)
return res_id
- def create_voucher(self, cr, uid, ids, name, voucher, sequence=5):
- slip_move = self.pool.get('hr.payslip.account.move')
- for slip in ids:
- res = {
- 'slip_id':slip,
- 'move_id':voucher,
- 'sequence':sequence,
- 'name':name
- }
- slip_move.create(cr, uid, res)
-
def set_to_draft(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state':'draft'})
return True
def cancel_sheet(self, cr, uid, ids, context={}):
- move_pool = self.pool.get('account.move')
-
- for slip in self.browse(cr, uid, ids, context):
- if slip.move_id:
- if slip.move_id.state == 'posted':
- move_pool.button_cancel(cr, uid [slip.move_id.id], context)
- move_pool.unlink(cr, uid, [slip.move_id.id])
-
- if slip.adj_move_id:
- if slip.adj_move_id.state == 'posted':
- move_pool.button_cancel(cr, uid [slip.adj_move_id.id], context)
- move_pool.unlink(cr, uid, [slip.adj_move_id.id])
-
- if slip.other_move_id:
- if slip.other_move_id.state == 'posted':
- move_pool.button_cancel(cr, uid [slip.other_move_id.id], context)
- move_pool.unlink(cr, uid, [slip.other_move_id.id])
-
self.write(cr, uid, ids, {'state':'cancel'})
return True
def process_sheet(self, cr, uid, ids, context={}):
- move_pool = self.pool.get('account.move')
- movel_pool = self.pool.get('account.move.line')
- invoice_pool = self.pool.get('account.invoice')
-
- for slip in self.browse(cr,uid,ids):
- line_ids = []
- partner = False
- partner_id = False
- exp_ids = []
-
- partner = slip.employee_id.address_home_id.partner_id
- partner_id = partner.id
-
- fiscal_year_ids = self.pool.get('account.fiscalyear').search(cr, uid, [])
- if not fiscal_year_ids:
- raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
- fiscal_year_objs = self.pool.get('account.fiscalyear').read(cr, uid, fiscal_year_ids, ['date_start','date_stop'])
- year_exist = False
- for fiscal_year in fiscal_year_objs:
- if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
- year_exist = True
- if not year_exist:
- raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
- search_period = self.pool.get('account.period').search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)])
- if not search_period:
- raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
- period_id = search_period[0]
- name = 'Payment of Salary to %s' % (slip.employee_id.name)
- move = {
- 'journal_id': slip.bank_journal_id.id,
- 'period_id': period_id,
- 'date': slip.date,
- 'type':'bank_pay_voucher',
- 'ref':slip.number,
- 'narration': name
- }
- move_id = move_pool.create(cr, uid, move)
- self.create_voucher(cr, uid, [slip.id], name, move_id)
-
- name = "To %s account" % (slip.employee_id.name)
- ded_rec = {
- 'move_id':move_id,
- 'name': name,
- #'partner_id': partner_id,
- 'date': slip.date,
- 'account_id': slip.employee_id.property_bank_account.id,
- 'debit': 0.0,
- 'credit' : slip.total_pay,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_rec)]
- name = "By %s account" % (slip.employee_id.property_bank_account.name)
- cre_rec = {
- 'move_id':move_id,
- 'name': name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'account_id': partner.property_account_payable.id,
- 'debit': slip.total_pay,
- 'credit' : 0.0,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, cre_rec)]
-
- other_pay = slip.other_pay
- #Process all Reambuse Entries
- for line in slip.line_ids:
- if line.type == 'otherpay' and line.expanse_id.invoice_id:
- if not line.expanse_id.invoice_id.move_id:
- raise osv.except_osv(_('Warning !'), _('Please Confirm all Expanse Invoice appear for Reimbursement'))
- invids = [line.expanse_id.invoice_id.id]
- amount = line.total
- acc_id = slip.bank_journal_id.default_credit_account_id and slip.bank_journal_id.default_credit_account_id.id
- period_id = slip.period_id.id
- journal_id = slip.bank_journal_id.id
- name = '[%s]-%s' % (slip.number, line.name)
- invoice_pool.pay_and_reconcile(cr, uid, invids, amount, acc_id, period_id, journal_id, False, period_id, False, context, name)
- other_pay -= amount
- #TODO: link this account entries to the Payment Lines also Expanse Entries to Account Lines
- l_ids = movel_pool.search(cr, uid, [('name','=',name)])
- line_ids += l_ids
-
- l_ids = movel_pool.search(cr, uid, [('invoice','=',line.expanse_id.invoice_id.id)])
- exp_ids += l_ids
-
- #Process for Other payment if any
- other_move_id = False
- if slip.other_pay > 0:
- narration = 'Payment of Other Payeble amounts to %s' % (slip.employee_id.name)
- move = {
- 'journal_id': slip.bank_journal_id.id,
- 'period_id': period_id,
- 'date': slip.date,
- 'type':'bank_pay_voucher',
- 'ref':slip.number,
- 'narration': narration
- }
- other_move_id = move_pool.create(cr, uid, move)
- self.create_voucher(cr, uid, [slip.id], narration, move_id)
-
- name = "To %s account" % (slip.employee_id.name)
- ded_rec = {
- 'move_id':other_move_id,
- 'name':name,
- 'date':slip.date,
- 'account_id':slip.employee_id.property_bank_account.id,
- 'debit': 0.0,
- 'credit': other_pay,
- 'journal_id':slip.journal_id.id,
- 'period_id':period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_rec)]
- name = "By %s account" % (slip.employee_id.property_bank_account.name)
- cre_rec = {
- 'move_id':other_move_id,
- 'name':name,
- 'partner_id':partner_id,
- 'date':slip.date,
- 'account_id':partner.property_account_payable.id,
- 'debit': other_pay,
- 'credit':0.0,
- 'journal_id':slip.journal_id.id,
- 'period_id':period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, cre_rec)]
-
- rec = {
- 'state':'done',
- 'move_payment_ids':[(6, 0, line_ids)],
- 'paid':True
- }
- self.write(cr, uid, [slip.id], rec)
- for exp_id in exp_ids:
- self.write(cr, uid, [slip.id], {'move_line_ids':[(4, exp_id)]})
-
+ self.write(cr, uid, ids, {'state':'done'})
return True
def account_check_sheet(self, cr, uid, ids, context={}):
@@ -1014,364 +810,22 @@ class hr_payslip(osv.osv):
return True
def verify_sheet(self, cr, uid, ids, context={}):
-
- move_pool = self.pool.get('account.move')
- movel_pool = self.pool.get('account.move.line')
- exp_pool = self.pool.get('hr.expense.expense')
-
- for slip in self.browse(cr,uid,ids):
- total_deduct = 0.0
-
- line_ids = []
- partner = False
- partner_id = False
-
- if not slip.employee_id.address_home_id:
- raise osv.except_osv(_('Integrity Error !'), _('Please defined the Employee Home Address Along with Partners !!'))
-
- if not slip.employee_id.address_home_id.partner_id:
- raise osv.except_osv(_('Integrity Error !'), _('Please defined the Partner in Home Address !!'))
-
- partner = slip.employee_id.address_home_id.partner_id
- partner_id = slip.employee_id.address_home_id.partner_id.id
-
- period_id = False
-
- if slip.period_id:
- period_id = slip.period_id.id
- else:
- fiscal_year_ids = self.pool.get('account.fiscalyear').search(cr, uid, [])
- if not fiscal_year_ids:
- raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
- fiscal_year_objs = self.pool.get('account.fiscalyear').read(cr, uid, fiscal_year_ids, ['date_start','date_stop'])
- year_exist = False
- for fiscal_year in fiscal_year_objs:
- if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
- year_exist = True
- if not year_exist:
- raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
- search_period = self.pool.get('account.period').search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)])
- if not search_period:
- raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
- period_id = search_period[0]
-
- move = {
- #'name': slip.name,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'date': slip.date,
- 'ref':slip.number,
- 'narration': slip.name
- }
- move_id = move_pool.create(cr, uid, move)
- self.create_voucher(cr, uid, [slip.id], slip.name, move_id)
-
- line = {
- 'move_id':move_id,
- 'name': "By Basic Salary / " + slip.employee_id.name,
- 'date': slip.date,
- 'account_id': slip.employee_id.salary_account.id,
- 'debit': slip.basic,
- 'credit': 0.0,
- 'quantity':slip.working_days,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'analytic_account_id': False,
- 'ref':slip.number
- }
-
- #Setting Analysis Account for Basic Salary
- if slip.employee_id.analytic_account:
- line['analytic_account_id'] = slip.employee_id.analytic_account.id
-
- move_line_id = movel_pool.create(cr, uid, line)
- line_ids += [move_line_id]
-
- line = {
- 'move_id':move_id,
- 'name': "To Basic Paysble Salary / " + slip.employee_id.name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'account_id': slip.employee_id.employee_account.id,
- 'debit': 0.0,
- 'quantity':slip.working_days,
- 'credit': slip.basic,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, line)]
-
- for line in slip.line_ids:
- name = "[%s] - %s / %s" % (line.code, line.name, slip.employee_id.name)
- amount = line.total
-
- if line.type == 'leaves':
- continue
-
- rec = {
- 'move_id':move_id,
- 'name': name,
- 'date': slip.date,
- 'account_id': line.account_id.id,
- 'debit': 0.0,
- 'credit' : 0.0,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'analytic_account_id':False,
- 'ref':slip.number,
- 'quantity':1
- }
-
- #Setting Analysis Account for Salary Slip Lines
- if line.analytic_account_id:
- rec['analytic_account_id'] = line.analytic_account_id.id
- else:
- rec['analytic_account_id'] = slip.deg_id.account_id.id
-
- if line.type == 'allounce' or line.type == 'otherpay':
- rec['debit'] = amount
- if not partner.property_account_payable:
- raise osv.except_osv(_('Integrity Error !'), _('Please Configure Partners Payable Account!!'))
- ded_rec = {
- 'move_id':move_id,
- 'name': name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'account_id': partner.property_account_payable.id,
- 'debit': 0.0,
- 'quantity':1,
- 'credit' : amount,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_rec)]
- elif line.type == 'deduction' or line.type == 'otherdeduct':
- if not partner.property_account_receivable:
- raise osv.except_osv(_('Integrity Error !'), _('Please Configure Partners Receivable Account!!'))
- rec['credit'] = amount
- total_deduct += amount
- ded_rec = {
- 'move_id':move_id,
- 'name': name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'quantity':1,
- 'account_id': partner.property_account_receivable.id,
- 'debit': amount,
- 'credit' : 0.0,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_rec)]
-
- line_ids += [movel_pool.create(cr, uid, rec)]
-
- if line.company_contrib > 0:
- company_contrib = line.company_contrib
-# if line.category_id.amount_type == 'per':
-# company_contrib = (amount * line.category_id.contribute_per)
-
- narration = """Company Contribution of %s Encode same as a Company Expanse @ %s""" % (line.name, company_contrib)
- move = {
- #'name': slip.name,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'date': slip.date,
- 'ref':slip.number,
- 'narration': narration
- }
- company_contrib_move_id = move_pool.create(cr, uid, move)
- name = "[%s] - %s / %s - Company Contribution" % (line.code, line.name, slip.employee_id.name)
- self.create_voucher(cr, uid, [slip.id], name, company_contrib_move_id)
-
- ded_deb = {
- 'move_id':company_contrib_move_id,
- 'name': name,
- 'date': slip.date,
- 'quantity':1,
- 'account_id': line.category_id.account_id.id,
- 'debit': company_contrib,
- 'credit' : 0.0,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_deb)]
- ded_cre = {
- 'move_id':company_contrib_move_id,
- 'name': name,
- 'date': slip.date,
- 'quantity':1,
- 'account_id': line.category_id.register_id.account_id.id,
- 'debit': 0.0,
- 'credit' : company_contrib,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_cre)]
-
- if line.category_id.include_in_salary:
- narration = """Company Contribution of %s Deducted from Employee %s""" % (line.name, company_contrib)
- move = {
- #'name': slip.name,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'date': slip.date,
- 'ref':slip.number,
- 'narration': narration
- }
- include_in_salary_move_id = move_pool.create(cr, uid, move)
- self.create_voucher(cr, uid, [slip.id], narration, include_in_salary_move_id)
-
- total_deduct += company_contrib
- ded_deb = {
- 'move_id':include_in_salary_move_id,
- 'name': name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'quantity':1,
- 'account_id': partner.property_account_receivable.id,
- 'debit': company_contrib,
- 'credit' : 0.0,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_deb)]
- ded_cre = {
- 'move_id':include_in_salary_move_id,
- 'name': name,
- 'date': slip.date,
- 'quantity':1,
- 'account_id': line.category_id.account_id.id,
- 'debit': 0.0,
- 'credit' : company_contrib,
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_cre)]
-
- #make an entry line to contribution register
- if line.category_id.register_id:
- ctr = {
- 'register_id':line.category_id.register_id.id,
- 'name':line.name,
- 'code':line.code,
- 'employee_id':slip.employee_id.id,
- 'period_id':period_id,
- 'emp_deduction':amount,
- }
- if line.category_id.contribute:
- ctr['comp_deduction'] = amount
-
- company = 0.0
- employee = 0.0
- if line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'per':
- new_amount = (amount * (line.category_id.contribute_per / (1+line.category_id.contribute_per)))
- company = new_amount
- employee = amount - company
-
- elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
- company = line.category_id.contribute_per
- employee = amount - company
-
- elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'func':
- company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
- employee = amount
-
- elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'per':
- company = amount * line.category_id.contribute_per
- employee = amount
-
- elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
- company = line.category_id.contribute_per
- employee = amount
-
- elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'func':
- company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
- employee = amount
-
- ctr['emp_deduction'] = employee
- ctr['comp_deduction'] = company
-
- self.pool.get('hr.contibution.register.line').create(cr, uid, ctr)
-
- adj_move_id = False
- if total_deduct > 0:
- move = {
- 'journal_id': slip.journal_id.id,
- 'period_id': period_id,
- 'date': slip.date,
- 'ref':slip.number,
- 'narration': 'Adjustment : %s' % (slip.name)
- }
- adj_move_id = move_pool.create(cr, uid, move)
- name = "Adjustment Entry - %s" % (slip.employee_id.name)
- self.create_voucher(cr, uid, [slip.id], name, adj_move_id)
-
- ded_rec = {
- 'move_id':adj_move_id,
- 'name': name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'account_id': partner.property_account_receivable.id,
- 'debit': 0.0,
- 'quantity':1,
- 'credit' : total_deduct,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, ded_rec)]
- cre_rec = {
- 'move_id':adj_move_id,
- 'name': name,
- 'partner_id': partner_id,
- 'date': slip.date,
- 'account_id': partner.property_account_payable.id,
- 'debit': total_deduct,
- 'quantity':1,
- 'credit' : 0.0,
- 'journal_id' : slip.journal_id.id,
- 'period_id' :period_id,
- 'ref':slip.number
- }
- line_ids += [movel_pool.create(cr, uid, cre_rec)]
-
- rec = {
- 'state':'confirm',
- 'move_line_ids':[(6, 0,line_ids)],
- }
- if not slip.period_id:
- rec['period_id'] = period_id
-
- dates = prev_bounds(slip.date)
- exp_ids = exp_pool.search(cr, uid, [('date_valid','>=',dates[0]), ('date_valid','<=',dates[1]), ('state','=','invoiced')])
- if exp_ids:
- acc = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category')
- for exp in exp_pool.browse(cr, uid, exp_ids):
- exp_res = {
- 'name':exp.name,
- 'amount_type':'fix',
- 'type':'otherpay',
- 'category_id':exp.category_id.id,
- 'amount':exp.amount,
- 'slip_id':slip.id,
- 'expanse_id':exp.id,
- 'account_id':acc
- }
- self.pool.get('hr.payslip.line').create(cr, uid, exp_res)
-
- self.write(cr, uid, [slip.id], rec)
-
+ self.write(cr, uid, ids, {'state':'confirm'})
return True
def get_contract(self, cr, uid, employee, date, context={}):
+ """
+ Compute leaves for an employee
+
+ @param cr: cursor to database
+ @param uid: id of current user
+ @param employee: object of the hr.employee model
+ @param date: date on which pay slip is creating
+ @param context: context arguments, like lang, time zone
+
+ @return: return a current contract from the list of contract
+ """
+
sql_req= '''
SELECT c.id as id, c.wage as wage, struct_id as function
FROM hr_contract c
@@ -1398,7 +852,6 @@ class hr_payslip(osv.osv):
@param slip: object of the hr.payroll.slip model
@param employee: object of the hr.employee model
@param context: context arguments, like lang, time zone
-
@return: return a result
"""
@@ -1434,12 +887,17 @@ class hr_payslip(osv.osv):
if datetime.date(year, month, day).weekday() == calc_day:
count += 1
return count
-
+
+ basic = 0.0
+ contract = False
for slip in self.browse(cr, uid, ids):
+ basic = 0.0
+
contracts = self.get_contract(cr, uid, slip.employee_id, date, context)
- if contracts.get('id', False) == False:
+ if not contracts or contracts.get('id', False) == False:
continue
+
contract = self.pool.get('hr.contract').browse(cr, uid, contracts.get('id'))
sal_type = contract.wage_type_id.type
@@ -1516,7 +974,7 @@ class hr_payslip(osv.osv):
amt = eval(base, obj)
except Exception, e:
raise osv.except_osv(_('Variable Error !'), _('Variable Error : %s ' % (e)))
-
+
if sal_type in ('gross', 'net'):
if line.amount_type == 'per':
percent = line.amount
@@ -1528,7 +986,10 @@ class hr_payslip(osv.osv):
if value > 0:
percent = 0.0
-
+
+ for cline in line.category_id.contribute_ids:
+ pass
+
elif line.amount_type == 'fix':
value = line.amount
@@ -1536,12 +997,16 @@ class hr_payslip(osv.osv):
value = self.pool.get('hr.payslip.line').execute_function(cr, uid, line.id, amt, context)
line.amount = value
else:
- if line.amount_type in ('fix', 'per'):
- value = line.amount
- elif line.amount_type == 'func':
+ if line.amount_type == 'func':
value = self.pool.get('hr.payslip.line').execute_function(cr, uid, line.id, amt, context)
line.amount = value
-
+
+# for cline in line.category_id.contribute_ids:
+# if cline.amount_type == 'fix':
+# contribute = cline.contribute_per
+# elif cline.amount_type == 'func':
+# contribute = func_pool.execute_function(cr, uid, cline.id, line.amount, context)
+
if line.type == 'allowance':
all_per += percent
all_fix += value
@@ -1557,7 +1022,7 @@ class hr_payslip(osv.osv):
'base':base
}
slip_line_pool.copy(cr, uid, line.id, vals, {})
-
+
if sal_type in ('gross', 'net'):
sal = contract.wage
if sal_type == 'net':
@@ -1589,94 +1054,80 @@ class hr_payslip(osv.osv):
})
self.write(cr, uid, [slip.id], update)
-
- for slip in self.browse(cr, uid, ids):
- basic_before_leaves = basic
+ if contract:
+ for slip in self.browse(cr, uid, ids):
+ basic_before_leaves = basic
- working_day = 0
- off_days = 0
- dates = prev_bounds(slip.date)
-
- days_arr = [0, 1, 2, 3, 4, 5, 6]
- for dy in range(contract.working_days_per_week, 7):
- off_days += get_days(1, dates[1].day, dates[1].month, dates[1].year, days_arr[dy])
-
- total_off = off_days
- working_day = dates[1].day - total_off
- perday = slip.net / working_day
-
- total = 0.0
- leave = 0.0
-
- leave_ids = self._get_leaves(cr, uid, slip, slip.employee_id, context)
-
- total_leave = 0.0
- paid_leave = 0.0
- for hday in holiday_pool.browse(cr, uid, leave_ids):
- res = {
- 'slip_id':slip.id,
- 'name':hday.holiday_status_id.name + '-%s' % (hday.number_of_days),
- 'code':hday.holiday_status_id.code,
- 'amount_type':'fix',
- 'category_id':hday.holiday_status_id.head_id.id,
- 'account_id':hday.holiday_status_id.account_id.id,
- 'analytic_account_id':hday.holiday_status_id.analytic_account_id.id
- }
-
- days = hday.number_of_days
- if hday.number_of_days < 0:
- days = hday.number_of_days * -1
-
- total_leave += days
- if hday.holiday_status_id.type == 'paid':
- paid_leave += days
- continue
+ working_day = 0
+ off_days = 0
+ dates = prev_bounds(slip.date)
- elif hday.holiday_status_id.type == 'halfpaid':
- paid_leave += (days / 2)
- res['name'] = hday.holiday_status_id.name + '-%s/2' % (days)
- res['amount'] = perday * (days/2)
- total += perday * (days/2)
- leave += days / 2
- res['type'] = 'deduction'
- else:
- res['name'] = hday.holiday_status_id.name + '-%s' % (days)
- res['amount'] = perday * days
- res['type'] = 'deduction'
- leave += days
- total += perday * days
+ days_arr = [0, 1, 2, 3, 4, 5, 6]
+ for dy in range(contract.working_days_per_week, 7):
+ off_days += get_days(1, dates[1].day, dates[1].month, dates[1].year, days_arr[dy])
- slip_line_pool.create(cr, uid, res)
- basic = basic - total
- leaves = total
+ total_off = off_days
+ working_day = dates[1].day - total_off
+ perday = slip.net / working_day
+
+ total = 0.0
+ leave = 0.0
+
+ leave_ids = self._get_leaves(cr, uid, slip, slip.employee_id, context)
+
+ total_leave = 0.0
+ paid_leave = 0.0
+ for hday in holiday_pool.browse(cr, uid, leave_ids):
+ res = {
+ 'slip_id':slip.id,
+ 'name':hday.holiday_status_id.name + '-%s' % (hday.number_of_days),
+ 'code':hday.holiday_status_id.code,
+ 'amount_type':'fix',
+ 'category_id':hday.holiday_status_id.head_id.id,
+ 'account_id':hday.holiday_status_id.account_id.id,
+ 'analytic_account_id':hday.holiday_status_id.analytic_account_id.id
+ }
+
+ days = hday.number_of_days
+ if hday.number_of_days < 0:
+ days = hday.number_of_days * -1
+
+ total_leave += days
+ if hday.holiday_status_id.type == 'paid':
+ paid_leave += days
+ continue
+
+ elif hday.holiday_status_id.type == 'halfpaid':
+ paid_leave += (days / 2)
+ res['name'] = hday.holiday_status_id.name + '-%s/2' % (days)
+ res['amount'] = perday * (days/2)
+ total += perday * (days/2)
+ leave += days / 2
+ res['type'] = 'deduction'
+ else:
+ res['name'] = hday.holiday_status_id.name + '-%s' % (days)
+ res['amount'] = perday * days
+ res['type'] = 'deduction'
+ leave += days
+ total += perday * days
+
+ slip_line_pool.create(cr, uid, res)
+ basic = basic - total
+ leaves = total
- update.update({
- 'basic_before_leaves': round(basic_before_leaves),
- 'leaves':total,
- 'holiday_days':leave,
- 'worked_days':working_day - leave,
- 'working_days':working_day,
- })
- self.write(cr, uid, [slip.id], update)
-
+ update.update({
+ 'basic_before_leaves': round(basic_before_leaves),
+ 'leaves':total,
+ 'holiday_days':leave,
+ 'worked_days':working_day - leave,
+ 'working_days':working_day,
+ })
+ self.write(cr, uid, [slip.id], update)
+
return True
hr_payslip()
-class account_move_link_slip(osv.osv):
- '''
- Account Move Link to Pay Slip
- '''
- _name = 'hr.payslip.account.move'
- _description = 'Account Move Link to Pay Slip'
- _columns = {
- 'name':fields.char('Name', size=256, required=True, readonly=False),
- 'move_id':fields.many2one('account.move', 'Expanse Entries', required=False, readonly=True),
- 'slip_id':fields.many2one('hr.payslip', 'Pay Slip', required=False),
- 'sequence': fields.integer('Sequence'),
- }
-account_move_link_slip()
-
class line_condition(osv.osv):
'''
Line Condition
@@ -1834,7 +1285,7 @@ class hr_employee(osv.osv):
'esi_account':fields.char('ESI Account', size=64, required=False, readonly=False),
'hospital_id':fields.many2one('res.partner.address', 'ESI Hospital', required=False),
'passport_id':fields.many2one('hr.passport', 'Passport', required=False),
- 'otherid':fields.char('Other Id', size=64, required=False),
+ 'bank_account_id':fields.many2one('res.partner.bank', 'Bank Account', required=False),
'line_ids':fields.one2many('hr.payslip.line', 'employee_id', 'Salary Structure', required=False),
'slip_ids':fields.one2many('hr.payslip', 'employee_id', 'Payslips', required=False, readonly=True),
'property_bank_account': fields.property(
@@ -1847,7 +1298,7 @@ class hr_employee(osv.osv):
help="Select Bank Account from where Salary Expanse will be Paid",
required=True),
'salary_account':fields.property(
- 'account.account',
+ 'account.account',
type='many2one',
relation='account.account',
string="Salary Account",
diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml
index 0be3793a234..dcc6087ace5 100644
--- a/addons/hr_payroll/hr_payroll_view.xml
+++ b/addons/hr_payroll/hr_payroll_view.xml
@@ -131,7 +131,7 @@
-
+
@@ -458,23 +458,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -484,12 +469,6 @@
-
-
-
-
-
-
@@ -526,14 +505,22 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_payroll/hr_payroll_workflow.xml b/addons/hr_payroll/hr_payroll_workflow.xml
index 0e5ccfe091f..f494975a1b1 100644
--- a/addons/hr_payroll/hr_payroll_workflow.xml
+++ b/addons/hr_payroll/hr_payroll_workflow.xml
@@ -28,13 +28,6 @@
function
-
-
- account_check
- account_check_sheet()
- function
-
-
confirm
@@ -66,27 +59,13 @@
- basic>=10000
- verify_sheet
-
-
-
-
-
- verify_twice_sheet
-
-
-
-
-
- basic<10000
verify_sheet
-
+
- final_verify_sheet
+ verify_twice_sheet
@@ -107,12 +86,6 @@
cancel_sheet
-
-
-
- cancel_sheet
-
-
diff --git a/addons/hr_payroll_account/__init__.py b/addons/hr_payroll_account/__init__.py
new file mode 100644
index 00000000000..81979b0ae58
--- /dev/null
+++ b/addons/hr_payroll_account/__init__.py
@@ -0,0 +1,23 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved
+# d$
+#
+# 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 .
+#
+##############################################################################
+
+import hr_payroll_account
diff --git a/addons/hr_payroll_account/__openerp__.py b/addons/hr_payroll_account/__openerp__.py
new file mode 100644
index 00000000000..c3c75f6ec8d
--- /dev/null
+++ b/addons/hr_payroll_account/__openerp__.py
@@ -0,0 +1,47 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved
+# d$
+#
+# 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 .
+#
+##############################################################################
+{
+ 'name': 'Human Resource Payroll Accounting',
+ 'version': '1.0',
+ 'category': 'Generic Modules/Human Resources',
+ 'description': """Generic Payroll system Integrated with Accountings
+ * Expanse Encoding
+ * Payment Encoding
+ * Comany Contribution Managemet
+ """,
+ 'author':'Tiny/Axelor',
+ 'website':'http://www.openerp.com',
+ 'depends': [
+ 'hr_payroll',
+ 'account',
+ ],
+ 'init_xml': [
+ ],
+ 'update_xml': [
+ "hr_payroll_account_view.xml",
+ "hr_payroll_account_workflow.xml"
+ ],
+ 'demo_xml': [
+ ],
+ 'installable': True,
+ 'active': False,
+}
diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py
new file mode 100644
index 00000000000..72ffaf435ca
--- /dev/null
+++ b/addons/hr_payroll_account/hr_payroll_account.py
@@ -0,0 +1,618 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved
+# d$
+#
+# 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 .
+#
+##############################################################################
+
+import time
+import netsvc
+from osv import osv
+from osv import fields
+from tools import config
+from tools.translate import _
+
+from datetime import date
+from datetime import datetime
+from datetime import timedelta
+
+def prev_bounds(cdate=False):
+ when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
+ this_first = date(when.year, when.month, 1)
+ month = when.month + 1
+ year = when.year
+ if month > 12:
+ month = 1
+ year += 1
+ next_month = date(year, month, 1)
+ prev_end = next_month - timedelta(days=1)
+ return this_first, prev_end
+
+class hr_payslip(osv.osv):
+ '''
+ Pay Slip
+ '''
+ _inherit = 'hr.payslip'
+ _description = 'Pay Slip'
+
+ _columns = {
+ 'move_ids':fields.one2many('hr.payslip.account.move', 'slip_id', 'Accounting vouchers', required=False),
+ 'move_line_ids':fields.many2many('account.move.line', 'payslip_lines_rel', 'slip_id', 'line_id', 'Accounting Lines', readonly=True),
+ 'move_payment_ids':fields.many2many('account.move.line', 'payslip_payment_rel', 'slip_id', 'payment_id', 'Payment Lines', readonly=True),
+ 'period_id': fields.many2one('account.period', 'Force Period', domain=[('state','<>','done')], help="Keep empty to use the period of the validation(Payslip) date."),
+ }
+
+ def create_voucher(self, cr, uid, ids, name, voucher, sequence=5):
+ slip_move = self.pool.get('hr.payslip.account.move')
+ for slip in ids:
+ res = {
+ 'slip_id':slip,
+ 'move_id':voucher,
+ 'sequence':sequence,
+ 'name':name
+ }
+ slip_move.create(cr, uid, res)
+
+ def cancel_sheet(self, cr, uid, ids, context={}):
+ move_pool = self.pool.get('account.move')
+
+ for slip in self.browse(cr, uid, ids, context):
+ if slip.move_id:
+ if slip.move_id.state == 'posted':
+ move_pool.button_cancel(cr, uid [slip.move_id.id], context)
+ move_pool.unlink(cr, uid, [slip.move_id.id])
+
+ if slip.adj_move_id:
+ if slip.adj_move_id.state == 'posted':
+ move_pool.button_cancel(cr, uid [slip.adj_move_id.id], context)
+ move_pool.unlink(cr, uid, [slip.adj_move_id.id])
+
+ if slip.other_move_id:
+ if slip.other_move_id.state == 'posted':
+ move_pool.button_cancel(cr, uid [slip.other_move_id.id], context)
+ move_pool.unlink(cr, uid, [slip.other_move_id.id])
+
+ self.write(cr, uid, ids, {'state':'cancel'})
+ return True
+
+ def process_sheet(self, cr, uid, ids, context={}):
+ move_pool = self.pool.get('account.move')
+ movel_pool = self.pool.get('account.move.line')
+ invoice_pool = self.pool.get('account.invoice')
+
+ for slip in self.browse(cr,uid,ids):
+ line_ids = []
+ partner = False
+ partner_id = False
+ exp_ids = []
+
+ partner = slip.employee_id.bank_account_id.partner_id
+ partner_id = partner.id
+
+ fiscal_year_ids = self.pool.get('account.fiscalyear').search(cr, uid, [])
+ if not fiscal_year_ids:
+ raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
+ fiscal_year_objs = self.pool.get('account.fiscalyear').read(cr, uid, fiscal_year_ids, ['date_start','date_stop'])
+ year_exist = False
+ for fiscal_year in fiscal_year_objs:
+ if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
+ year_exist = True
+ if not year_exist:
+ raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
+ search_period = self.pool.get('account.period').search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)])
+ if not search_period:
+ raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
+ period_id = search_period[0]
+ name = 'Payment of Salary to %s' % (slip.employee_id.name)
+ move = {
+ 'journal_id': slip.bank_journal_id.id,
+ 'period_id': period_id,
+ 'date': slip.date,
+ 'type':'bank_pay_voucher',
+ 'ref':slip.number,
+ 'narration': name
+ }
+ move_id = move_pool.create(cr, uid, move)
+ self.create_voucher(cr, uid, [slip.id], name, move_id)
+
+ name = "To %s account" % (slip.employee_id.name)
+ ded_rec = {
+ 'move_id':move_id,
+ 'name': name,
+ #'partner_id': partner_id,
+ 'date': slip.date,
+ 'account_id': slip.employee_id.property_bank_account.id,
+ 'debit': 0.0,
+ 'credit' : slip.total_pay,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_rec)]
+ name = "By %s account" % (slip.employee_id.property_bank_account.name)
+ cre_rec = {
+ 'move_id':move_id,
+ 'name': name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'account_id': partner.property_account_payable.id,
+ 'debit': slip.total_pay,
+ 'credit' : 0.0,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, cre_rec)]
+
+ other_pay = slip.other_pay
+ #Process all Reambuse Entries
+ for line in slip.line_ids:
+ if line.type == 'otherpay' and line.expanse_id.invoice_id:
+ if not line.expanse_id.invoice_id.move_id:
+ raise osv.except_osv(_('Warning !'), _('Please Confirm all Expanse Invoice appear for Reimbursement'))
+ invids = [line.expanse_id.invoice_id.id]
+ amount = line.total
+ acc_id = slip.bank_journal_id.default_credit_account_id and slip.bank_journal_id.default_credit_account_id.id
+ period_id = slip.period_id.id
+ journal_id = slip.bank_journal_id.id
+ name = '[%s]-%s' % (slip.number, line.name)
+ invoice_pool.pay_and_reconcile(cr, uid, invids, amount, acc_id, period_id, journal_id, False, period_id, False, context, name)
+ other_pay -= amount
+ #TODO: link this account entries to the Payment Lines also Expanse Entries to Account Lines
+ l_ids = movel_pool.search(cr, uid, [('name','=',name)])
+ line_ids += l_ids
+
+ l_ids = movel_pool.search(cr, uid, [('invoice','=',line.expanse_id.invoice_id.id)])
+ exp_ids += l_ids
+
+ #Process for Other payment if any
+ other_move_id = False
+ if slip.other_pay > 0:
+ narration = 'Payment of Other Payeble amounts to %s' % (slip.employee_id.name)
+ move = {
+ 'journal_id': slip.bank_journal_id.id,
+ 'period_id': period_id,
+ 'date': slip.date,
+ 'type':'bank_pay_voucher',
+ 'ref':slip.number,
+ 'narration': narration
+ }
+ other_move_id = move_pool.create(cr, uid, move)
+ self.create_voucher(cr, uid, [slip.id], narration, move_id)
+
+ name = "To %s account" % (slip.employee_id.name)
+ ded_rec = {
+ 'move_id':other_move_id,
+ 'name':name,
+ 'date':slip.date,
+ 'account_id':slip.employee_id.property_bank_account.id,
+ 'debit': 0.0,
+ 'credit': other_pay,
+ 'journal_id':slip.journal_id.id,
+ 'period_id':period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_rec)]
+ name = "By %s account" % (slip.employee_id.property_bank_account.name)
+ cre_rec = {
+ 'move_id':other_move_id,
+ 'name':name,
+ 'partner_id':partner_id,
+ 'date':slip.date,
+ 'account_id':partner.property_account_payable.id,
+ 'debit': other_pay,
+ 'credit':0.0,
+ 'journal_id':slip.journal_id.id,
+ 'period_id':period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, cre_rec)]
+
+ rec = {
+ 'state':'done',
+ 'move_payment_ids':[(6, 0, line_ids)],
+ 'paid':True
+ }
+ self.write(cr, uid, [slip.id], rec)
+ for exp_id in exp_ids:
+ self.write(cr, uid, [slip.id], {'move_line_ids':[(4, exp_id)]})
+
+ return True
+
+ def account_check_sheet(self, cr, uid, ids, context={}):
+ self.write(cr, uid, ids, {'state':'accont_check'})
+ return True
+
+ def hr_check_sheet(self, cr, uid, ids, context={}):
+ self.write(cr, uid, ids, {'state':'hr_check'})
+ return True
+
+ def verify_sheet(self, cr, uid, ids, context={}):
+
+ move_pool = self.pool.get('account.move')
+ movel_pool = self.pool.get('account.move.line')
+ exp_pool = self.pool.get('hr.expense.expense')
+
+ for slip in self.browse(cr,uid,ids):
+ total_deduct = 0.0
+
+ line_ids = []
+ partner = False
+ partner_id = False
+
+ if not slip.employee_id.bank_account_id:
+ raise osv.except_osv(_('Integrity Error !'), _('Please defined bank account for %s !' % (slip.employee_id.name)))
+
+ if not slip.employee_id.bank_account_id.partner_id:
+ raise osv.except_osv(_('Integrity Error !'), _('Please defined partner in bank account for %s !' % (slip.employee_id.name)))
+
+ partner = slip.employee_id.bank_account_id.partner_id
+ partner_id = slip.employee_id.bank_account_id.partner_id.id
+
+ period_id = False
+
+ if slip.period_id:
+ period_id = slip.period_id.id
+ else:
+ fiscal_year_ids = self.pool.get('account.fiscalyear').search(cr, uid, [])
+ if not fiscal_year_ids:
+ raise osv.except_osv(_('Warning !'), _('Please define fiscal year for perticular contract'))
+ fiscal_year_objs = self.pool.get('account.fiscalyear').read(cr, uid, fiscal_year_ids, ['date_start','date_stop'])
+ year_exist = False
+ for fiscal_year in fiscal_year_objs:
+ if ((fiscal_year['date_start'] <= slip.date) and (fiscal_year['date_stop'] >= slip.date)):
+ year_exist = True
+ if not year_exist:
+ raise osv.except_osv(_('Warning !'), _('Fiscal Year is not defined for slip date %s'%slip.date))
+ search_period = self.pool.get('account.period').search(cr,uid,[('date_start','<=',slip.date),('date_stop','>=',slip.date)])
+ if not search_period:
+ raise osv.except_osv(_('Warning !'), _('Period is not defined for slip date %s'%slip.date))
+ period_id = search_period[0]
+
+ move = {
+ #'name': slip.name,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'date': slip.date,
+ 'ref':slip.number,
+ 'narration': slip.name
+ }
+ move_id = move_pool.create(cr, uid, move)
+ self.create_voucher(cr, uid, [slip.id], slip.name, move_id)
+
+ line = {
+ 'move_id':move_id,
+ 'name': "By Basic Salary / " + slip.employee_id.name,
+ 'date': slip.date,
+ 'account_id': slip.employee_id.salary_account.id,
+ 'debit': slip.basic,
+ 'credit': 0.0,
+ 'quantity':slip.working_days,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'analytic_account_id': False,
+ 'ref':slip.number
+ }
+
+ #Setting Analysis Account for Basic Salary
+ if slip.employee_id.analytic_account:
+ line['analytic_account_id'] = slip.employee_id.analytic_account.id
+
+ move_line_id = movel_pool.create(cr, uid, line)
+ line_ids += [move_line_id]
+
+ line = {
+ 'move_id':move_id,
+ 'name': "To Basic Paysble Salary / " + slip.employee_id.name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'account_id': slip.employee_id.employee_account.id,
+ 'debit': 0.0,
+ 'quantity':slip.working_days,
+ 'credit': slip.basic,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, line)]
+
+ for line in slip.line_ids:
+ name = "[%s] - %s / %s" % (line.code, line.name, slip.employee_id.name)
+ amount = line.total
+
+ if line.type == 'leaves':
+ continue
+
+ rec = {
+ 'move_id':move_id,
+ 'name': name,
+ 'date': slip.date,
+ 'account_id': line.account_id.id,
+ 'debit': 0.0,
+ 'credit' : 0.0,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'analytic_account_id':False,
+ 'ref':slip.number,
+ 'quantity':1
+ }
+
+ #Setting Analysis Account for Salary Slip Lines
+ if line.analytic_account_id:
+ rec['analytic_account_id'] = line.analytic_account_id.id
+ else:
+ rec['analytic_account_id'] = slip.deg_id.account_id.id
+
+ if line.type == 'allounce' or line.type == 'otherpay':
+ rec['debit'] = amount
+ if not partner.property_account_payable:
+ raise osv.except_osv(_('Integrity Error !'), _('Please Configure Partners Payable Account!!'))
+ ded_rec = {
+ 'move_id':move_id,
+ 'name': name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'account_id': partner.property_account_payable.id,
+ 'debit': 0.0,
+ 'quantity':1,
+ 'credit' : amount,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_rec)]
+ elif line.type == 'deduction' or line.type == 'otherdeduct':
+ if not partner.property_account_receivable:
+ raise osv.except_osv(_('Integrity Error !'), _('Please Configure Partners Receivable Account!!'))
+ rec['credit'] = amount
+ total_deduct += amount
+ ded_rec = {
+ 'move_id':move_id,
+ 'name': name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'quantity':1,
+ 'account_id': partner.property_account_receivable.id,
+ 'debit': amount,
+ 'credit' : 0.0,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_rec)]
+
+ line_ids += [movel_pool.create(cr, uid, rec)]
+
+ if line.company_contrib > 0:
+ company_contrib = line.company_contrib
+# if line.category_id.amount_type == 'per':
+# company_contrib = (amount * line.category_id.contribute_per)
+
+ narration = """Company Contribution of %s Encode same as a Company Expanse @ %s""" % (line.name, company_contrib)
+ move = {
+ #'name': slip.name,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'date': slip.date,
+ 'ref':slip.number,
+ 'narration': narration
+ }
+ company_contrib_move_id = move_pool.create(cr, uid, move)
+ name = "[%s] - %s / %s - Company Contribution" % (line.code, line.name, slip.employee_id.name)
+ self.create_voucher(cr, uid, [slip.id], name, company_contrib_move_id)
+
+ ded_deb = {
+ 'move_id':company_contrib_move_id,
+ 'name': name,
+ 'date': slip.date,
+ 'quantity':1,
+ 'account_id': line.category_id.account_id.id,
+ 'debit': company_contrib,
+ 'credit' : 0.0,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_deb)]
+ ded_cre = {
+ 'move_id':company_contrib_move_id,
+ 'name': name,
+ 'date': slip.date,
+ 'quantity':1,
+ 'account_id': line.category_id.register_id.account_id.id,
+ 'debit': 0.0,
+ 'credit' : company_contrib,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_cre)]
+
+ if line.category_id.include_in_salary:
+ narration = """Company Contribution of %s Deducted from Employee %s""" % (line.name, company_contrib)
+ move = {
+ #'name': slip.name,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'date': slip.date,
+ 'ref':slip.number,
+ 'narration': narration
+ }
+ include_in_salary_move_id = move_pool.create(cr, uid, move)
+ self.create_voucher(cr, uid, [slip.id], narration, include_in_salary_move_id)
+
+ total_deduct += company_contrib
+ ded_deb = {
+ 'move_id':include_in_salary_move_id,
+ 'name': name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'quantity':1,
+ 'account_id': partner.property_account_receivable.id,
+ 'debit': company_contrib,
+ 'credit' : 0.0,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_deb)]
+ ded_cre = {
+ 'move_id':include_in_salary_move_id,
+ 'name': name,
+ 'date': slip.date,
+ 'quantity':1,
+ 'account_id': line.category_id.account_id.id,
+ 'debit': 0.0,
+ 'credit' : company_contrib,
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_cre)]
+
+ #make an entry line to contribution register
+# if line.category_id.register_id:
+# ctr = {
+# 'register_id':line.category_id.register_id.id,
+# 'name':line.name,
+# 'code':line.code,
+# 'employee_id':slip.employee_id.id,
+# 'period_id':period_id,
+# 'emp_deduction':amount,
+# }
+# if line.category_id.contribute:
+# ctr['comp_deduction'] = amount
+#
+# company = 0.0
+# employee = 0.0
+# if line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'per':
+# new_amount = (amount * (line.category_id.contribute_per / (1+line.category_id.contribute_per)))
+# company = new_amount
+# employee = amount - company
+#
+# elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
+# company = line.category_id.contribute_per
+# employee = amount - company
+
+# elif line.category_id.contribute and line.category_id.include_in_salary and line.category_id.amount_type == 'func':
+# company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
+# employee = amount
+#
+# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'per':
+# company = amount * line.category_id.contribute_per
+# employee = amount
+#
+# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'fix':
+# company = line.category_id.contribute_per
+# employee = amount
+
+# elif line.category_id.contribute and not line.category_id.include_in_salary and line.category_id.amount_type == 'func':
+# company = self.pool.get('hr.allounce.deduction.categoty').execute_function(cr, uid, line.category_id.id, line.slip_id.basic, context)
+# employee = amount
+#
+# ctr['emp_deduction'] = employee
+# ctr['comp_deduction'] = company
+#
+# self.pool.get('hr.contibution.register.line').create(cr, uid, ctr)
+
+ adj_move_id = False
+ if total_deduct > 0:
+ move = {
+ 'journal_id': slip.journal_id.id,
+ 'period_id': period_id,
+ 'date': slip.date,
+ 'ref':slip.number,
+ 'narration': 'Adjustment : %s' % (slip.name)
+ }
+ adj_move_id = move_pool.create(cr, uid, move)
+ name = "Adjustment Entry - %s" % (slip.employee_id.name)
+ self.create_voucher(cr, uid, [slip.id], name, adj_move_id)
+
+ ded_rec = {
+ 'move_id':adj_move_id,
+ 'name': name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'account_id': partner.property_account_receivable.id,
+ 'debit': 0.0,
+ 'quantity':1,
+ 'credit' : total_deduct,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, ded_rec)]
+ cre_rec = {
+ 'move_id':adj_move_id,
+ 'name': name,
+ 'partner_id': partner_id,
+ 'date': slip.date,
+ 'account_id': partner.property_account_payable.id,
+ 'debit': total_deduct,
+ 'quantity':1,
+ 'credit' : 0.0,
+ 'journal_id' : slip.journal_id.id,
+ 'period_id' :period_id,
+ 'ref':slip.number
+ }
+ line_ids += [movel_pool.create(cr, uid, cre_rec)]
+
+ rec = {
+ 'state':'confirm',
+ 'move_line_ids':[(6, 0,line_ids)],
+ }
+ if not slip.period_id:
+ rec['period_id'] = period_id
+
+ dates = prev_bounds(slip.date)
+ exp_ids = exp_pool.search(cr, uid, [('date_valid','>=',dates[0]), ('date_valid','<=',dates[1]), ('state','=','invoiced')])
+ if exp_ids:
+ acc = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category')
+ for exp in exp_pool.browse(cr, uid, exp_ids):
+ exp_res = {
+ 'name':exp.name,
+ 'amount_type':'fix',
+ 'type':'otherpay',
+ 'category_id':exp.category_id.id,
+ 'amount':exp.amount,
+ 'slip_id':slip.id,
+ 'expanse_id':exp.id,
+ 'account_id':acc
+ }
+ self.pool.get('hr.payslip.line').create(cr, uid, exp_res)
+
+ self.write(cr, uid, [slip.id], rec)
+
+ return True
+
+hr_payslip()
+
+class account_move_link_slip(osv.osv):
+ '''
+ Account Move Link to Pay Slip
+ '''
+ _name = 'hr.payslip.account.move'
+ _description = 'Account Move Link to Pay Slip'
+ _columns = {
+ 'name':fields.char('Name', size=256, required=True, readonly=False),
+ 'move_id':fields.many2one('account.move', 'Expanse Entries', required=False, readonly=True),
+ 'slip_id':fields.many2one('hr.payslip', 'Pay Slip', required=False),
+ 'sequence': fields.integer('Sequence'),
+ }
+account_move_link_slip()
+
diff --git a/addons/hr_payroll_account/hr_payroll_account_view.xml b/addons/hr_payroll_account/hr_payroll_account_view.xml
new file mode 100644
index 00000000000..6ef6c812c0b
--- /dev/null
+++ b/addons/hr_payroll_account/hr_payroll_account_view.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ hr.payslip.form
+ hr.payslip
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ hr.payslip.form
+ hr.payslip
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_payroll_account/hr_payroll_account_workflow.xml b/addons/hr_payroll_account/hr_payroll_account_workflow.xml
new file mode 100644
index 00000000000..80c9848ee39
--- /dev/null
+++ b/addons/hr_payroll_account/hr_payroll_account_workflow.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ account_check
+ account_check_sheet()
+ function
+
+
+
+
+
+ True
+ verify_sheet
+
+
+
+
+
+ True
+ verify_twice_sheet
+
+
+
+
+
+ final_verify_sheet
+
+
+
+
+
+ cancel_sheet
+
+
+
+
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
index 1a110d21151..e619df22683 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -72,7 +72,6 @@ class hr_timesheet_invoice_create(osv.osv_memory):
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
res = mod_obj.read(cr, uid, result, ['res_id'])
data = self.read(cr, uid, ids, [], context)[0]
-
account_ids = data['accounts']
for account in analytic_account_obj.browse(cr, uid, account_ids, context):
partner = account.partner_id
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index 94d0e912bcf..2eb352974d7 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -151,16 +151,13 @@ class hr_timesheet_sheet(osv.osv):
raise osv.except_osv(_('Error !'), _('You can not duplicate a timesheet !'))
def button_confirm(self, cr, uid, ids, context=None):
-
if context is None:
context = {}
for sheet in self.browse(cr, uid, ids, context=context):
di = sheet.user_id.company_id.timesheet_max_difference
-
if (abs(sheet.total_difference) < di) or not di:
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'hr_timesheet_sheet.sheet', sheet.id, 'confirm', cr)
-
else:
raise osv.except_osv(_('Warning !'), _('Please verify that the total difference of the sheet is lower than %.2f !') %(di,))
return True
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index d24ad041fee..0f69931ca43 100644
--- a/addons/idea/idea_view.xml
+++ b/addons/idea/idea_view.xml
@@ -247,6 +247,7 @@
+
@@ -372,7 +373,7 @@
-
+
diff --git a/addons/idea/wizard/idea_post_vote.py b/addons/idea/wizard/idea_post_vote.py
index e723d0a4505..c4ba6f331dc 100644
--- a/addons/idea/wizard/idea_post_vote.py
+++ b/addons/idea/wizard/idea_post_vote.py
@@ -101,6 +101,7 @@ class idea_post_vote(osv.osv_memory):
"""
vote_ids = context and context.get('active_ids', []) or []
+ vote_id = context['active_ids'][0]
vote_pool = self.pool.get('idea.vote')
idea_pool = self.pool.get('idea.idea')
comment_pool = self.pool.get('idea.comment')
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index aec0d877c18..5eea9a13d4a 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -53,16 +53,51 @@
+
+
+
+
+
+ lunch.order.list.select
+ lunch.order
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lunch Orders
lunch.order
tree,form
+
+ {"search_default_Today":1}
tree
+
-
-
+
+
+
+
+ lunch.cashmove.list.select
+ lunch.cashmove
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
CashMove
lunch.cashmove
+
+ {"search_default_Today":1}
-
-
+
+
@@ -95,8 +95,8 @@
-
-
+
+
diff --git a/addons/point_of_sale/report/pos_invoice.py b/addons/point_of_sale/report/pos_invoice.py
index ee905ed74bf..eb59548758c 100644
--- a/addons/point_of_sale/report/pos_invoice.py
+++ b/addons/point_of_sale/report/pos_invoice.py
@@ -35,19 +35,19 @@ class pos_invoice(report_sxw.rml_parse):
})
- def set_context(self, objects, data, ids, report_type=None):
- super(pos_invoice, self).set_context(objects, data, ids, report_type)
+ def set_context(self, order, data, ids, report_type=None):
+ super(pos_invoice, self).set_context(order, data, ids, report_type)
iids = []
nids = []
- for order in objects:
- order.write({'nb_print': order.nb_print + 1})
- if order.invoice_id and order.invoice_id not in iids:
- if not order.invoice_id:
- raise osv.except_osv(_('Error !'), _('Please create an invoice for this sale.'))
- iids.append(order.invoice_id)
- nids.append(order.invoice_id.id)
+ order.write({'nb_print': order.nb_print + 1})
+
+ if order.invoice_id and order.invoice_id not in iids:
+ if not order.invoice_id:
+ raise osv.except_osv(_('Error !'), _('Please create an invoice for this sale.'))
+ iids.append(order.invoice_id)
+ nids.append(order.invoice_id.id)
self.cr.commit()
data['ids'] = nids
self.datas = data
diff --git a/addons/point_of_sale/report/report_pos_order.py b/addons/point_of_sale/report/report_pos_order.py
index 082ff3f434e..42b2f3e9efb 100644
--- a/addons/point_of_sale/report/report_pos_order.py
+++ b/addons/point_of_sale/report/report_pos_order.py
@@ -41,13 +41,20 @@ class report_pos_order(osv.osv):
('advance','Advance'),
('paid', 'Paid'), ('done', 'Done'), ('invoiced', 'Invoiced'), ('cancel', 'Cancel')],
'State'),
+ 'state_2': fields.function([('to_verify', 'To Verify'), ('accepted', 'Accepted'),
+ ('refused', 'Refused')], string='State'),
'user_id':fields.many2one('res.users', 'Salesman', readonly=True),
'price_total':fields.float('Total Price', readonly=True),
+ 'total_discount':fields.float('Total Discount', readonly=True),
+ 'average_price': fields.float('Average Price', readonly=True,group_operator="avg"),
'shop_id':fields.many2one('sale.shop', 'Shop', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
'nbr':fields.integer('# of Lines', readonly=True),
'product_qty':fields.float('# of Qty', readonly=True),
'journal_id': fields.many2one('account.journal', 'Journal'),
+ 'statement_journal_id': fields.many2one('account.journal','Cash Register'),
+ 'delay_validation': fields.integer('Delay Validation'),
+ 'delay_payment': fields.integer('Delay Payment'),
}
_order = 'date desc'
def init(self, cr):
@@ -63,26 +70,32 @@ class report_pos_order(osv.osv):
to_char(po.date_order, 'YYYY') as year,
to_char(po.date_order, 'MM') as month,
to_char(po.date_order, 'YYYY-MM-DD') as day,
+ (date(po.date_order)-date(po.date_validation)) as delay_validation,
+ (date(po.date_order)-date(po.date_payment)) as delay_payment,
po.partner_id as partner_id,
po.state as state,
+ po.state_2 as state_2,
po.user_id as user_id,
po.shop_id as shop_id,
po.company_id as company_id,
- po.sale_journal as journal_id
+ po.sale_journal as journal_id,
+ aj.id as statement_journal_id
from
- pos_order as po,
+ pos_order as po,account_bank_statement_line absl,account_journal as aj,
( select pl.id as id,
pl.product_id as product_id,
pl.qty as product_qty,
sum(pl.qty * pl.price_unit)- sum(pl.qty * pl.price_ded) as price_total,
+ sum(pl.qty * pl.price_ded) as total_discount,
+ ((sum(pl.qty * pl.price_unit)-sum(pl.qty * pl.price_ded))/sum(pl.qty)*count(pl.qty))::decimal(16,2) as average_price,
pl.order_id
from
pos_order_line as pl
left join product_template pt on (pt.id=pl.product_id)
group by
pl.id,pl.order_id, pl.qty,pl.product_id) el
- where po.id = el.order_id
+ where po.id = el.order_id and absl.pos_statement_id = po.id and aj.name = absl.journal_id
)
""")
diff --git a/addons/point_of_sale/report/report_pos_order_view.xml b/addons/point_of_sale/report/report_pos_order_view.xml
index 3efe9548c70..401ce6f8720 100644
--- a/addons/point_of_sale/report/report_pos_order_view.xml
+++ b/addons/point_of_sale/report/report_pos_order_view.xml
@@ -7,7 +7,7 @@
tree
-
+
@@ -18,10 +18,15 @@
+
+
+
+
+
@@ -45,6 +50,7 @@
separator="1"
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
help="POS ordered created last 7 days"/>
+
-
+
+
-
@@ -73,14 +79,15 @@
-
+
+
+
+
+
+
-
-
-
-
diff --git a/addons/point_of_sale/statement_view.xml b/addons/point_of_sale/statement_view.xml
index 65b5fb419d6..cb9a7a9ce03 100644
--- a/addons/point_of_sale/statement_view.xml
+++ b/addons/point_of_sale/statement_view.xml
@@ -34,7 +34,7 @@
-
+
@@ -109,10 +109,10 @@
-
-
-
-
+
+
+
+
@@ -172,10 +172,10 @@
-
-
-
-
+
+
+
+
@@ -301,10 +301,11 @@
-
-
-
-
+
+
+
+
+
diff --git a/addons/product_manufacturer/product_manufacturer.py b/addons/product_manufacturer/product_manufacturer.py
index d77ab518efe..78e951bf448 100644
--- a/addons/product_manufacturer/product_manufacturer.py
+++ b/addons/product_manufacturer/product_manufacturer.py
@@ -1,5 +1,5 @@
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL ().
#
@@ -14,7 +14,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -39,7 +39,7 @@ class res_partner_manufacturer(osv.osv):
'product_id': fields.many2one('product.product', 'Product', ondelete='cascade'),
}
_defaults = {
- 'authorized': lambda *a: True,
+ 'authorized': True,
}
res_partner_manufacturer()
diff --git a/addons/product_margin/product_margin.py b/addons/product_margin/product_margin.py
index b70733ee992..b5421d3798c 100644
--- a/addons/product_margin/product_margin.py
+++ b/addons/product_margin/product_margin.py
@@ -42,7 +42,7 @@ class product_product(osv.osv):
invoice_types=()
states=()
if invoice_state=='paid':
- states=('paid')
+ states=('paid',)
elif invoice_state=='open_paid':
states=('open','paid')
elif invoice_state=='draft_open_paid':
diff --git a/addons/product_visible_discount/product.py b/addons/product_visible_discount/product.py
index e81dac8668e..53c6446c57e 100644
--- a/addons/product_visible_discount/product.py
+++ b/addons/product_visible_discount/product.py
@@ -46,6 +46,25 @@ class sale_order_line(osv.osv):
uom=False, qty_uos=0, uos=False, name='', partner_id=False,
lang=False, update_tax=True,date_order=False,packaging=False,fiscal_position=False, flag=False):
+ def get_real_price(res_dict, product_id, pricelist):
+ item_obj = self.pool.get('product.pricelist.item')
+ price_type_obj = self.pool.get('product.price.type')
+ product_obj = self.pool.get('product.product')
+ template_obj = self.pool.get('product.template')
+ field_name = 'list_price'
+
+ if res_dict.get('item_id',False) and res_dict['item_id'].get(pricelist,False):
+ item = res_dict['item_id'].get(pricelist,False)
+ item_base = item_obj.read(cr, uid, [item], ['base'])[0]['base']
+ if item_base > 0:
+ field_name = price_type_obj.browse(cr, uid, item_base).field
+
+ product_tmpl_id = product_obj.browse(cr, uid, product_id, context).product_tmpl_id.id
+
+ product_read = template_obj.read(cr, uid, product_tmpl_id, [field_name], context)
+ return product_read[field_name]
+
+
res=super(sale_order_line, self).product_id_change(cr, uid, ids, pricelist, product, qty,
uom, qty_uos, uos, name, partner_id,
lang, update_tax,date_order,fiscal_position=fiscal_position,flag=flag)
@@ -68,15 +87,16 @@ class sale_order_line(osv.osv):
# product_read = self.pool.get('product.template').read(cr, uid, product_tmpl_id, [field_name], context)
# list_price = product_read[field_name]
list_price = pricelist_obj.price_get(cr, uid, [pricelist],
- product.id, qty or 1.0, partner_id, {'uom': uom,'date': date_order })[pricelist]
+ product.id, qty or 1.0, partner_id, {'uom': uom,'date': date_order })
- pricelists=pricelist_obj.read(cr,uid,[pricelist],['visible_discount'])
+ pricelists = pricelist_obj.read(cr,uid,[pricelist],['visible_discount'])
old_uom = product.uos_id or product.uom_id
- new_list_price = product_uom_obj._compute_price(cr,
- uid, old_uom.id, list_price, uom)
- if(len(pricelists)>0 and pricelists[0]['visible_discount'] and list_price != 0):
- discount=(new_list_price-price) / new_list_price * 100
+# new_list_price = product_uom_obj._compute_price(cr,
+# uid, old_uom.id, list_price, uom)
+ new_list_price = get_real_price(list_price, product.id, pricelist)
+ if(len(pricelists)>0 and pricelists[0]['visible_discount'] and list_price[pricelist] != 0):
+ discount = (new_list_price - price) / new_list_price * 100
result['price_unit'] = new_list_price
result['discount'] = discount
else:
diff --git a/addons/project_long_term/project_long_term_wizard.xml b/addons/project_long_term/project_long_term_wizard.xml
index fa546b9e86f..ea43762653c 100644
--- a/addons/project_long_term/project_long_term_wizard.xml
+++ b/addons/project_long_term/project_long_term_wizard.xml
@@ -6,7 +6,7 @@
-
+
-
+
+
+
+
+
+
+
diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml
index 478bb4a4f67..695f9b00895 100644
--- a/addons/subscription/subscription_view.xml
+++ b/addons/subscription/subscription_view.xml
@@ -152,6 +152,9 @@
form
-
+
+
+