@@ -171,13 +171,14 @@
- [[ repeatIn(voucher.move_ids,'move_ids') ]] [[ (not move_ids) and removeParentNode('blockTable') ]]
+ [[ repeatIn(voucher.move_ids,'move_ids') ]]
|
[[ (move_ids.partner_id and move_ids.partner_id.name) or 'Account']] :
[[ move_ids.account_id.name ]]
[[ move_ids.name ]] - [[ get_ref(voucher.id,move_ids) ]]
+
|
[[ move_ids.debit ]]
diff --git a/addons/account_voucher/report/rml_parse.py b/addons/account_voucher/report/rml_parse.py
old mode 100644
new mode 100755
diff --git a/addons/account_voucher/voucher.py b/addons/account_voucher/voucher.py
index c3cfd7c9d73..7493f24c18a 100755
--- a/addons/account_voucher/voucher.py
+++ b/addons/account_voucher/voucher.py
@@ -213,7 +213,7 @@ class account_voucher(osv.osv):
for il in iml:
if il['account_analytic_id']:
- if inv.type in ('pay_voucher', 'rec_voucher','cont_voucher','bank_pay_voucher','bank_rec_voucher','journal_sale_voucher','journal_pur_voucher'):
+ if inv.type in ('pay_voucher', 'rec_voucher','cont_voucher','bank_pay_voucher','bank_rec_voucher','journal_sale_vou','journal_pur_voucher'):
ref = inv.reference
else:
ref = self._convert_ref(cr, uid, inv.number)
@@ -243,7 +243,7 @@ class account_voucher(osv.osv):
diff_currency_p = inv.currency_id.id <> company_currency
total = 0
- if inv.type in ('pay_voucher', 'journal_voucher', 'rec_voucher','cont_voucher','bank_pay_voucher','bank_rec_voucher','journal_sale_voucher','journal_pur_voucher'):
+ if inv.type in ('pay_voucher', 'journal_voucher', 'rec_voucher','cont_voucher','bank_pay_voucher','bank_rec_voucher','journal_sale_vou','journal_pur_voucher'):
ref = inv.reference
else:
ref = self._convert_ref(cr, uid, inv.number)
@@ -508,12 +508,11 @@ class VoucherLine(osv.osv):
res.append(self.move_line_get_item(cr, uid, line, context))
return res
- def onchange_partner(self, cr, uid, ids, partner_id, ttype,type1):
+ def onchange_partner(self, cr, uid, ids, partner_id, ttype ,type1):
if not partner_id:
return {'value' : {'account_id' : False, 'type' : False ,'amount':False}}
obj = self.pool.get('res.partner')
account_id = False
-
if type1 in ('rec_voucher','bank_rec_voucher', 'journal_voucher'):
account_id = obj.browse(cr, uid, partner_id).property_account_receivable
balance = obj.browse(cr,uid,partner_id).credit
diff --git a/addons/account_voucher/voucher_view.xml b/addons/account_voucher/voucher_view.xml
index b6f42083a5c..11858390e97 100755
--- a/addons/account_voucher/voucher_view.xml
+++ b/addons/account_voucher/voucher_view.xml
@@ -231,8 +231,8 @@
form
form,tree
- [('type','=','journal_sale_voucher')]
- {'type':'journal_sale_voucher'}
+ [('type','=','journal_sale_vou')]
+ {'type':'journal_sale_vou'}
diff --git a/addons/account_voucher/wizard/open_voucher.py b/addons/account_voucher/wizard/open_voucher.py
index d33e283aacc..7635e7480e2 100644
--- a/addons/account_voucher/wizard/open_voucher.py
+++ b/addons/account_voucher/wizard/open_voucher.py
@@ -36,7 +36,7 @@ _types = {
'rec_voucher':'Cash Receipt Voucher',
'bank_rec_voucher':'Bank Receipt Voucher',
'cont_voucher':'Contra Voucher',
- 'journal_sale_voucher':'Journal Sale Voucher',
+ 'journal_sale_vou':'Journal Sale Voucher',
'journal_pur_voucher':'Journal Purchase Voucher'
}
_states = {
@@ -53,7 +53,7 @@ _voucher_fields = {
('rec_voucher','Cash Receipt Voucher'),
('bank_rec_voucher','Bank Receipt Voucher'),
('cont_voucher','Contra Voucher'),
- ('journal_sale_voucher','Journal Sale Voucher'),
+ ('journal_sale_vou','Journal Sale Voucher'),
('journal_pur_voucher','Journal Purchase Voucher')], 'required':True},
'state': {'string':'State', 'type':'selection', 'selection':[
('draft','Draft'),
diff --git a/addons/auction/report/auction_artists.py b/addons/auction/report/auction_artists.py
index d7ea995e2a7..9bf5b7cee9f 100644
--- a/addons/auction/report/auction_artists.py
+++ b/addons/auction/report/auction_artists.py
@@ -27,7 +27,7 @@ from report import report_sxw
class auction_artists(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_artists, self).__init__(cr, uid, name, context)
+ super(auction_artists, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/auction_bids.py b/addons/auction/report/auction_bids.py
index 78a55fbd296..cc8f694a5f0 100644
--- a/addons/auction/report/auction_bids.py
+++ b/addons/auction/report/auction_bids.py
@@ -27,7 +27,7 @@ from report import report_sxw
class auction_bids(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_bids, self).__init__(cr, uid, name, context)
+ super(auction_bids, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/auction/report/auction_buyer_result.py b/addons/auction/report/auction_buyer_result.py
index 05064531dd4..bf91e2ab1b8 100644
--- a/addons/auction/report/auction_buyer_result.py
+++ b/addons/auction/report/auction_buyer_result.py
@@ -27,7 +27,7 @@ from report import report_sxw
class auction_buyer_result(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_buyer_result, self).__init__(cr, uid, name, context)
+ super(auction_buyer_result, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/auction_catelog.py b/addons/auction/report/auction_catelog.py
index 9e3c5821d78..b4b51ca4670 100644
--- a/addons/auction/report/auction_catelog.py
+++ b/addons/auction/report/auction_catelog.py
@@ -26,7 +26,7 @@ from report import report_sxw
class auction_catelog(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_catelog, self).__init__(cr, uid, name, context)
+ super(auction_catelog, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/auction_objects.py b/addons/auction/report/auction_objects.py
index 641fae73c1d..01f5266d7f8 100644
--- a/addons/auction/report/auction_objects.py
+++ b/addons/auction/report/auction_objects.py
@@ -25,7 +25,7 @@ from report import report_sxw
class auction_objects(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_objects, self).__init__(cr, uid, name, context)
+ super(auction_objects, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
#'lines': self.lines
diff --git a/addons/auction/report/auction_result.py b/addons/auction/report/auction_result.py
index 09ed2244c5a..52b286307fc 100644
--- a/addons/auction/report/auction_result.py
+++ b/addons/auction/report/auction_result.py
@@ -27,7 +27,7 @@ from report import report_sxw
class auction_result(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_result, self).__init__(cr, uid, name, context)
+ super(auction_result, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/auction_total_rml.py b/addons/auction/report/auction_total_rml.py
index 365a492bf84..15f61bc103b 100644
--- a/addons/auction/report/auction_total_rml.py
+++ b/addons/auction/report/auction_total_rml.py
@@ -28,7 +28,7 @@ from report import report_sxw
class auction_total_rml(report_sxw.rml_parse):
total_obj=[]
def __init__(self, cr, uid, name, context):
- super(auction_total_rml, self).__init__(cr, uid, name, context)
+ super(auction_total_rml, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'sum_taxes':self.sum_taxes,
diff --git a/addons/auction/report/bids_lots.py b/addons/auction/report/bids_lots.py
index 440dd346c07..8f88c25dccc 100644
--- a/addons/auction/report/bids_lots.py
+++ b/addons/auction/report/bids_lots.py
@@ -27,7 +27,7 @@ from report import report_sxw
class bids_lots(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(bids_lots, self).__init__(cr, uid, name, context)
+ super(bids_lots, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/auction/report/bids_phones_details.py b/addons/auction/report/bids_phones_details.py
index f4b376ad549..9207a28899c 100644
--- a/addons/auction/report/bids_phones_details.py
+++ b/addons/auction/report/bids_phones_details.py
@@ -27,7 +27,7 @@ from report import report_sxw
class bids_phones_details(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(bids_phones_details, self).__init__(cr, uid, name, context)
+ super(bids_phones_details, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/auction/report/buyer_form_report.py b/addons/auction/report/buyer_form_report.py
index 6393bd098e7..9db5a8fccdf 100644
--- a/addons/auction/report/buyer_form_report.py
+++ b/addons/auction/report/buyer_form_report.py
@@ -29,7 +29,7 @@ class buyer_form_report(report_sxw.rml_parse):
count=0
c=0
def __init__(self, cr, uid, name, context):
- super(buyer_form_report, self).__init__(cr, uid, name, context)
+ super(buyer_form_report, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'sum_taxes': self.sum_taxes,
diff --git a/addons/auction/report/buyer_list.py b/addons/auction/report/buyer_list.py
index 77945bc7b3f..171c81a09f9 100644
--- a/addons/auction/report/buyer_list.py
+++ b/addons/auction/report/buyer_list.py
@@ -32,7 +32,7 @@ class buyer_list(report_sxw.rml_parse):
sum_buyer_price_val=0.0
sum_lot_val=0.0
def __init__(self, cr, uid, name, context):
- super(buyer_list, self).__init__(cr, uid, name, context)
+ super(buyer_list, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'lines_lots_from_auction' : self.lines_lots_from_auction,
diff --git a/addons/auction/report/catelogwithpictures.py b/addons/auction/report/catelogwithpictures.py
index 55cc804a827..4624fef6a2a 100644
--- a/addons/auction/report/catelogwithpictures.py
+++ b/addons/auction/report/catelogwithpictures.py
@@ -25,7 +25,7 @@ from report import report_sxw
class catelogwithpictures(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(catelogwithpictures, self).__init__(cr, uid, name, context)
+ super(catelogwithpictures, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/deposit_seller.py b/addons/auction/report/deposit_seller.py
index a2661242104..33e53bd0954 100644
--- a/addons/auction/report/deposit_seller.py
+++ b/addons/auction/report/deposit_seller.py
@@ -27,7 +27,7 @@ from report import report_sxw
class deposit_seller(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(deposit_seller, self).__init__(cr, uid, name, context)
+ super(deposit_seller, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/lots_list.py b/addons/auction/report/lots_list.py
index 971bc81c418..1147b835250 100644
--- a/addons/auction/report/lots_list.py
+++ b/addons/auction/report/lots_list.py
@@ -25,7 +25,7 @@ from report import report_sxw
class lots_list(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(lots_list, self).__init__(cr, uid, name, context)
+ super(lots_list, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'bid_line' : self.bid_line
diff --git a/addons/auction/report/lots_list_inventory.py b/addons/auction/report/lots_list_inventory.py
index da84c5a0dad..ceef9b62696 100644
--- a/addons/auction/report/lots_list_inventory.py
+++ b/addons/auction/report/lots_list_inventory.py
@@ -25,7 +25,7 @@ from report import report_sxw
class lots_list_inventory(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(lots_list_inventory, self).__init__(cr, uid, name, context)
+ super(lots_list_inventory, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'bid_line' : self.bid_line
diff --git a/addons/auction/report/lots_list_landscape.py b/addons/auction/report/lots_list_landscape.py
index 5d6c85b309e..8ce70784923 100644
--- a/addons/auction/report/lots_list_landscape.py
+++ b/addons/auction/report/lots_list_landscape.py
@@ -25,7 +25,7 @@ from report import report_sxw
class lots_list_llandscape(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(lots_list_landscape, self).__init__(cr, uid, name, context)
+ super(lots_list_landscape, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
diff --git a/addons/auction/report/report_lot_bar_code.py b/addons/auction/report/report_lot_bar_code.py
index 614385fe512..681dd3a5439 100644
--- a/addons/auction/report/report_lot_bar_code.py
+++ b/addons/auction/report/report_lot_bar_code.py
@@ -25,7 +25,7 @@ from report import report_sxw
class auction_code_produit(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(auction_code_produit, self).__init__(cr, uid, name, context)
+ super(auction_code_produit, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/auction/report/seller_form_report.py b/addons/auction/report/seller_form_report.py
index da0299981b6..a9f191b4811 100644
--- a/addons/auction/report/seller_form_report.py
+++ b/addons/auction/report/seller_form_report.py
@@ -27,7 +27,7 @@ from osv import osv
class seller_form_report(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(seller_form_report, self).__init__(cr, uid, name, context)
+ super(seller_form_report, self).__init__(cr, uid, name, context=context)
lot=self.pool.get('auction.lots').browse(cr,uid,uid)
#address=lot.bord_vnd_id.address_get(self.cr,self.uid,[partner.id])
# partner=lot.bord_vnd_id.partner_id
diff --git a/addons/base_report_creator/base_report_creator.py b/addons/base_report_creator/base_report_creator.py
index 9834c0d5284..1e65daedea0 100644
--- a/addons/base_report_creator/base_report_creator.py
+++ b/addons/base_report_creator/base_report_creator.py
@@ -258,8 +258,8 @@ class report_creator(osv.osv):
ret_str = ret_str[0:len(ret_str)-3]
if ret_str.endswith('or'):
ret_str = ret_str[0:len(ret_str)-2]
- ret_str = ret_str.strip()
- return ret_str
+ ret_str = ret_str.strip()
+ return ret_str % {'uid' : uid}
def _id_get(self, cr, uid, id, context):
# return 'min(sale_order_line.id)'
diff --git a/addons/base_report_creator/base_report_creator_view.xml b/addons/base_report_creator/base_report_creator_view.xml
index ecb65dd2f5b..1a1a8c17482 100644
--- a/addons/base_report_creator/base_report_creator_view.xml
+++ b/addons/base_report_creator/base_report_creator_view.xml
@@ -86,6 +86,8 @@
+
+
@@ -97,6 +99,7 @@
+ Custom Report
base_report_creator.report
form
tree,form
diff --git a/addons/base_report_creator/wizard/wiz_set_filter_fields.py b/addons/base_report_creator/wizard/wiz_set_filter_fields.py
index a39954e0636..a8cd20bc4a2 100644
--- a/addons/base_report_creator/wizard/wiz_set_filter_fields.py
+++ b/addons/base_report_creator/wizard/wiz_set_filter_fields.py
@@ -128,6 +128,10 @@ def _set_filter_value(self, cr, uid, data, context):
value_data = 'true'
else:
value_data = 'false'
+
+ if field_type in ['float','integer']:
+ value_data = value_data or 0
+
if field_type == 'many2many' and value_data and len(value_data):
fields_list = set_field_operator(self,table_name+"."+field_data['name'],field_data['ttype'],form_data['operator'],value_data[0][2])
else:
@@ -135,7 +139,7 @@ def _set_filter_value(self, cr, uid, data, context):
if fields_list:
create_dict = {
'name':model_name + "/" +field_data['field_description'] +" "+ mapping_fields[form_data['operator']] + " " + str(fields_list[2]) + " ",
- 'expression':' '.join(fields_list),
+ 'expression':' '.join(map(str,fields_list)),
'report_id':data['id'],
'condition' : form_data['condition']
}
diff --git a/addons/document/document.py b/addons/document/document.py
index 10b49ecabe9..3ce6a9d700f 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -530,17 +530,21 @@ class document_file(osv.osv):
result[id] = base64.encodestring(value)
except:
result[id]=''
-
- if context.get('bin_size', False):
- result[id] = tools.human_size(len(result[id]))
-
+# if context.get('bin_size', False):
+# result[id] = tools.human_size(result[id])
return result
#
# This code can be improved
#
- def _data_set(self, cr, obj, id, name, value, uid=None, context={}):
+ def _data_set(self, cr, uid, id, name, value, args=None, context={}):
if not value:
+ filename = self.browse(cr, uid, id, context).store_fname
+ try:
+ os.unlink(os.path.join(self._get_filestore(cr), filename))
+ except:
+ pass
+ cr.execute('update ir_attachment set store_fname=NULL WHERE id=%s', (id,) )
return True
#if (not context) or context.get('store_method','fs')=='fs':
try:
diff --git a/addons/document_ics/document.py b/addons/document_ics/document.py
index d2a68937821..bf32009f404 100644
--- a/addons/document_ics/document.py
+++ b/addons/document_ics/document.py
@@ -127,6 +127,7 @@ class document_directory_content(osv.osv):
event.add('last-modified').value = ics_datetime(perm[0]['write_date'][:19])
for field in node.content.ics_field_ids:
value = getattr(obj, field.field_id.name)
+ value = value and tools.ustr(value)
if (not value) and field.name=='uid':
value = 'OpenERP-%s_%s@%s' % (node.content.ics_object_id.model, str(obj.id), cr.dbname,)
obj_class.write(cr, uid, [obj.id], {field.field_id.name: value})
@@ -145,7 +146,7 @@ class document_directory_content(osv.osv):
else:
value = ics_datetime(value)
event.add(field.name).value = value
- s= StringIO.StringIO(cal.serialize().encode('utf8'))
+ s= StringIO.StringIO(cal.serialize())
s.name = node
cr.commit()
return s
diff --git a/addons/hr_attendance/report/attendance_errors.py b/addons/hr_attendance/report/attendance_errors.py
index 6f69975c0f1..5969b7a5859 100644
--- a/addons/hr_attendance/report/attendance_errors.py
+++ b/addons/hr_attendance/report/attendance_errors.py
@@ -27,7 +27,7 @@ import datetime
class attendance_print(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(attendance_print, self).__init__(cr, uid, name, context)
+ super(attendance_print, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'lst': self._lst,
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index 9419fd3c3e8..dd9c4e44aba 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -138,7 +138,7 @@ class hr_expense_expense(osv.osv):
'account_analytic_id': l.analytic_account.id,
}))
if not exp.employee_id.address_id:
- raise osv.except_osv(_('Error !'), _('The employee must have a contact address'))
+ raise osv.except_osv(_('Error !'), _('The employee must have a working address'))
acc = exp.employee_id.address_id.partner_id.property_account_payable.id
payment_term_id = exp.employee_id.address_id.partner_id.property_payment_term.id
inv = {
diff --git a/addons/hr_expense/report/expense.py b/addons/hr_expense/report/expense.py
index 096ce4ea645..ceb8c3a543f 100644
--- a/addons/hr_expense/report/expense.py
+++ b/addons/hr_expense/report/expense.py
@@ -25,7 +25,7 @@ import datetime
class expense(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(expense, self).__init__(cr, uid, name, context)
+ super(expense, self).__init__(cr, uid, name, context=context)
self.localcontext.update( {
'time': time,
})
diff --git a/addons/hr_timesheet_invoice/report/account_analytic_profit.py b/addons/hr_timesheet_invoice/report/account_analytic_profit.py
index 6b4370d38e7..ec7f6cd26bf 100644
--- a/addons/hr_timesheet_invoice/report/account_analytic_profit.py
+++ b/addons/hr_timesheet_invoice/report/account_analytic_profit.py
@@ -24,7 +24,7 @@ import pooler
class account_analytic_profit(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(account_analytic_profit, self).__init__(cr, uid, name, context)
+ super(account_analytic_profit, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'lines': self._lines,
'user_ids': self._user_ids,
diff --git a/addons/hr_timesheet_invoice/report/cost_ledger.py b/addons/hr_timesheet_invoice/report/cost_ledger.py
index b60e5bf6cef..6541ac494af 100644
--- a/addons/hr_timesheet_invoice/report/cost_ledger.py
+++ b/addons/hr_timesheet_invoice/report/cost_ledger.py
@@ -26,7 +26,7 @@ from report import report_sxw
class account_analytic_cost_ledger(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(account_analytic_cost_ledger, self).__init__(cr, uid, name, context)
+ super(account_analytic_cost_ledger, self).__init__(cr, uid, name, context=context)
self.sum_revenue={}
self.account_sum_revenue={}
self.localcontext.update( {
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 0c2ba136890..61f629af120 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -170,19 +170,26 @@ class invoice_create(wizard.interface):
pool.get('account.invoice').button_reset_taxes(cr, uid, [last_invoice], context)
mod_obj = pooler.get_pool(cr.dbname).get('ir.model.data')
- act_obj = pooler.get_pool(cr.dbname).get('ir.actions.act_window')
+ act_obj = pooler.get_pool(cr.dbname).get('ir.actions.act_window')
+
+ mod_id = mod_obj.search(cr, uid, [('name', '=', 'action_invoice_tree1')])[0]
+ res_id = mod_obj.read(cr, uid, mod_id, ['res_id'])['res_id']
+ act_win = act_obj.read(cr, uid, res_id, [])
+ act_win['domain'] = [('id','in',invoices),('type','=','out_invoice')]
+ act_win['name'] = _('Invoices')
+ return act_win
- return {
- 'domain': "[('id','in', ["+','.join(map(str,invoices))+"])]",
- 'name': _('Invoices'),
- 'view_type': 'form',
- 'view_mode': 'tree,form',
- 'res_model': 'account.invoice',
- 'view_id': False,
- 'context': "{'type':'out_invoice'}",
- 'type': 'ir.actions.act_window',
- 'search_view_id': res['res_id']
- }
+# return {
+# 'domain': "[('id','in', ["+','.join(map(str,invoices))+"])]",
+# 'name': _('Invoices'),
+# 'view_type': 'form',
+# 'view_mode': 'tree,form',
+# 'res_model': 'account.invoice',
+# 'view_id': False,
+# 'context': "{'type':'out_invoice'}",
+# 'type': 'ir.actions.act_window',
+# 'search_view_id': res['res_id']
+# }
_create_form = """
+
+
+ res.partner_bank.form
+ res.partner.bank
+ form
+
+
+
+
+
+
+
+
+
+ res.partner_partner_bank.form
+ res.partner
+ form
+
+
+
+
+
+
+
+
+
diff --git a/addons/l10n_ch/company.py b/addons/l10n_ch/company.py
index 84aa2602673..4d9a1069771 100755
--- a/addons/l10n_ch/company.py
+++ b/addons/l10n_ch/company.py
@@ -34,17 +34,17 @@
import netsvc
from osv import fields, osv
class res_company(osv.osv):
- """override company in order to add bvr vertical and
- Horizontal print delta"""
- _inherit = "res.company"
- _columns = {
- ### horiz. delta in mm 1.2 will print the bvz 1.2mm lefter
- 'bvr_delta_horz': fields.float('BVR Horz. Delta (mm)',
- help='horiz. delta in mm 1.2 will print the bvz 1.2mm lefter'),
- ### vert. delta in mm 1.2 will print the bvz 1.2mm lefter
- 'bvr_delta_vert': fields.float('BVR Vert. Delta (mm)',
- help='vert. delta in mm 1.2 will print the bvz 1.2mm lefter'),
- }
+ """override company in order to add bvr vertical and
+ Horizontal print delta"""
+ _inherit = "res.company"
+ _columns = {
+ ### horiz. delta in mm 1.2 will print the bvz 1.2mm lefter
+ 'bvr_delta_horz': fields.float('BVR Horz. Delta (mm)',
+ help='horiz. delta in mm 1.2 will print the bvz 1.2mm lefter'),
+ ### vert. delta in mm 1.2 will print the bvz 1.2mm lefter
+ 'bvr_delta_vert': fields.float('BVR Vert. Delta (mm)',
+ help='vert. delta in mm 1.2 will print the bvz 1.2mm lefter'),
+ }
res_company()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/dta.py b/addons/l10n_ch/dta.py
index 1226433d8d9..c5f4dd6d031 100755
--- a/addons/l10n_ch/dta.py
+++ b/addons/l10n_ch/dta.py
@@ -34,62 +34,62 @@ import time
from osv import osv,fields
class account_dta(osv.osv):
- """class that implements bank DTA File format,
- used to transfert bulk batch payment instruction to a bank"""
- _name = "account.dta"
- _description = "DTA History"
- _columns = {
- ### name of the file
- 'name': fields.binary('DTA file', readonly=True),
- ### list of dta line linked to the dta order
- 'dta_line_ids': fields.one2many('account.dta.line','dta_id','DTA lines', readonly=True),
- ## textual notes
- 'note': fields.text('Creation log', readonly=True,
- help="display the problem during dta generation"),
- ### bank how will execute DTA order
- 'bank': fields.many2one('res.partner.bank','Bank', readonly=True,select=True,
- help="bank how will execute DTA order"),
- ### date of DTA order generation
- 'date': fields.date('Creation Date', readonly=True,select=True,
- help="date of DTA order generation"),
- ### user how generate the DTA order
- 'user_id': fields.many2one('res.users','User', readonly=True, select=True),
- }
+ """class that implements bank DTA File format,
+ used to transfert bulk batch payment instruction to a bank"""
+ _name = "account.dta"
+ _description = "DTA History"
+ _columns = {
+ ### name of the file
+ 'name': fields.binary('DTA file', readonly=True),
+ ### list of dta line linked to the dta order
+ 'dta_line_ids': fields.one2many('account.dta.line','dta_id','DTA lines', readonly=True),
+ ## textual notes
+ 'note': fields.text('Creation log', readonly=True,
+ help="display the problem during dta generation"),
+ ### bank how will execute DTA order
+ 'bank': fields.many2one('res.partner.bank','Bank', readonly=True,select=True,
+ help="bank how will execute DTA order"),
+ ### date of DTA order generation
+ 'date': fields.date('Creation Date', readonly=True,select=True,
+ help="date of DTA order generation"),
+ ### user how generate the DTA order
+ 'user_id': fields.many2one('res.users','User', readonly=True, select=True),
+ }
account_dta()
class account_dta_line(osv.osv):
- """Class that represent a DTA order line,
- each lin corressponds to a payment instruction"""
- _name = "account.dta.line"
- _description = "DTA line"
- _columns = {
- ### name of the line
- 'name' : fields.many2one('account.invoice','Invoice', required=True, size=256),
- ### partner how will receive payments
- 'partner_id' : fields.many2one('res.partner','Partner',
- help="Partenr to pay"),
- ### due date of the payment
- 'due_date' : fields.date('Due date'),
- ### date of the supplier invoice to pay
- 'invoice_date' : fields.date('Invoice date'),
- ### cash discount date
- 'cashdisc_date' : fields.date('Cash Discount date'),
- ### amount effectively paied on this line
- 'amount_to_pay' : fields.float('Amount to pay',
- help="amount effectively paid"),
- ### amount that was on the supplier invoice
- 'amount_invoice': fields.float('Invoiced Amount',
- help="amount to pay base on the supplier invoice"),
- ### Cash discount amount
- 'amount_cashdisc': fields.float('Cash Discount Amount'),
- ### Linke to the main dta order
- 'dta_id': fields.many2one('account.dta','Associated DTA', required=True, ondelete='cascade'),
- ### state of the invoice Drat, Cancel, Done
- 'state' : fields.selection([('draft','Draft'),('cancel','Error'),('done','Paid')],'State')
- }
- _defaults = {
- 'state' : lambda *a :'draft',
- }
+ """Class that represent a DTA order line,
+ each lin corressponds to a payment instruction"""
+ _name = "account.dta.line"
+ _description = "DTA line"
+ _columns = {
+ ### name of the line
+ 'name' : fields.many2one('account.invoice','Invoice', required=True, size=256),
+ ### partner how will receive payments
+ 'partner_id' : fields.many2one('res.partner','Partner',
+ help="Partenr to pay"),
+ ### due date of the payment
+ 'due_date' : fields.date('Due date'),
+ ### date of the supplier invoice to pay
+ 'invoice_date' : fields.date('Invoice date'),
+ ### cash discount date
+ 'cashdisc_date' : fields.date('Cash Discount date'),
+ ### amount effectively paied on this line
+ 'amount_to_pay' : fields.float('Amount to pay',
+ help="amount effectively paid"),
+ ### amount that was on the supplier invoice
+ 'amount_invoice': fields.float('Invoiced Amount',
+ help="amount to pay base on the supplier invoice"),
+ ### Cash discount amount
+ 'amount_cashdisc': fields.float('Cash Discount Amount'),
+ ### Linke to the main dta order
+ 'dta_id': fields.many2one('account.dta','Associated DTA', required=True, ondelete='cascade'),
+ ### state of the invoice Drat, Cancel, Done
+ 'state' : fields.selection([('draft','Draft'),('cancel','Error'),('done','Paid')],'State')
+ }
+ _defaults = {
+ 'state' : lambda *a :'draft',
+ }
account_dta_line()
diff --git a/addons/l10n_ch/invoice.py b/addons/l10n_ch/invoice.py
index cebdf5b23f3..94173609a6f 100755
--- a/addons/l10n_ch/invoice.py
+++ b/addons/l10n_ch/invoice.py
@@ -37,176 +37,176 @@ from mx import DateTime
class account_invoice(osv.osv):
- """Inherit account.invoice in order to add bvr
- printing functionnalites. BVR is a Swiss payment vector"""
- _inherit = "account.invoice"
-
- ## @param self The object pointer.
- ## @param cursor a psycopg cursor
- ## @param user res.user.id that is currently loged
- ## @parma context a standard dict
- ## @return a list of tuple (name,value)
- def _get_reference_type(self, cursor, user, context=None):
- """Function use by the function field reference_type in order to initalise available
- BVR Reference Types"""
- res = super(account_invoice, self)._get_reference_type(cursor, user,
- context=context)
- res.append(('bvr', 'BVR'))
- return res
-
- ## @param self The object pointer.
- ## @param cursor a psycopg cursor
- ## @param user res.user.id that is currently loged
- ## @parma context a standard dict
- ## @param name of the files
- ## @param args a list of diverse argument
- ## @parma context a standard dict
- ## @return a dict (invoice id,amount to pay)
- def _amount_to_pay(self, cursor, user, ids, name, args, context=None):
- '''Return the amount still to pay regarding all the payment orders'''
- if not ids:
- return {}
- res = {}
- for invoice in self.browse(cursor, user, ids, context=context):
- res[invoice.id] = 0.0
- if invoice.move_id:
- for line in invoice.move_id.line_id:
- if not line.date_maturity or \
- DateTime.strptime(line.date_maturity, '%Y-%m-%d') \
- < DateTime.now():
- res[invoice.id] += line.amount_to_pay
- return res
+ """Inherit account.invoice in order to add bvr
+ printing functionnalites. BVR is a Swiss payment vector"""
+ _inherit = "account.invoice"
+
+ ## @param self The object pointer.
+ ## @param cursor a psycopg cursor
+ ## @param user res.user.id that is currently loged
+ ## @parma context a standard dict
+ ## @return a list of tuple (name,value)
+ def _get_reference_type(self, cursor, user, context=None):
+ """Function use by the function field reference_type in order to initalise available
+ BVR Reference Types"""
+ res = super(account_invoice, self)._get_reference_type(cursor, user,
+ context=context)
+ res.append(('bvr', 'BVR'))
+ return res
+
+ ## @param self The object pointer.
+ ## @param cursor a psycopg cursor
+ ## @param user res.user.id that is currently loged
+ ## @parma context a standard dict
+ ## @param name of the files
+ ## @param args a list of diverse argument
+ ## @parma context a standard dict
+ ## @return a dict (invoice id,amount to pay)
+ def _amount_to_pay(self, cursor, user, ids, name, args, context=None):
+ '''Return the amount still to pay regarding all the payment orders'''
+ if not ids:
+ return {}
+ res = {}
+ for invoice in self.browse(cursor, user, ids, context=context):
+ res[invoice.id] = 0.0
+ if invoice.move_id:
+ for line in invoice.move_id.line_id:
+ if not line.date_maturity or \
+ DateTime.strptime(line.date_maturity, '%Y-%m-%d') \
+ < DateTime.now():
+ res[invoice.id] += line.amount_to_pay
+ return res
- _columns = {
- ### BVR reference type BVR or FREE
- 'reference_type': fields.selection(_get_reference_type,
- 'Reference Type', required=True),
- ### Partner bank link between bank and partner id
- 'partner_bank': fields.many2one('res.partner.bank', 'Bank Account',
- help='The partner bank account to pay\nKeep empty to use the default'
- ),
- ### Amount to pay
- 'amount_to_pay': fields.function(_amount_to_pay, method=True,
- type='float', string='Amount to be paid',
- help='The amount which should be paid at the current date\n' \
- 'minus the amount which is already in payment order'),
- }
-
- ## @param self The object pointer.
- ## @param cursor a psycopg cursor
- ## @param user res.user.id that is currently loged
- ## @parma ids invoices id
- ## @return a boolean True if valid False if invalid
- def _check_bvr(self, cr, uid, ids):
- """
- Function to validate a bvr reference like :
- 0100054150009>132000000000000000000000014+ 1300132412>
- The validation is based on l10n_ch
- """
- invoices = self.browse(cr,uid,ids)
- for invoice in invoices:
- if invoice.reference_type == 'bvr':
- if not invoice.reference:
- return False
- ## I need help for this bug because in this case
- # <010001000060190> 052550152684006+ 43435>
- # the reference 052550152684006 do not match modulo 10
- #
- if mod10r(invoice.reference[:-1]) != invoice.reference and \
- len(invoice.reference) == 15:
- return True
- #
- if mod10r(invoice.reference[:-1]) != invoice.reference:
- return False
- return True
- ## @param self The object pointer.
- ## @param cursor a psycopg cursor
- ## @param user res.user.id that is currently loged
- ## @parma ids invoices id
- ## @return a boolean True if valid False if invalid
- def _check_reference_type(self, cursor, user, ids):
- """Check the customer invoice reference type depending
- on the BVR reference type and the invoice partner bank type"""
- for invoice in self.browse(cursor, user, ids):
- if invoice.type in 'in_invoice':
- if invoice.partner_bank and \
- invoice.partner_bank.state in \
- ('bvrbank', 'bvrpost') and \
- invoice.reference_type != 'bvr':
- return False
- return True
+ _columns = {
+ ### BVR reference type BVR or FREE
+ 'reference_type': fields.selection(_get_reference_type,
+ 'Reference Type', required=True),
+ ### Partner bank link between bank and partner id
+ 'partner_bank': fields.many2one('res.partner.bank', 'Bank Account',
+ help='The partner bank account to pay\nKeep empty to use the default'
+ ),
+ ### Amount to pay
+ 'amount_to_pay': fields.function(_amount_to_pay, method=True,
+ type='float', string='Amount to be paid',
+ help='The amount which should be paid at the current date\n' \
+ 'minus the amount which is already in payment order'),
+ }
+
+ ## @param self The object pointer.
+ ## @param cursor a psycopg cursor
+ ## @param user res.user.id that is currently loged
+ ## @parma ids invoices id
+ ## @return a boolean True if valid False if invalid
+ def _check_bvr(self, cr, uid, ids):
+ """
+ Function to validate a bvr reference like :
+ 0100054150009>132000000000000000000000014+ 1300132412>
+ The validation is based on l10n_ch
+ """
+ invoices = self.browse(cr,uid,ids)
+ for invoice in invoices:
+ if invoice.reference_type == 'bvr':
+ if not invoice.reference:
+ return False
+ ## I need help for this bug because in this case
+ # <010001000060190> 052550152684006+ 43435>
+ # the reference 052550152684006 do not match modulo 10
+ #
+ if mod10r(invoice.reference[:-1]) != invoice.reference and \
+ len(invoice.reference) == 15:
+ return True
+ #
+ if mod10r(invoice.reference[:-1]) != invoice.reference:
+ return False
+ return True
+ ## @param self The object pointer.
+ ## @param cursor a psycopg cursor
+ ## @param user res.user.id that is currently loged
+ ## @parma ids invoices id
+ ## @return a boolean True if valid False if invalid
+ def _check_reference_type(self, cursor, user, ids):
+ """Check the customer invoice reference type depending
+ on the BVR reference type and the invoice partner bank type"""
+ for invoice in self.browse(cursor, user, ids):
+ if invoice.type in 'in_invoice':
+ if invoice.partner_bank and \
+ invoice.partner_bank.state in \
+ ('bvrbank', 'bvrpost') and \
+ invoice.reference_type != 'bvr':
+ return False
+ return True
- _constraints = [
- (_check_bvr, 'Error: Invalid Bvr Number (wrong checksum).',
- ['reference']),
- (_check_reference_type, 'Error: BVR reference is required.',
- ['reference_type']),
- ]
-
- ## @param self The object pointer.
- ## @param cr a psycopg cursor
- ## @param uid res.user.id that is currently loged
- ## @parma ids invoices id
- ## @parma type the invoice type
- ## @param partner_id the partner linked to the invoice
- ## @parma date_invoice date of the invoice
- ## @parma payment_term inoice payment term
- ## @param partner_bank_id the partner linked invoice bank
- ## @return the dict of values with the partner_bank value updated
- def onchange_partner_id(self, cr, uid, ids, type, partner_id,
- date_invoice=False, payment_term=False, partner_bank_id=False):
- """ Function that is call when the partner of the invoice is changed
- it will retriev and set the good bank partner bank"""
- res = super(account_invoice, self).onchange_partner_id(
- cr,
- uid,
- ids,
- type,
- partner_id,
- date_invoice,
- payment_term
- )
- bank_id = False
- if partner_id:
- p = self.pool.get('res.partner').browse(cr, uid, partner_id)
- if p.bank_ids:
- bank_id = p.bank_ids[0].id
+ _constraints = [
+ (_check_bvr, 'Error: Invalid Bvr Number (wrong checksum).',
+ ['reference']),
+ (_check_reference_type, 'Error: BVR reference is required.',
+ ['reference_type']),
+ ]
+
+ ## @param self The object pointer.
+ ## @param cr a psycopg cursor
+ ## @param uid res.user.id that is currently loged
+ ## @parma ids invoices id
+ ## @parma type the invoice type
+ ## @param partner_id the partner linked to the invoice
+ ## @parma date_invoice date of the invoice
+ ## @parma payment_term inoice payment term
+ ## @param partner_bank_id the partner linked invoice bank
+ ## @return the dict of values with the partner_bank value updated
+ def onchange_partner_id(self, cr, uid, ids, type, partner_id,
+ date_invoice=False, payment_term=False, partner_bank_id=False):
+ """ Function that is call when the partner of the invoice is changed
+ it will retriev and set the good bank partner bank"""
+ res = super(account_invoice, self).onchange_partner_id(
+ cr,
+ uid,
+ ids,
+ type,
+ partner_id,
+ date_invoice,
+ payment_term
+ )
+ bank_id = False
+ if partner_id:
+ p = self.pool.get('res.partner').browse(cr, uid, partner_id)
+ if p.bank_ids:
+ bank_id = p.bank_ids[0].id
- if type in ('in_invoice', 'in_refund'):
- res['value']['partner_bank'] = bank_id
+ if type in ('in_invoice', 'in_refund'):
+ res['value']['partner_bank'] = bank_id
- if partner_bank_id != bank_id:
- to_update = self.onchange_partner_bank(cr, uid, ids, bank_id)
- res['value'].update(to_update['value'])
- return res
-
- ## @param self The object pointer.
- ## @param cursor a psycopg cursor
- ## @param user res.user.id that is currently loged
- ## @parma ids invoices id
- ## @param partner_bank_id the partner linked invoice bank
- ## @return the dict of values with the reference type value updated
- def onchange_partner_bank(self, cursor, user, ids, partner_bank_id):
- """update the reference type depending of the partner bank"""
- res = {'value': {}}
- partner_bank_obj = self.pool.get('res.partner.bank')
- if partner_bank_id:
- partner_bank = partner_bank_obj.browse(cursor, user, partner_bank_id)
- if partner_bank.state in ('bvrbank', 'bvrpost'):
- res['value']['reference_type'] = 'bvr'
- return res
+ if partner_bank_id != bank_id:
+ to_update = self.onchange_partner_bank(cr, uid, ids, bank_id)
+ res['value'].update(to_update['value'])
+ return res
+
+ ## @param self The object pointer.
+ ## @param cursor a psycopg cursor
+ ## @param user res.user.id that is currently loged
+ ## @parma ids invoices id
+ ## @param partner_bank_id the partner linked invoice bank
+ ## @return the dict of values with the reference type value updated
+ def onchange_partner_bank(self, cursor, user, ids, partner_bank_id):
+ """update the reference type depending of the partner bank"""
+ res = {'value': {}}
+ partner_bank_obj = self.pool.get('res.partner.bank')
+ if partner_bank_id:
+ partner_bank = partner_bank_obj.browse(cursor, user, partner_bank_id)
+ if partner_bank.state in ('bvrbank', 'bvrpost'):
+ res['value']['reference_type'] = 'bvr'
+ return res
account_invoice()
class account_tax_code(osv.osv):
- """Inherit account tax code in order
- to add a Case code"""
- _name = 'account.tax.code'
- _inherit = "account.tax.code"
- _columns = {
- ### The case code of the taxt code
- 'code': fields.char('Case Code', size=512),
- }
+ """Inherit account tax code in order
+ to add a Case code"""
+ _name = 'account.tax.code'
+ _inherit = "account.tax.code"
+ _columns = {
+ ### The case code of the taxt code
+ 'code': fields.char('Case Code', size=512),
+ }
account_tax_code()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/partner.py b/addons/l10n_ch/partner.py
index 5b0a68c3ec8..2c244eb7fd2 100755
--- a/addons/l10n_ch/partner.py
+++ b/addons/l10n_ch/partner.py
@@ -34,13 +34,13 @@ import netsvc
from osv import fields, osv
class res_partner(osv.osv):
- _inherit = 'res.partner'
+ _inherit = 'res.partner'
- _columns = {
- 'ref_companies': fields.one2many('res.company', 'partner_id',
- 'Companies that refers to partner'),
- }
-
+ _columns = {
+ 'ref_companies': fields.one2many('res.company', 'partner_id',
+ 'Companies that refers to partner'),
+ }
+
res_partner()
@@ -48,52 +48,50 @@ res_partner()
class res_partner_bank(osv.osv):
- _inherit = "res.partner.bank"
- _columns = {
- 'name': fields.char('Description', size=128, required=True),
- 'post_number': fields.char('Post number', size=64),
- 'bvr_number': fields.char('BVR account number', size=11),
- 'bvr_adherent_num': fields.char('BVR adherent number', size=11),
- 'dta_code': fields.char('DTA code', size=5),
- }
-
- def _default_value(self, cursor, user, field, context=None):
- if field in ('country_id', 'state_id'):
- value = False
- else:
- value = ''
- if not context.get('address', False):
- return value
- for ham, spam, address in context['address']:
- if 'type' in address.keys() :
- if address['type'] == 'default':
- return address.get(field,False)
- elif not address['type']:
- value = address.get(field,False)
- else :
- value = False
- return value
-
-
- def name_get(self, cr, uid, ids, context=None):
- if not len(ids):
- return []
- bank_type_obj = self.pool.get('res.partner.bank.type')
+ _inherit = "res.partner.bank"
+ _columns = {
+ 'name': fields.char('Description', size=128, required=True),
+ 'post_number': fields.char('Post number', size=64),
+ 'bvr_number': fields.char('BVR account number', size=11),
+ 'bvr_adherent_num': fields.char('BVR adherent number', size=11),
+ 'dta_code': fields.char('DTA code', size=5),
+ }
+
+# def _default_value(self, cursor, user, field, context=None):
+# if field in ('country_id', 'state_id'):
+# value = False
+# else:
+# value = ''
+# if not context.get('address', False):
+# return value
+# for ham, spam, address in context['address']:
+# if 'type' in address.keys() :
+# if address['type'] == 'default':
+# return address[field]
+# elif not address['type']:
+# value = address[field]
+# else :
+# value = False
+# return value
+
+
+ def name_get(self, cr, uid, ids, context=None):
+ if not len(ids):
+ return []
+ bank_type_obj = self.pool.get('res.partner.bank.type')
- type_ids = bank_type_obj.search(cr, uid, [])
- bank_type_names = {}
- for bank_type in bank_type_obj.browse(cr, uid, type_ids,
- context=context):
- bank_type_names[bank_type.code] = bank_type.name
- res = []
- for r in self.read(cr, uid, ids, ['name','state'], context):
- res.append((r['id'], r['name']+' : '+bank_type_names[r['state']]))
- return res
-
- _sql_constraints = [
- ('bvr_adherent_uniq', 'unique (bvr_adherent_num)', 'The BVR adherent number must be unique !')
- ]
-
-
+ type_ids = bank_type_obj.search(cr, uid, [])
+ bank_type_names = {}
+ for bank_type in bank_type_obj.browse(cr, uid, type_ids,
+ context=context):
+ bank_type_names[bank_type.code] = bank_type.name
+ res = []
+ for r in self.read(cr, uid, ids, ['name','state'], context):
+ res.append((r['id'], r['name']+' : '+bank_type_names[r['state']]))
+ return res
+
+ _sql_constraints = [
+ ('bvr_adherent_uniq', 'unique (bvr_adherent_num)', 'The BVR adherent number must be unique !')
+ ]
res_partner_bank()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/payment.py b/addons/l10n_ch/payment.py
index c1ca00b793c..f1a85adaf1c 100755
--- a/addons/l10n_ch/payment.py
+++ b/addons/l10n_ch/payment.py
@@ -34,11 +34,11 @@ from osv import fields
from osv import osv
class payment_order(osv.osv):
- _inherit = 'payment.order'
+ _inherit = 'payment.order'
- def get_wizard(self,mode):
- if mode == 'dta':
- return 'l10n_ch','wizard_account_dta_create'
- return super(payment_order,self).get_wizard(mode)
+ def get_wizard(self,mode):
+ if mode == 'dta':
+ return 'l10n_ch','wizard_account_dta_create'
+ return super(payment_order,self).get_wizard(mode)
payment_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/report/bvr.py b/addons/l10n_ch/report/bvr.py
index 095defdb2e6..ffbe45d8e80 100755
--- a/addons/l10n_ch/report/bvr.py
+++ b/addons/l10n_ch/report/bvr.py
@@ -34,70 +34,92 @@ import time
from report import report_sxw
from tools import mod10r
import re
+import os
+import sys
+import shutil
from mx.DateTime import *
class account_invoice_bvr(report_sxw.rml_parse):
- """Report class that Allows to print BVR payement vector"""
- def __init__(self, cr, uid, name, context):
- super(account_invoice_bvr, self).__init__(cr, uid, name, context)
- self.localcontext.update({
- 'time': time,
- 'user':self.pool.get("res.users").browse(cr,uid,uid),
- 'mod10r': mod10r,
- '_space': self._space,
- '_get_ref': self._get_ref,
- 'comma_me': self.comma_me,
- 'format_date': self._get_and_change_date_format_for_swiss,
- #'date_invoice':
- })
- def _get_and_change_date_format_for_swiss (self,date_to_format):
- date_formatted=''
- print date_to_format
- if date_to_format:
- date_formatted = strptime(date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
- return date_formatted
-
- def comma_me(self,amount):
- if type(amount) is float :
- amount = str('%.2f'%amount)
- else :
- amount = str(amount)
- orig = amount
- new = re.sub("^(-?\d+)(\d{3})", "\g<1>'\g<2>", amount)
- if orig == new:
- return new
- else:
- return self.comma_me(new)
+ """Report class that Allows to print BVR payement vector"""
+ def __init__(self, cr, uid, name, context):
+ super(account_invoice_bvr, self).__init__(cr, uid, name, context)
+ self.copyocrbfile('addons/l10n_ch/report/ocrbb.ttf')
+ self.localcontext.update({
+ 'time': time,
+ 'user':self.pool.get("res.users").browse(cr,uid,uid),
+ 'mod10r': mod10r,
+ '_space': self._space,
+ '_get_ref': self._get_ref,
+ 'comma_me': self.comma_me,
+ 'format_date': self._get_and_change_date_format_for_swiss,
+ 'police_absolute_path' : self.police_absolute_path,
+ 'copyocrbfile': self.copyocrbfile
+ })
+ def _get_and_change_date_format_for_swiss (self,date_to_format):
+ date_formatted=''
+ print date_to_format
+ if date_to_format:
+ date_formatted = strptime(date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
+ return date_formatted
+
+ def police_absolute_path(self, inner_path) :
+ path = os.path.join(os.path.dirname(sys.argv[0]), inner_path)
+ return path
+
+ def copyocrbfile(self,file):
+ src = self.police_absolute_path(file)
+ file = os.path.basename(src)
+ dest = os.path.join('/tmp/',file)
+ if not os.path.isfile(dest):
+ try:
+ shutil.copyfile(src,dest)
+ except:
+ """print ocrbfile was not copy in /tmp/ please
+ copy it manually from l10_ch/report"""
+
+
- def _space(self,nbr, nbrspc=5):
- res = ''
- for i in range(len(nbr)):
- res = res + nbr[i]
- if not (i-1) % nbrspc:
- res = res + ' '
- return res
+ def comma_me(self,amount):
+ if type(amount) is float :
+ amount = str('%.2f'%amount)
+ else :
+ amount = str(amount)
+ orig = amount
+ new = re.sub("^(-?\d+)(\d{3})", "\g<1>'\g<2>", amount)
+ if orig == new:
+ return new
+ else:
+ return self.comma_me(new)
- def _get_ref(self, o):
- res = ''
- if o.partner_bank.bvr_adherent_num:
- res = o.partner_bank.bvr_adherent_num
- invoice_number = ''
- if o.number:
- invoice_number = re.sub('[^0-9]', '0', o.number)
- return mod10r(res + invoice_number.rjust(26-len(res), '0'))
+ def _space(self,nbr, nbrspc=5):
+ res = ''
+ for i in range(len(nbr)):
+ res = res + nbr[i]
+ if not (i-1) % nbrspc:
+ res = res + ' '
+ return res
+
+ def _get_ref(self, o):
+ res = ''
+ if o.partner_bank.bvr_adherent_num:
+ res = o.partner_bank.bvr_adherent_num
+ invoice_number = ''
+ if o.number:
+ invoice_number = re.sub('[^0-9]', '0', o.number)
+ return mod10r(res + invoice_number.rjust(26-len(res), '0'))
report_sxw.report_sxw(
- 'report.l10n_ch.bvr',
- 'account.invoice',
- 'addons/l10n_ch/report/bvr.rml',
- parser=account_invoice_bvr,
- header=False)
+ 'report.l10n_ch.bvr',
+ 'account.invoice',
+ 'addons/l10n_ch/report/bvr.rml',
+ parser=account_invoice_bvr,
+ header=False)
report_sxw.report_sxw(
- 'report.l10n_ch.invoice.bvr',
- 'account.invoice',
- 'addons/l10n_ch/report/invoice.rml',
- parser=account_invoice_bvr,
- header=False)
+ 'report.l10n_ch.invoice.bvr',
+ 'account.invoice',
+ 'addons/l10n_ch/report/invoice.rml',
+ parser=account_invoice_bvr,
+ header=False)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/report/bvr.rml b/addons/l10n_ch/report/bvr.rml
index 72244304e4b..caaa585d835 100755
--- a/addons/l10n_ch/report/bvr.rml
+++ b/addons/l10n_ch/report/bvr.rml
@@ -1,40 +1,36 @@
-
+
-
-
-
- [[ company.partner_id.name ]]
- 1cm 27.7cm 20cm 27.7cm
+
+ [[company.logo or removeParentNode('image')]]
+
+
+
+ 1.3cm 27.7cm 20cm 27.7cm
-
- [[ company.rml_header1 ]]
-
- [[ company.partner_id.address[0].street ]]
- [[ company.partner_id.address[0].zip ]] [[ company.partner_id.address[0].city ]]
- TVA:
- [[ company.partner_id.vat ]]
- Phone:
- [[ company.partner_id.address[0].phone ]]
-
- Mail:
- [[ company.partner_id.address[0].email ]]
- 1cm 25.7cm 7cm 25.7cm
-
-
+ [[ company.rml_header1 ]]
+ [[ company.partner_id.name ]]
+ [[ company.partner_id.address and company.partner_id.address[0].street or '' ]]
+ [[ company.partner_id.address and company.partner_id.address[0].zip or '' ]] [[ company.partner_id.address and company.partner_id.address[0].city or '' ]] - [[ company.partner_id.address and company.partner_id.address[0].country_id and company.partner_id.address[0].country_id.name or '']]
+ Phone:
+ [[ company.partner_id.address and company.partner_id.address[0].phone or '' ]]
+ Mail:
+ [[ company.partner_id.address and company.partner_id.address[0].email or '' ]]
+ 1.3cm 25.5cm 7cm 25.5cm
+
+ height="111mm"/>
@@ -116,6 +112,12 @@
-->
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.name or '' ]]
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.zip or '']] [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.city or '']]
+
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.name or '' ]]
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.zip or '']] [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.city or '']]
+
[[ user.company_id.partner_id.name ]]
[[ user.company_id.partner_id.address[0].street ]]
[[ (user.company_id.partner_id.address[0].street2 or '')]]
@@ -145,10 +147,11 @@
[[ _space(_get_ref(o)) ]]
-
+ [[ o.partner_bank and o.partner_bank.printAccount and o.partner_bank.bvr_number or '' ]]
+ [[ o.partner_bank and o.partner_bank.printAccount and o.partner_bank.bvr_number or '' ]]
[[ _space(('%.2f' % o.amount_total)[:-3], 1) + ' ' ]]
[[ _space(('%.2f' % o.amount_total)[:-3], 1) + ' ' ]]
-
+ [[ o.partner_bank and o.partner_bank.printAccount and o.partner_bank.bvr_number or '' ]]
[[ _space(('%.2f' % o.amount_total)[-2:], 1) + ' ' ]]
[[ _space(('%.2f' % o.amount_total)[-2:], 1) + ' ' ]]
diff --git a/addons/l10n_ch/report/invoice.rml b/addons/l10n_ch/report/invoice.rml
index 4aba63b6986..ce5ef808f2a 100755
--- a/addons/l10n_ch/report/invoice.rml
+++ b/addons/l10n_ch/report/invoice.rml
@@ -1,41 +1,40 @@
-
+
+
-
-
-
-
- [[ company.partner_id.name ]]
- 1cm 27.7cm 20cm 27.7cm
+
+ [[company.logo or removeParentNode('image')]]
+
+
+
+ 1.3cm 27.7cm 20cm 27.7cm
-
- [[ company.rml_header1 ]]
+ [[ company.rml_header1 ]]
- [[ company.partner_id.address and company.partner_id.address[0].street ]]
- [[ company.partner_id.address and company.partner_id.address[0].zip ]] [[ company.partner_id.address and company.partner_id.address[0].city ]] - [[ company.partner_id.address and company.partner_id.address[0].country_id and company.partner_id.address[0].country_id.name ]]
- TVA:
- [[ company.partner_id.vat ]]
- Phone:
- [[ company.partner_id.address and company.partner_id.address[0].phone ]]
- Mail:
- [[ company.partner_id.address and company.partner_id.address[0].email ]]
- 1cm 25.7cm 7cm 25.7cm
-
-
+ [[ company.partner_id.name ]]
+ [[ company.partner_id.address and company.partner_id.address[0].street or '' ]]
+ [[ company.partner_id.address and company.partner_id.address[0].zip or '' ]] [[ company.partner_id.address and company.partner_id.address[0].city or '' ]] - [[ company.partner_id.address and company.partner_id.address[0].country_id and company.partner_id.address[0].country_id.name or '']]
+ Phone:
+ [[ company.partner_id.address and company.partner_id.address[0].phone or '' ]]
+ Mail:
+ [[ company.partner_id.address and company.partner_id.address[0].email or '' ]]
+ 1.3cm 25.5cm 7cm 25.5cm
+ Contact : [[ user.name ]] - Page:
+
+ height="111mm"/>
@@ -189,7 +188,7 @@
Invoice Date:
- [[format_date(o.date_invoice)]]
+ [[ o.date_invoice and format_date(o.date_invoice) or '']]
Remarque:
@@ -248,19 +247,18 @@
|
-
+
|
- [[ repeatIn((l.note and l.note.splitlines()) or [], 'note') ]]
+ [[ note or removeParentNode('blockTable') ]]
|
- [[ note or removeParentNode('table') ]]
+ [[ l.note ]]
|
-
@@ -328,6 +326,11 @@
-->
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.name or '' ]]
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.zip or '']] [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.city or '']]
+
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.name or '' ]]
+ [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.zip or '']] [[ o.partner_bank and o.partner_bank.printBank and o.partner_bank.bank and o.partner_bank.bank.city or '']]
[[user.company_id.name]]
[[ user.company_id.partner_id.address[0].street ]]
[[ (user.company_id.partner_id.address[0].street2 or '')]]
@@ -354,10 +357,12 @@
+
[[ _space(_get_ref(o)) ]]
-
+ [[ o.partner_bank and o.partner_bank.printAccount and o.partner_bank.bvr_number or '' ]]
+ [[ o.partner_bank and o.partner_bank.printAccount and o.partner_bank.bvr_number or '' ]]
[[ _space(('%.2f' % o.amount_total)[:-3], 1) + ' ' ]]
[[ _space(('%.2f' % o.amount_total)[:-3], 1) + ' ' ]]
@@ -375,4 +380,4 @@
-
+
\ No newline at end of file
diff --git a/addons/l10n_ch/report/tiny_sxw2rml.py b/addons/l10n_ch/report/tiny_sxw2rml.py
deleted file mode 100755
index bb5e06e8ce7..00000000000
--- a/addons/l10n_ch/report/tiny_sxw2rml.py
+++ /dev/null
@@ -1,339 +0,0 @@
-#coding: latin-1
-
-##############################################################################
-#
-# Copyright (c):
-#
-# 2005 pyopenoffice.py Martin Simon (http://www.bezirksreiter.de)
-# 2005 Fabien Pinckaers, TINY SPRL. (http://tiny.be)
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contact a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-##############################################################################
-#!/usr/bin/python
-"""
-Tiny SXW2RML - The Tiny ERP's report engine
-
-Tiny SXW2RMLis part of the Tiny report project.
-Tiny Report is a module that allows you to render high quality PDF document
-from an OpenOffice template (.sxw) and any relationnal database.
-
-The whole source code is distributed under the terms of the
-GNU Public Licence.
-
-(c) 2005 pyopenoffice.py Martin Simon (http://www.bezirksreiter.de)
-(c) 2005-TODAY, Fabien Pinckaers - Tiny sprl
-"""
-__version__ = '0.9'
-
-
-import re
-import string
-import os
-import time
-import zipfile
-import xml.dom.minidom
-from reportlab.lib.units import toLength
-import optparse
-
-parser = optparse.OptionParser(
- version="Tiny Report v%s" % __version__,
- usage = 'tiny_sxw2rml.py [options] file.sxw')
-parser.add_option("-v", "--verbose", default=False, dest="verbose", help="enable basic debugging")
-parser.add_option("-o", "--output", dest="output", default='.', help="directory of image output")
-(opt, args) = parser.parse_args()
-if len(args) != 1:
- parser.error("incorrect number of arguments")
-
-class DomApiGeneral:
- """General DOM API utilities."""
- def __init__(self,content_string="",file=""):
- self.content_string = content_string
- self.re_digits = re.compile(r"(.*?\d)(pt|cm|mm|inch|in)")
-
- def _unitTuple(self,string):
- """Split values and units to a tuple."""
- temp = self.re_digits.findall(string)
- if not temp:
- return (string,"")
- else:
- return (temp[0])
-
- def stringPercentToFloat(self,string):
- temp = string.replace("""%""","")
- return float(temp)/100
-
- def findChildrenByName(self,parent,name,attr_dict={}):
- """Helper functions. Does not work recursively.
- Optional: also test for certain attribute/value pairs."""
- children = []
- for c in parent.childNodes:
- if c.nodeType == c.ELEMENT_NODE and c.nodeName == name:
- children.append(c)
- if attr_dict == {}:
- return children
- else:
- return self._selectForAttributes(nodelist=children,attr_dict=attr_dict)
-
- def _selectForAttributes(self,nodelist,attr_dict):
- "Helper function."""
- selected_nodes = []
- for n in nodelist:
- check = 1
- for a in attr_dict.keys():
- if n.getAttribute(a) != attr_dict[a]:
- # at least one incorrect attribute value?
- check = 0
- if check:
- selected_nodes.append(n)
- return selected_nodes
-
- def _stringToTuple(self,s):
- """Helper function."""
- try:
- temp = string.split(s,",")
- return int(temp[0]),int(temp[1])
- except:
- return None
-
- def _tupleToString(self,t):
- try:
- return self.openOfficeStringUtf8("%s,%s" % (t[0],t[1]))
- except:
- return None
-
- def _lengthToFloat(self,value):
- v = value
- if not self.re_digits.search(v):
- return v
- try:
- if v[-4:] == "inch":
- # OO files use "inch" instead of "in" in Reportlab units
- v = v[:-2]
- except:
- pass
- try:
- c = round(toLength(v))
- return c
- except:
- return v
-
- def openOfficeStringUtf8(self,string):
- if type(string) == unicode:
- return string.encode("utf-8")
- tempstring = unicode(string,"cp1252").encode("utf-8")
- return tempstring
-
-class DomApi(DomApiGeneral):
- """This class provides a DOM-API for XML-Files from an SXW-Archive."""
- def __init__(self,xml_content,xml_styles):
- DomApiGeneral.__init__(self)
- self.content_dom = xml.dom.minidom.parseString(xml_content)
- self.styles_dom = xml.dom.minidom.parseString(xml_styles)
- body = self.content_dom.getElementsByTagName("office:body")
- self.body = body and body[0]
-
- # TODO:
- self.style_dict = {}
- self.style_properties_dict = {}
-
- # ******** always use the following order:
- self.buildStyleDict()
- self.buildStylePropertiesDict()
-
- self.page_master = self.styles_dom.getElementsByTagName("style:page-master")[0]
- self.document = self.content_dom.getElementsByTagName("office:document-content")[0]
-
- def buildStylePropertiesDict(self):
- for s in self.style_dict.keys():
- self.style_properties_dict[s] = self.getStylePropertiesDict(s)
-
- def updateWithPercents(self,dict,updatedict):
- """Sometimes you find values like "115%" in the style hierarchy."""
- if not updatedict:
- # no style hierarchies for this style? =>
- return
- new_updatedict = copy.copy(updatedict)
- for u in new_updatedict.keys():
- try:
- if new_updatedict[u].find("""%""") != -1 and dict.has_key(u):
- number = float(self.re_digits.search(dict[u]).group(1))
- unit = self.re_digits.search(dict[u]).group(2)
- new_number = self.stringPercentToFloat(new_updatedict[u]) * number
- if unit == "pt":
- new_number = int(new_number)
- # no floats allowed for "pt"
- # OOo just takes the int, does not round (try it out!)
- new_updatedict[u] = "%s%s" % (new_number,unit)
- else:
- dict[u] = new_updatedict[u]
- except:
- dict[u] = new_updatedict[u]
- dict.update(new_updatedict)
-
- def normalizeStyleProperties(self):
- """Transfer all style:style-properties attributes from the
- self.style_properties_hierarchical dict to the automatic-styles
- from content.xml. Use this function to preprocess content.xml for
- XSLT transformations etc.Do not try to implement this function
- with XSlT - believe me, it's a terrible task..."""
- styles_styles = self.styles_dom.getElementsByTagName("style:style")
- automatic_styles = self.content_dom.getElementsByTagName("office:automatic-styles")[0]
- for s in styles_styles:
- automatic_styles.appendChild(s.cloneNode(deep=1))
- content_styles = self.content_dom.getElementsByTagName("style:style")
- # these are the content_styles with styles_styles added!!!
- for s in content_styles:
- c = self.findChildrenByName(s,"style:properties")
- if c == []:
- # some derived automatic styles do not have "style:properties":
- temp = self.content_dom.createElement("style:properties")
- s.appendChild(temp)
- c = self.findChildrenByName(s,"style:properties")
- c = c[0]
- dict = self.style_properties_dict[(s.getAttribute("style:name")).encode("latin-1")] or {}
- for attribute in dict.keys():
- c.setAttribute(self.openOfficeStringUtf8(attribute),self.openOfficeStringUtf8(dict[attribute]))
-
- def transferStylesXml(self):
- """Transfer certain sub-trees from styles.xml to the normalized content.xml
- (see above). It is not necessary to do this - for example - with paragraph styles.
- the "normalized" style properties contain all information needed for
- further processing."""
- # TODO: What about table styles etc.?
- page_master = self.page_master
- outline_styles = self.styles_dom.getElementsByTagName("text:outline-style")
- t = self.content_dom.createElement("transferredfromstylesxml")
- self.document.insertBefore(t,self.body)
- t_new = self.body.previousSibling
- try:
- t_new.appendChild(page_master.cloneNode(deep=1))
- t_new.appendChild(outline_styles[0].cloneNode(deep=1))
- except:
- pass
-
- def normalizeLength(self):
- """Normalize all lengthes to floats (i.e: 1 inch = 72).
- Always use this after "normalizeContent" and "transferStyles"!"""
- # TODO: The complex attributes of table cell styles are not transferred yet.
- #all_styles = self.content_dom.getElementsByTagName("style:properties")
- #all_styles += self.content_dom.getElementsByTagName("draw:image")
- all_styles = self.content_dom.getElementsByTagName("*")
- for s in all_styles:
- for x in s._attrs.keys():
- v = s.getAttribute(x)
- s.setAttribute(x,"%s" % self._lengthToFloat(v))
- # convert float to string first!
-
- def normalizeTableColumns(self):
- """Handle this strange table:number-columns-repeated attribute."""
- columns = self.content_dom.getElementsByTagName("table:table-column")
- for c in columns:
- if c.hasAttribute("table:number-columns-repeated"):
- number = int(c.getAttribute("table:number-columns-repeated"))
- c.removeAttribute("table:number-columns-repeated")
- for i in range(number-1):
- (c.parentNode).insertBefore(c.cloneNode(deep=1),c)
-
- def buildStyleDict(self):
- """Store all style:style-nodes from content.xml and styles.xml in self.style_dict.
- Caution: in this dict the nodes from two dom apis are merged!"""
- for st in (self.styles_dom,self.content_dom):
- for s in st.getElementsByTagName("style:style"):
- name = s.getAttribute("style:name").encode("latin-1")
- self.style_dict[name] = s
- return True
-
- def toxml(self):
- return self.content_dom.toxml(encoding="utf-8")
-
- def getStylePropertiesDict(self,style_name):
- res = {}
-
- if self.style_dict[style_name].hasAttribute("style:parent-style-name"):
- parent = self.style_dict[style_name].getAttribute("style:parent-style-name").encode("latin-1")
- res = self.getStylePropertiesDict(parent)
-
- childs = self.style_dict[style_name].childNodes
- for c in childs:
- if c.nodeType == c.ELEMENT_NODE and c.nodeName == "style:properties":
- for attr in c._attrs.keys():
- res[attr] = c.getAttribute(attr).encode("latin-1")
- return res
-
-class PyOpenOffice(object):
- """This is the main class which provides all functionality."""
- def __init__(self, path='.'):
- self.path = path
-
- def oo_read(self,fname):
- z = zipfile.ZipFile(fname,"r")
- content = z.read('content.xml')
- style = z.read('styles.xml')
- all = z.namelist()
- for a in all:
- if a[:9]=='Pictures/' and len(a)>10:
- pic_content = z.read(a)
- f=open(os.path.join(self.path, os.path.basename(a)),"wb")
- f.write(pic_content)
- f.close()
- z.close()
- return content,style
-
- def oo_replace(self,content):
- regex = [
- (r"]*/>", ""),
- #(r"(.*?)", "$1"),
- #(r"(.*?)", "$1"),
- (r"(.*?)]*/>", "$2"),
- ]
- for key,val in regex:
- content = re.sub(key, val, content)
- return content
-
- def unpackNormalize(self,sourcefile):
- c,s = self.oo_read(sourcefile)
- c = self.oo_replace(c)
- dom = DomApi(c,s)
- dom.normalizeStyleProperties()
- dom.transferStylesXml()
- dom.normalizeLength()
- dom.normalizeTableColumns()
- new_c = dom.toxml()
- return new_c
-
-
-if __name__ == "__main__":
- import sys
- import libxslt
- import libxml2
-
- f = sys.argv[1]
- tool = PyOpenOffice(opt.output)
- res = tool.unpackNormalize(f)
- styledoc = libxml2.parseFile('normalized_oo2rml.xsl')
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.parseMemory(res,len(res))
- result = style.applyStylesheet(doc, None)
- xml = style.saveResultToString(result)
- print xml
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/wizard/bvr_import.py b/addons/l10n_ch/wizard/bvr_import.py
index 36212d559db..659c0b557bb 100755
--- a/addons/l10n_ch/wizard/bvr_import.py
+++ b/addons/l10n_ch/wizard/bvr_import.py
@@ -39,215 +39,215 @@ from tools.translate import _
ASK_FORM = """
"""
ASK_FIELDS = {
- 'file': {
- 'string': 'BVR file',
- 'type': 'binary',
- 'required': True,
- },
+ 'file': {
+ 'string': 'BVR file',
+ 'type': 'binary',
+ 'required': True,
+ },
}
def _reconstruct_invoice_ref(cursor, user, reference, context):
- ###
- id_invoice = False
- # On fait d'abord une recherche sur toutes les factures
- # we now searhc for company
- user_obj=pooler.get_pool(cursor.dbname).get('res.users')
- user_current=user_obj.browse(cursor, user, user)
-
- ##
-
- cursor.execute("SELECT inv.id,inv.number from account_invoice AS inv where inv.company_id = " + str(user_current.company_id.id))
- result_invoice = cursor.fetchall()
-
- for inv_id,inv_name in result_invoice:
- inv_name = re.sub('[^0-9]', '0', str(inv_name))
- if inv_name == reference:
- id_invoice = inv_id
- break
- if id_invoice:
- cursor.execute('SELECT l.id ' \
- 'FROM account_move_line l, account_invoice i ' \
- 'WHERE l.move_id = i.move_id AND l.reconcile_id is NULL ' \
- 'AND i.id in (' + ','.join([str(x) for x in [id_invoice]]) + ')')
- inv_line = []
- for id_line in cursor.fetchall():
- inv_line.append(id_line[0])
- return inv_line
- else:
- return []
- return True
+ ###
+ id_invoice = False
+ # On fait d'abord une recherche sur toutes les factures
+ # we now searhc for company
+ user_obj=pooler.get_pool(cursor.dbname).get('res.users')
+ user_current=user_obj.browse(cursor, user, user)
+
+ ##
+
+ cursor.execute("SELECT inv.id,inv.number from account_invoice AS inv where inv.company_id = " + str(user_current.company_id.id))
+ result_invoice = cursor.fetchall()
+
+ for inv_id,inv_name in result_invoice:
+ inv_name = re.sub('[^0-9]', '0', str(inv_name))
+ if inv_name == reference:
+ id_invoice = inv_id
+ break
+ if id_invoice:
+ cursor.execute('SELECT l.id ' \
+ 'FROM account_move_line l, account_invoice i ' \
+ 'WHERE l.move_id = i.move_id AND l.reconcile_id is NULL ' \
+ 'AND i.id in (' + ','.join([str(x) for x in [id_invoice]]) + ')')
+ inv_line = []
+ for id_line in cursor.fetchall():
+ inv_line.append(id_line[0])
+ return inv_line
+ else:
+ return []
+ return True
def _import(obj, cursor, user, data, context):
- pool = pooler.get_pool(cursor.dbname)
- statement_line_obj = pool.get('account.bank.statement.line')
- statement_reconcile_obj = pool.get('account.bank.statement.reconcile')
- move_line_obj = pool.get('account.move.line')
- property_obj = pool.get('ir.property')
- model_fields_obj = pool.get('ir.model.fields')
- attachment_obj = pool.get('ir.attachment')
- file = data['form']['file']
- statement_id = data['id']
+ pool = pooler.get_pool(cursor.dbname)
+ statement_line_obj = pool.get('account.bank.statement.line')
+ statement_reconcile_obj = pool.get('account.bank.statement.reconcile')
+ move_line_obj = pool.get('account.move.line')
+ property_obj = pool.get('ir.property')
+ model_fields_obj = pool.get('ir.model.fields')
+ attachment_obj = pool.get('ir.attachment')
+ file = data['form']['file']
+ statement_id = data['id']
- records = []
- total_amount = 0
- total_cost = 0
- find_total = False
+ records = []
+ total_amount = 0
+ total_cost = 0
+ find_total = False
- for lines in base64.decodestring(file).split("\n"):
- # Manage files without carriage return
- while lines:
- (line, lines) = (lines[:128], lines[128:])
- record = {}
+ for lines in base64.decodestring(file).split("\n"):
+ # Manage files without carriage return
+ while lines:
+ (line, lines) = (lines[:128], lines[128:])
+ record = {}
- if line[0:3] in ('999', '995'):
- if find_total:
- raise wizard.except_wizard(_('Error'),
- _('Too much total record found!'))
- find_total = True
- if lines:
- raise wizard.except_wizard(_('Error'),
- _('Record found after total record!'))
- amount = float(line[39:49]) + (float(line[49:51]) / 100)
- cost = float(line[69:76]) + (float(line[76:78]) / 100)
- if line[2] == '5':
- amount *= -1
- cost *= -1
+ if line[0:3] in ('999', '995'):
+ if find_total:
+ raise wizard.except_wizard(_('Error'),
+ _('Too much total record found!'))
+ find_total = True
+ if lines:
+ raise wizard.except_wizard(_('Error'),
+ _('Record found after total record!'))
+ amount = float(line[39:49]) + (float(line[49:51]) / 100)
+ cost = float(line[69:76]) + (float(line[76:78]) / 100)
+ if line[2] == '5':
+ amount *= -1
+ cost *= -1
- if round(amount - total_amount, 2) >= 0.01 \
- or round(cost - total_cost, 2) >= 0.01:
- raise wizard.except_wizard(_('Error'),
- _('Total record different from the computed!'))
- if int(line[51:63]) != len(records):
- raise wizard.except_wizard(_('Error'),
- _('Number record different from the computed!'))
- else:
- record = {
- 'reference': line[12:39],
- 'amount': float(line[39:47]) + (float(line[47:49]) / 100),
- 'date': time.strftime('%Y-%m-%d',
- time.strptime(line[65:71], '%y%m%d')),
- 'cost': float(line[96:98]) + (float(line[98:100]) / 100),
- }
+ if round(amount - total_amount, 2) >= 0.01 \
+ or round(cost - total_cost, 2) >= 0.01:
+ raise wizard.except_wizard(_('Error'),
+ _('Total record different from the computed!'))
+ if int(line[51:63]) != len(records):
+ raise wizard.except_wizard(_('Error'),
+ _('Number record different from the computed!'))
+ else:
+ record = {
+ 'reference': line[12:39],
+ 'amount': float(line[39:47]) + (float(line[47:49]) / 100),
+ 'date': time.strftime('%Y-%m-%d',
+ time.strptime(line[65:71], '%y%m%d')),
+ 'cost': float(line[96:98]) + (float(line[98:100]) / 100),
+ }
- if record['reference'] != mod10r(record['reference'][:-1]):
- raise wizard.except_wizard(_('Error'),
- _('Recursive mod10 is invalid for reference: %s') % \
- record['reference'])
+ if record['reference'] != mod10r(record['reference'][:-1]):
+ raise wizard.except_wizard(_('Error'),
+ _('Recursive mod10 is invalid for reference: %s') % \
+ record['reference'])
- if line[2] == '5':
- record['amount'] *= -1
- record['cost'] *= -1
- total_amount += record['amount']
- total_cost += record['cost']
- records.append(record)
+ if line[2] == '5':
+ record['amount'] *= -1
+ record['cost'] *= -1
+ total_amount += record['amount']
+ total_cost += record['cost']
+ records.append(record)
- model_fields_ids = model_fields_obj.search(cursor, user, [
- ('name', 'in', ['property_account_receivable', 'property_account_payable']),
- ('model', '=', 'res.partner'),
- ], context=context)
- property_ids = property_obj.search(cursor, user, [
- ('fields_id', 'in', model_fields_ids),
- ('res_id', '=', False),
- ], context=context)
+ model_fields_ids = model_fields_obj.search(cursor, user, [
+ ('name', 'in', ['property_account_receivable', 'property_account_payable']),
+ ('model', '=', 'res.partner'),
+ ], context=context)
+ property_ids = property_obj.search(cursor, user, [
+ ('fields_id', 'in', model_fields_ids),
+ ('res_id', '=', False),
+ ], context=context)
- account_receivable = False
- account_payable = False
- for property in property_obj.browse(cursor, user, property_ids, context=context):
- if property.fields_id.name == 'property_account_receivable':
- account_receivable = int(property.value.split(',')[1])
- elif property.fields_id.name == 'property_account_payable':
- account_payable = int(property.value.split(',')[1])
+ account_receivable = False
+ account_payable = False
+ for property in property_obj.browse(cursor, user, property_ids, context=context):
+ if property.fields_id.name == 'property_account_receivable':
+ account_receivable = int(property.value.split(',')[1])
+ elif property.fields_id.name == 'property_account_payable':
+ account_payable = int(property.value.split(',')[1])
- for record in records:
- # Remove the 11 first char because it can be adherent number
- # TODO check if 11 is the right number
- reference = record['reference'][11:-1].lstrip('0')
- values = {
- 'name': 'IN '+ reference,
- 'date': record['date'],
- 'amount': record['amount'],
- 'ref': reference,
- 'type': (record['amount'] >= 0 and 'customer') or 'supplier',
- 'statement_id': statement_id,
- }
- line_ids = move_line_obj.search(cursor, user, [
- ('ref', 'like', reference),
- ('reconcile_id', '=', False),
- ('account_id.type', 'in', ['receivable', 'payable']),
- ], order='date desc', context=context)
- if not line_ids:
- line_ids = _reconstruct_invoice_ref(cursor,user,reference,None)
-
- line2reconcile = False
- partner_id = False
- account_id = False
- for line in move_line_obj.browse(cursor, user, line_ids, context=context):
- if line.partner_id.id:
- partner_id = line.partner_id.id
- if record['amount'] >= 0:
- if round(record['amount'] - line.debit, 2) < 0.01:
- line2reconcile = line.id
- account_id = line.account_id.id
- break
- else:
- if round(line.credit + record['amount'], 2) < 0.01:
- line2reconcile = line.id
- account_id = line.account_id.id
- break
- if not account_id:
- if record['amount'] >= 0:
- account_id = account_receivable
- else:
- account_id = account_payable
- if not account_id :
- raise wizard.except_wizard(_('Error'),
- _('The properties account payable account receivable'))
- values['account_id'] = account_id
- values['partner_id'] = partner_id
+ for record in records:
+ # Remove the 11 first char because it can be adherent number
+ # TODO check if 11 is the right number
+ reference = record['reference'][11:-1].lstrip('0')
+ values = {
+ 'name': 'IN '+ reference,
+ 'date': record['date'],
+ 'amount': record['amount'],
+ 'ref': reference,
+ 'type': (record['amount'] >= 0 and 'customer') or 'supplier',
+ 'statement_id': statement_id,
+ }
+ line_ids = move_line_obj.search(cursor, user, [
+ ('ref', 'like', reference),
+ ('reconcile_id', '=', False),
+ ('account_id.type', 'in', ['receivable', 'payable']),
+ ], order='date desc', context=context)
+ if not line_ids:
+ line_ids = _reconstruct_invoice_ref(cursor,user,reference,None)
+
+ line2reconcile = False
+ partner_id = False
+ account_id = False
+ for line in move_line_obj.browse(cursor, user, line_ids, context=context):
+ if line.partner_id.id:
+ partner_id = line.partner_id.id
+ if record['amount'] >= 0:
+ if round(record['amount'] - line.debit, 2) < 0.01:
+ line2reconcile = line.id
+ account_id = line.account_id.id
+ break
+ else:
+ if round(line.credit + record['amount'], 2) < 0.01:
+ line2reconcile = line.id
+ account_id = line.account_id.id
+ break
+ if not account_id:
+ if record['amount'] >= 0:
+ account_id = account_receivable
+ else:
+ account_id = account_payable
+ if not account_id :
+ raise wizard.except_wizard(_('Error'),
+ _('The properties account payable account receivable'))
+ values['account_id'] = account_id
+ values['partner_id'] = partner_id
- if line2reconcile:
- values['reconcile_id'] = statement_reconcile_obj.create(cursor, user, {
- 'line_ids': [(6, 0, [line2reconcile])],
- }, context=context)
+ if line2reconcile:
+ values['reconcile_id'] = statement_reconcile_obj.create(cursor, user, {
+ 'line_ids': [(6, 0, [line2reconcile])],
+ }, context=context)
- statement_line_obj.create(cursor, user, values, context=context)
- attachment_obj.create(cursor, user, {
- 'name': 'BVR',
- 'datas': file,
- 'datas_fname': 'BVR.txt',
- 'res_model': 'account.bank.statement',
- 'res_id': statement_id,
- }, context=context)
- return {}
+ statement_line_obj.create(cursor, user, values, context=context)
+ attachment_obj.create(cursor, user, {
+ 'name': 'BVR',
+ 'datas': file,
+ 'datas_fname': 'BVR.txt',
+ 'res_model': 'account.bank.statement',
+ 'res_id': statement_id,
+ }, context=context)
+ return {}
class BVRImport(wizard.interface):
- states = {
- 'init': {
- 'actions': [],
- 'result': {
- 'type': 'form',
- 'arch': ASK_FORM,
- 'fields': ASK_FIELDS,
- 'state': [
- ('end', 'Cancel', 'gtk-cancel'),
- ('import', 'Import', 'gtk-ok', True),
- ],
- },
- },
- 'import': {
- 'actions': [],
- 'result': {
- 'type': 'action',
- 'action': _import,
- 'state': 'end',
- },
- },
- }
+ states = {
+ 'init': {
+ 'actions': [],
+ 'result': {
+ 'type': 'form',
+ 'arch': ASK_FORM,
+ 'fields': ASK_FIELDS,
+ 'state': [
+ ('end', 'Cancel', 'gtk-cancel'),
+ ('import', 'Import', 'gtk-ok', True),
+ ],
+ },
+ },
+ 'import': {
+ 'actions': [],
+ 'result': {
+ 'type': 'action',
+ 'action': _import,
+ 'state': 'end',
+ },
+ },
+ }
BVRImport('l10n_ch.bvr_import')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/wizard/dta_wizard.py b/addons/l10n_ch/wizard/dta_wizard.py
index 766fd550e74..1f8e55c0bc4 100755
--- a/addons/l10n_ch/wizard/dta_wizard.py
+++ b/addons/l10n_ch/wizard/dta_wizard.py
@@ -41,558 +41,568 @@ from tools.translate import _
FORM = """
"""
FIELDS = {
- 'dta': {
- 'string': 'DTA File',
- 'type': 'binary',
- 'readonly': True,
- },
+ 'dta': {
+ 'string': 'DTA File',
+ 'type': 'binary',
+ 'readonly': True,
+ },
}
TRANS=[
- (u'é','e'),
- (u'è','e'),
- (u'à','a'),
- (u'ê','e'),
- (u'î','i'),
- (u'ï','i'),
- (u'â','a'),
- (u'ä','a'),
+ (u'é','e'),
+ (u'è','e'),
+ (u'à','a'),
+ (u'ê','e'),
+ (u'î','i'),
+ (u'ï','i'),
+ (u'â','a'),
+ (u'ä','a'),
]
-def tr(s):
- s= s.decode('utf-8')
- for k in TRANS:
- s = s.replace(k[0],k[1])
- try:
- res= s.encode('ascii','replace')
- except:
- res = s
- return res
+def tr(string_in):
+ try:
+ string_in= string_in.decode('utf-8')
+ except:
+ # If exception => then just take the string as is
+ pass
+ for k in TRANS:
+ string_in = string_in.replace(k[0],k[1])
+ try:
+ res= string_in.encode('ascii','replace')
+ except:
+ res = string_in
+ return res
class record:
- def __init__(self, global_context_dict):
- for i in global_context_dict:
- global_context_dict[i] = global_context_dict[i] \
- and tr(global_context_dict[i])
- self.fields = []
- self.global_values = global_context_dict
- self.pre = {
- 'padding': '',
- 'seg_num1': '01',
- 'seg_num2': '02',
- 'seg_num3': '03',
- 'seg_num4': '04',
- 'seg_num5': '05',
- 'flag': '0',
- 'zero5': '00000'
- }
- self.post={'date_value_hdr': '000000', 'type_paiement': '0'}
- self.init_local_context()
+ def __init__(self, global_context_dict):
+ for i in global_context_dict:
+ global_context_dict[i] = global_context_dict[i] \
+ and tr(global_context_dict[i])
+ self.fields = []
+ self.global_values = global_context_dict
+ self.pre = {
+ 'padding': '',
+ 'seg_num1': '01',
+ 'seg_num2': '02',
+ 'seg_num3': '03',
+ 'seg_num4': '04',
+ 'seg_num5': '05',
+ 'flag': '0',
+ 'zero5': '00000'
+ }
+ self.post={'date_value_hdr': '000000', 'type_paiement': '0'}
+ self.init_local_context()
- def init_local_context(self):
- """
- Must instanciate a fields list, field = (name,size)
- and update a local_values dict.
- """
- raise _('not implemented')
+ def init_local_context(self):
+ """
+ Must instanciate a fields list, field = (name,size)
+ and update a local_values dict.
+ """
+ raise _('not implemented')
- def generate(self):
- res=''
- for field in self.fields :
- if self.pre.has_key(field[0]):
- value = self.pre[field[0]]
- elif self.global_values.has_key(field[0]):
- value = self.global_values[field[0]]
- elif self.post.has_key(field[0]):
- value = self.post[field[0]]
- else :
- pass
- #raise Exception(field[0]+' not found !')
- try:
- res = res + c_ljust(value, field[1])
- except :
- pass
- return res
+ def generate(self):
+ res=''
+ for field in self.fields :
+ if self.pre.has_key(field[0]):
+ value = self.pre[field[0]]
+ elif self.global_values.has_key(field[0]):
+ value = self.global_values[field[0]]
+ elif self.post.has_key(field[0]):
+ value = self.post[field[0]]
+ else :
+ pass
+ #raise Exception(field[0]+' not found !')
+ try:
+ res = res + c_ljust(value, field[1])
+ except :
+ pass
+ return res
class record_gt826(record):
- """
- bvr
- """
- def init_local_context(self):
- self.fields=[
- ('seg_num1', 2),
- #header
- ('date_value_hdr', 6),
- ('partner_bank_clearing', 12),
- ('zero5', 5),
- ('creation_date', 6),
- ('comp_bank_clearing', 7),
- ('uid', 5),
- ('sequence', 5),
- ('genre_trans', 3),
- ('type_paiement', 1),
- ('flag', 1),
- #seg1
- ('comp_dta', 5),
- ('number', 11),
- ('comp_bank_iban', 24),
- ('date_value', 6),
- ('currency', 3),
- ('amount_to_pay', 12),
- ('padding', 14),
- #seg2
- ('seg_num2', 2),
- ('comp_name', 20),
- ('comp_street', 20),
- ('comp_zip', 10),
- ('comp_city', 10),
- ('comp_country', 20),
- ('padding', 46),
- #seg3
- ('seg_num3', 2),
- ('partner_bvr', 12),#numero d'adherent bvr
- ('partner_name', 20),
- ('partner_street', 20),
- ('partner_zip', 10),
- ('partner_city', 10),
- ('partner_country', 20),
- ('reference', 27),#communication structuree
- ('padding', 2),#cle de controle
- ('padding', 5)
- ]
- self.pre.update({
- 'date_value_hdr': self.global_values['date_value'],
- 'date_value': '',
- 'partner_bank_clearing': '',
- 'partner_cpt_benef': '',
- 'genre_trans': '826',
- 'conv_cours': '',
- 'option_id_bank': 'D',
- 'partner_bvr': '/C/'+ self.global_values['partner_bvr'],
- 'ref2': '',
- 'ref3': '',
- 'format': '0',
- })
+ """
+ bvr
+ """
+ def init_local_context(self):
+ self.fields=[
+ ('seg_num1', 2),
+ #header
+ ('date_value_hdr', 6),
+ ('partner_bank_clearing', 12),
+ ('zero5', 5),
+ ('creation_date', 6),
+ ('comp_bank_clearing', 7),
+ ('uid', 5),
+ ('sequence', 5),
+ ('genre_trans', 3),
+ ('type_paiement', 1),
+ ('flag', 1),
+ #seg1
+ ('comp_dta', 5),
+ ('number', 11),
+ ('comp_bank_iban', 24),
+ ('date_value', 6),
+ ('currency', 3),
+ ('amount_to_pay', 12),
+ ('padding', 14),
+ #seg2
+ ('seg_num2', 2),
+ ('comp_name', 20),
+ ('comp_street', 20),
+ ('comp_zip', 10),
+ ('comp_city', 10),
+ ('comp_country', 20),
+ ('padding', 46),
+ #seg3
+ ('seg_num3', 2),
+ ('partner_bvr', 12),#numero d'adherent bvr
+ ('partner_name', 20),
+ ('partner_street', 20),
+ ('partner_zip', 10),
+ ('partner_city', 10),
+ ('partner_country', 20),
+ ('reference', 27),#communication structuree
+ ('padding', 2),#cle de controle
+ ('padding', 5)
+ ]
+ self.pre.update({
+ 'date_value_hdr': self.global_values['date_value'],
+ 'date_value': '',
+ 'partner_bank_clearing': '',
+ 'partner_cpt_benef': '',
+ 'genre_trans': '826',
+ 'conv_cours': '',
+ 'option_id_bank': 'D',
+ 'partner_bvr': '/C/'+ self.global_values['partner_bvr'],
+ 'ref2': '',
+ 'ref3': '',
+ 'format': '0',
+ })
class record_gt827(record):
- """
- interne suisse (bvpost et bvbank)
- """
- def init_local_context(self):
- self.fields = [
- ('seg_num1', 2),
- #header
- ('date_value_hdr', 6),
- ('partner_bank_clearing', 12),
- ('zero5', 5),
- ('creation_date', 6),
- ('comp_bank_clearing', 7),
- ('uid', 5),
- ('sequence', 5),
- ('genre_trans', 3),
- ('type_paiement', 1),
- ('flag', 1),
- #seg1
- ('comp_dta', 5),
- ('number', 11),
- ('comp_bank_iban', 24),
- ('date_value', 6),
- ('currency', 3),
- ('amount_to_pay', 12),
- ('padding', 14),
- #seg2
- ('seg_num2', 2),
- ('comp_name', 20),
- ('comp_street', 20),
- ('comp_zip', 10),
- ('comp_city', 10),
- ('comp_country', 20),
- ('padding', 46),
- #seg3
- ('seg_num3', 2),
- ('partner_bank_number', 30),
- ('partner_name', 24),
- ('partner_street', 24),
- ('partner_zip', 12),
- ('partner_city', 12),
- ('partner_country', 24),
- #seg4
- ('seg_num4', 2),
- ('reference', 112),
- ('padding', 14),
- #seg5
- #('padding',128)
- ]
+ """
+ interne suisse (bvpost et bvbank)
+ """
+ def init_local_context(self):
+ self.fields = [
+ ('seg_num1', 2),
+ #header
+ ('date_value_hdr', 6),
+ ('partner_bank_clearing', 12),
+ ('zero5', 5),
+ ('creation_date', 6),
+ ('comp_bank_clearing', 7),
+ ('uid', 5),
+ ('sequence', 5),
+ ('genre_trans', 3),
+ ('type_paiement', 1),
+ ('flag', 1),
+ #seg1
+ ('comp_dta', 5),
+ ('number', 11),
+ ('comp_bank_iban', 24),
+ ('date_value', 6),
+ ('currency', 3),
+ ('amount_to_pay', 12),
+ ('padding', 14),
+ #seg2
+ ('seg_num2', 2),
+ ('comp_name', 20),
+ ('comp_street', 20),
+ ('comp_zip', 10),
+ ('comp_city', 10),
+ ('comp_country', 20),
+ ('padding', 46),
+ #seg3
+ ('seg_num3', 2),
+ ('partner_bank_number', 30),
+ ('partner_name', 24),
+ ('partner_street', 24),
+ ('partner_zip', 12),
+ ('partner_city', 12),
+ ('partner_country', 24),
+ #seg4
+ ('seg_num4', 2),
+ ('reference', 112),
+ ('padding', 14),
+ #seg5
+ #('padding',128)
+ ]
- self.pre.update({
- 'date_value_hdr': self.global_values['date_value'],
- 'date_value': '',
- 'partner_cpt_benef': '',
- 'type_paiement': '0',
- 'genre_trans': '827',
- 'conv_cours': '',
- 'option_id_bank': 'D',
- 'ref2': '',
- 'ref3': '',
- 'format': '0'
- })
+ self.pre.update({
+ 'date_value_hdr': self.global_values['date_value'],
+ 'date_value': '',
+ 'partner_cpt_benef': '',
+ 'type_paiement': '0',
+ 'genre_trans': '827',
+ 'conv_cours': '',
+ 'option_id_bank': 'D',
+ 'ref2': '',
+ 'ref3': '',
+ 'format': '0'
+ })
class record_gt836(record):
- """
- iban
- """
- def init_local_context(self):
- self.fields = [
- ('seg_num1', 2),
- #header
- ('date_value_hdr', 6),
- ('partner_bank_clearing', 12),
- ('zero5', 5),
- ('creation_date', 6),
- ('comp_bank_clearing', 7),
- ('uid', 5),
- ('sequence', 5),
- ('genre_trans', 3),
- ('type_paiement', 1),
- ('flag', 1),
- #seg1
- ('comp_dta', 5),
- ('number', 11),
- ('comp_bank_iban', 24),
- ('date_value', 6),
- ('currency', 3),
- ('amount_to_pay', 15),
- ('padding', 11),
- #seg2
- ('seg_num2', 2),
- ('conv_cours', 12),
- ('comp_name', 35),
- ('comp_street', 35),
- ('comp_country', 3),
- ('comp_zip', 10),
- ('comp_city', 22),
- ('padding', 9),
- #seg3
- ('seg_num3', 2),
- ('option_id_bank', 1),
- ('partner_bank_ident', 70),
- ('partner_bank_iban', 34),
- ('padding', 21),
- #seg4
- ('seg_num4', 2),
- ('partner_name', 35),
- ('partner_street', 35),
- ('partner_country', 3),
- ('partner_zip', 10),
- ('partner_city', 22),
- ('padding', 21),
- #seg5
- ('seg_num5', 2),
- ('option_motif', 1),
- ('reference', 105),
- ('format', 1),
- ('padding', 19)
- ]
- self.pre.update( {
- 'partner_bank_clearing': '',
- 'partner_cpt_benef': '',
- 'type_paiement': '0',
- 'genre_trans': '836',
- 'conv_cours': '',
- 'reference': self.global_values['reference'],
- 'ref2': '',
- 'ref3': '',
- 'format': '2'
- })
- self.post.update({'option_motif': 'U'})
+ """
+ iban
+ """
+ def init_local_context(self):
+ self.fields = [
+ ('seg_num1', 2),
+ #header
+ ('date_value_hdr', 6),
+ ('partner_bank_clearing', 12),
+ ('zero5', 5),
+ ('creation_date', 6),
+ ('comp_bank_clearing', 7),
+ ('uid', 5),
+ ('sequence', 5),
+ ('genre_trans', 3),
+ ('type_paiement', 1),
+ ('flag', 1),
+ #seg1
+ ('comp_dta', 5),
+ ('number', 11),
+ ('comp_bank_iban', 24),
+ ('date_value', 6),
+ ('currency', 3),
+ ('amount_to_pay', 15),
+ ('padding', 11),
+ #seg2
+ ('seg_num2', 2),
+ ('conv_cours', 12),
+ ('comp_name', 35),
+ ('comp_street', 35),
+ ('comp_country', 3),
+ ('comp_zip', 10),
+ ('comp_city', 22),
+ ('padding', 9),
+ #seg3
+ ('seg_num3', 2),
+ ('option_id_bank', 1),
+ ('partner_bank_ident', 70),
+ ('partner_bank_iban', 34),
+ ('padding', 21),
+ #seg4
+ ('seg_num4', 2),
+ ('partner_name', 35),
+ ('partner_street', 35),
+ ('partner_country', 3),
+ ('partner_zip', 10),
+ ('partner_city', 22),
+ ('padding', 21),
+ #seg5
+ ('seg_num5', 2),
+ ('option_motif', 1),
+ ('reference', 105),
+ ('format', 1),
+ ('padding', 19)
+ ]
+ self.pre.update( {
+ 'partner_bank_clearing': '',
+ 'partner_cpt_benef': '',
+ 'type_paiement': '0',
+ 'genre_trans': '836',
+ 'conv_cours': '',
+ 'reference': self.global_values['reference'],
+ 'ref2': '',
+ 'ref3': '',
+ 'format': '2'
+ })
+ self.post.update({'option_motif': 'U'})
class record_gt890(record):
- """
- Total
- """
- def init_local_context(self):
- self.fields = [
- ('seg_num1', 2),
- #header
- ('date_value_hdr', 6),
- ('partner_bank_clearing', 12),
- ('zero5', 5),
- ('creation_date', 6),
- ('comp_bank_clearing', 7),
- ('uid', 5),
- ('sequence', 5),
- ('genre_trans', 3),
- ('type_paiement', 1),
- ('flag', 1),
- #total
- ('amount_total', 16),
- ('padding', 59)
- ]
- self.pre.update({'partner_bank_clearing': '', 'partner_cpt_benef': '',
- 'company_bank_clearing': '', 'genre_trans': '890'})
+ """
+ Total
+ """
+ def init_local_context(self):
+ self.fields = [
+ ('seg_num1', 2),
+ #header
+ ('date_value_hdr', 6),
+ ('partner_bank_clearing', 12),
+ ('zero5', 5),
+ ('creation_date', 6),
+ ('comp_bank_clearing', 7),
+ ('uid', 5),
+ ('sequence', 5),
+ ('genre_trans', 3),
+ ('type_paiement', 1),
+ ('flag', 1),
+ #total
+ ('amount_total', 16),
+ ('padding', 59)
+ ]
+ self.pre.update({'partner_bank_clearing': '', 'partner_cpt_benef': '',
+ 'company_bank_clearing': '', 'genre_trans': '890'})
def c_ljust(s, size):
- """
- check before calling ljust
- """
- s= s or ''
- if len(s) > size:
- s= s[:size]
- s = s.decode('utf-8').encode('latin1','replace').ljust(size)
- return s
+ """
+ check before calling ljust
+ """
+ s= s or ''
+ if len(s) > size:
+ s= s[:size]
+ s = s.decode('utf-8').encode('latin1','replace').ljust(size)
+ return s
def _create_dta(obj, cr, uid, data, context):
- v={}
- v['uid'] = str(uid)
- v['creation_date']= time.strftime('%y%m%d')
- dta=''
+ v={}
+ v['uid'] = str(uid)
+ v['creation_date']= time.strftime('%y%m%d')
+ dta=''
- pool = pooler.get_pool(cr.dbname)
- payment_obj = pool.get('payment.order')
- attachment_obj = pool.get('ir.attachment')
+ pool = pooler.get_pool(cr.dbname)
+ payment_obj = pool.get('payment.order')
+ attachment_obj = pool.get('ir.attachment')
- payment = payment_obj.browse(cr, uid, data['id'], context=context)
+ payment = payment_obj.browse(cr, uid, data['id'], context=context)
- if not payment.mode or payment.mode.type.code != 'dta':
- raise wizard.except_wizard(_('Error'),
- _('No payment mode or payment type code invalid.'))
- bank = payment.mode.bank_id
- if not bank:
- raise wizard.except_wizard(_('Error'), _('No bank account for the company.'))
+ if not payment.mode or payment.mode.type.code != 'dta':
+ raise wizard.except_wizard(_('Error'),
+ _('No payment mode or payment type code invalid.'))
+ bank = payment.mode.bank_id
+ if not bank:
+ raise wizard.except_wizard(_('Error'), _('No bank account for the company.'))
- v['comp_bank_name']= bank.bank and bank.bank.name or False
- v['comp_bank_clearing'] = bank.bank.clearing
+ v['comp_bank_name']= bank.bank and bank.bank.name or False
+ v['comp_bank_clearing'] = bank.bank.clearing
- if not v['comp_bank_clearing']:
- raise wizard.except_wizard(_('Error'),
- _('You must provide a Clearing Number for your bank account.'))
+ if not v['comp_bank_clearing']:
+ raise wizard.except_wizard(_('Error'),
+ _('You must provide a Clearing Number for your bank account.'))
- user = pool.get('res.users').browse(cr,uid,[uid])[0]
- company= user.company_id
- #XXX dirty code use get_addr
- co_addr= company.partner_id.address[0]
- v['comp_country'] = co_addr.country_id and co_addr.country_id.name or ''
- v['comp_street'] = co_addr.street or ''
- v['comp_zip'] = co_addr.zip
- v['comp_city'] = co_addr.city
- v['comp_name'] = co_addr.name
- v['comp_dta'] = bank.dta_code or '' #XXX not mandatory in pratice
+ user = pool.get('res.users').browse(cr,uid,[uid])[0]
+ company= user.company_id
+ #XXX dirty code use get_addr
+ co_addr= company.partner_id.address[0]
+ v['comp_country'] = co_addr.country_id and co_addr.country_id.name or ''
+ v['comp_street'] = co_addr.street or ''
+ v['comp_zip'] = co_addr.zip
+ v['comp_city'] = co_addr.city
+ v['comp_name'] = co_addr.name
+ v['comp_dta'] = bank.dta_code or '' #XXX not mandatory in pratice
- v['comp_bank_number'] = bank.acc_number or ''
- if bank.iban:
- v['comp_bank_iban'] = bank.iban.replace(' ','') or ''
- else:
- v['comp_bank_iban'] = ''
- if not v['comp_bank_iban']:
- raise wizard.except_wizard(_('Error'),
- _('No IBAN for the company bank account.'))
+ v['comp_bank_number'] = bank.acc_number or ''
+ if bank.iban:
+ v['comp_bank_iban'] = bank.iban.replace(' ','') or ''
+ else:
+ v['comp_bank_iban'] = ''
+ if not v['comp_bank_iban']:
+ raise wizard.except_wizard(_('Error'),
+ _('No IBAN for the company bank account.'))
- dta_line_obj = pool.get('account.dta.line')
- res_partner_bank_obj = pool.get('res.partner.bank')
+ dta_line_obj = pool.get('account.dta.line')
+ res_partner_bank_obj = pool.get('res.partner.bank')
- seq= 1
- amount_tot = 0
- amount_currency_tot = 0
+ seq= 1
+ amount_tot = 0
+ amount_currency_tot = 0
- for pline in payment.line_ids:
- if not pline.bank_id:
- raise wizard.except_wizard(_('Error'), _('No bank account defined\n' \
- 'on line: %s') % pline.name)
- if not pline.bank_id.bank:
- raise wizard.except_wizard(_('Error'), _('No bank defined\n' \
- 'for the bank account: %s\n' \
- 'on the partner: %s\n' \
- 'on line: %s') + (pline.bank_id.state, pline.partner_id.name, pline.name))
+ for pline in payment.line_ids:
+ if not pline.bank_id:
+ raise wizard.except_wizard(_('Error'), _('No bank account defined\n' \
+ 'on line: %s') % pline.name)
+ if not pline.bank_id.bank:
+ raise wizard.except_wizard(_('Error'), _('No bank defined\n' \
+ 'for the bank account: %s\n' \
+ 'on the partner: %s\n' \
+ 'on line: %s') + (pline.bank_id.state, pline.partner_id.name, pline.name))
- v['sequence'] = str(seq).rjust(5).replace(' ', '0')
- v['amount_to_pay']= str(pline.amount_currency).replace('.', ',')
- v['number'] = pline.name
- v['currency'] = pline.currency.code
+ v['sequence'] = str(seq).rjust(5).replace(' ', '0')
+ v['amount_to_pay']= str(pline.amount_currency).replace('.', ',')
+ v['number'] = pline.name
+ v['currency'] = pline.currency.code
- v['partner_bank_name'] = pline.bank_id.bank.name or False
- v['partner_bank_clearing'] = pline.bank_id.bank.clearing or False
- if not v['partner_bank_name'] :
- raise wizard.except_wizard(_('Error'), _('No bank name defined\n' \
- 'for the bank account: %s\n' \
- 'on the partner: %s\n' \
- 'on line: %s') % (pline.bank_id.state, pline.partner_id.name, pline.name))
+ v['partner_bank_name'] = pline.bank_id.bank.name or False
+ v['partner_bank_clearing'] = pline.bank_id.bank.clearing or False
+ if not v['partner_bank_name'] :
+ raise wizard.except_wizard(_('Error'), _('No bank name defined\n' \
+ 'for the bank account: %s\n' \
+ 'on the partner: %s\n' \
+ 'on line: %s') % (pline.bank_id.state, pline.partner_id.name, pline.name))
- v['partner_bank_iban']= pline.bank_id.iban or False
- v['partner_bank_number']= pline.bank_id.acc_number \
- and pline.bank_id.acc_number.replace('.','').replace('-','') \
- or False
- v['partner_post_number']= pline.bank_id.post_number \
- and pline.bank_id.post_number.replace('.', '').replace('-', '') \
- or False
- v['partner_bvr'] = pline.bank_id.bvr_number or ''
- if v['partner_bvr']:
- v['partner_bvr'] = v['partner_bvr'].replace('-','')
- if len(v['partner_bvr']) < 9:
- v['partner_bvr'] = v['partner_bvr'][:2] + '0' * \
- (9 - len(v['partner_bvr'])) + v['partner_bvr'][2:]
+ v['partner_bank_iban']= pline.bank_id.iban or False
+ v['partner_bank_number']= pline.bank_id.acc_number \
+ and pline.bank_id.acc_number.replace('.','').replace('-','') \
+ or False
+ v['partner_post_number']= pline.bank_id.post_number \
+ and pline.bank_id.post_number.replace('.', '').replace('-', '') \
+ or False
+ v['partner_bvr'] = pline.bank_id.bvr_number or ''
+ if v['partner_bvr']:
+ v['partner_bvr'] = v['partner_bvr'].replace('-','')
+ if len(v['partner_bvr']) < 9:
+ v['partner_bvr'] = v['partner_bvr'][:2] + '0' * \
+ (9 - len(v['partner_bvr'])) + v['partner_bvr'][2:]
- if pline.bank_id.bank:
- v['partner_bank_city'] = pline.bank_id.bank.city or False
- v['partner_bank_street'] = pline.bank_id.bank.street or ''
- v['partner_bank_zip'] = pline.bank_id.bank.zip or ''
- v['partner_bank_country'] = pline.bank_id.bank.country and \
- pline.bank_id.bank.country.name or ''
+ if pline.bank_id.bank:
+ v['partner_bank_city'] = pline.bank_id.bank.city or False
+ v['partner_bank_street'] = pline.bank_id.bank.street or ''
+ v['partner_bank_zip'] = pline.bank_id.bank.zip or ''
+ v['partner_bank_country'] = pline.bank_id.bank.country and \
+ pline.bank_id.bank.country.name or ''
- v['partner_bank_code'] = pline.bank_id.bank.bic
- v['reference'] = pline.move_line_id.ref
- v['partner_name'] = pline.partner_id and pline.partner_id.name or ''
- if pline.partner_id and pline.partner_id.address \
- and pline.partner_id.address[0]:
- v['partner_street'] = pline.partner_id.address[0].street
- v['partner_city']= pline.partner_id.address[0].city
- v['partner_zip']= pline.partner_id.address[0].zip
- # If iban => country=country code for space reason
- elec_pay = pline.bank_id.state #Bank type
- if elec_pay == 'iban':
- v['partner_country']= pline.partner_id.address[0].country_id \
- and pline.partner_id.address[0].country_id.code+'-' \
- or ''
- else:
- v['partner_country']= pline.partner_id.address[0].country_id \
- and pline.partner_id.address[0].country_id.name \
- or ''
- else:
- v['partner_street'] =''
- v['partner_city']= ''
- v['partner_zip']= ''
- v['partner_country']= ''
- raise wizard.except_wizard(_('Error'), _('No address defined \n' \
- 'for the partner: %s\n' \
- 'on line: %s') % (pline.partner_id.name, pline.name))
+ v['partner_bank_code'] = pline.bank_id.bank.bic
+ v['reference'] = pline.move_line_id.ref
+ # Add support for owner of the account if exists..
+ if pline.bank_id.owner_name:
+ v['partner_name'] = pline.bank_id.owner_name
+ else:
+ v['partner_name'] = pline.partner_id and pline.partner_id.name or ''
+
+ if pline.partner_id and pline.partner_id.address \
+ and pline.partner_id.address[0]:
+ v['partner_street'] = pline.partner_id.address[0].street
+ v['partner_city']= pline.partner_id.address[0].city
+ v['partner_zip']= pline.partner_id.address[0].zip
+ # If iban => country=country code for space reason
+ elec_pay = pline.bank_id.state #Bank type
+ if elec_pay == 'iban':
+ v['partner_country']= pline.partner_id.address[0].country_id \
+ and pline.partner_id.address[0].country_id.code+'-' \
+ or ''
+ else:
+ v['partner_country']= pline.partner_id.address[0].country_id \
+ and pline.partner_id.address[0].country_id.name \
+ or ''
+ else:
+ v['partner_street'] =''
+ v['partner_city']= ''
+ v['partner_zip']= ''
+ v['partner_country']= ''
+ raise wizard.except_wizard('Error', 'No address defined \n' \
+ 'for the partner: ' + pline.partner_id.name + '\n' \
+ 'on line: ' + pline.name)
- if pline.order_id.date_planned :
- date_value = mx.DateTime.strptime(pline.order_id.date_planned, '%Y-%m-%d')
- elif pline.date :
- date_value = mx.DateTime.strptime(pline.date, '%Y-%m-%d')
- else :
- date_value = mx.DateTime.now()
- v['date_value'] = date_value.strftime("%y%m%d")
+ if pline.order_id.date_planned :
+ date_value = mx.DateTime.strptime(pline.order_id.date_planned, '%Y-%m-%d')
+ elif pline.date :
+ date_value = mx.DateTime.strptime(pline.date, '%Y-%m-%d')
+ else :
+ date_value = mx.DateTime.now()
+ v['date_value'] = date_value.strftime("%y%m%d")
- # si compte iban -> iban (836)
- # si payment structure -> bvr (826)
- # si non -> (827)
+ # si compte iban -> iban (836)
+ # si payment structure -> bvr (826)
+ # si non -> (827)
- if elec_pay == 'dta_iban':
- # If iban => country=country code for space reason
- v['comp_country'] = co_addr.country_id and co_addr.country_id.code+'-' or ''
- record_type = record_gt836
- if not v['partner_bank_iban']:
- raise wizard.except_wizard(_('Error'), _('No IBAN defined \n' \
- 'for the bank account: %s\n' + \
- 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] , pline.name))
+ if elec_pay == 'dta_iban':
+ # If iban => country=country code for space reason
+ v['comp_country'] = co_addr.country_id and co_addr.country_id.code+'-' or ''
+ record_type = record_gt836
+ if not v['partner_bank_iban']:
+ raise wizard.except_wizard(_('Error'), _('No IBAN defined \n' \
+ 'for the bank account: %s\n' + \
+ 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] , pline.name))
- if v['partner_bank_code'] : # bank code is swift (BIC address)
- v['option_id_bank']= 'A'
- v['partner_bank_ident']= v['partner_bank_code']
- elif v['partner_bank_city']:
+ if v['partner_bank_code'] : # bank code is swift (BIC address)
+ v['option_id_bank']= 'A'
+ v['partner_bank_ident']= v['partner_bank_code']
+ elif v['partner_bank_city']:
- v['option_id_bank']= 'D'
- v['partner_bank_ident']= v['partner_bank_name'] \
- + ' ' + v['partner_bank_street'] \
- + ' ' + v['partner_bank_zip'] \
- + ' ' + v['partner_bank_city'] \
- + ' ' + v['partner_bank_country']
- else:
- raise wizard.except_wizard(_('Error'), _('You must provide the bank city '
- 'or the bic code for the partner bank: \n %d\n' + \
- 'on line: %s') %(res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1], pline.name))
+ v['option_id_bank']= 'D'
+ v['partner_bank_ident']= v['partner_bank_name'] \
+ + ' ' + v['partner_bank_street'] \
+ + ' ' + v['partner_bank_zip'] \
+ + ' ' + v['partner_bank_city'] \
+ + ' ' + v['partner_bank_country']
+ else:
+ raise wizard.except_wizard(_('Error'), _('You must provide the bank city '
+ 'or the bic code for the partner bank: \n %d\n' + \
+ 'on line: %s') %(res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1], pline.name))
- elif elec_pay == 'bvrbank' or elec_pay == 'bvrpost':
- from tools import mod10r
- if v['reference']:
- v['reference'] = v['reference'].replace(' ',
- '').rjust(27).replace(' ', '0')
- if not v['reference'] \
- or mod10r(v['reference'][:-1]) != v['reference']:
- raise wizard.except_wizard(_('Error'), _('You must provide ' \
- 'a valid BVR reference number \n' \
- 'for the line: %s') % pline.name)
- if not v['partner_bvr']:
- raise wizard.except_wizard(_('Error'), _('You must provide a BVR number\n'
- 'for the bank account: %s' \
- 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id],context)[0][1] ,pline.name))
- record_type = record_gt826
+ elif elec_pay == 'bvrbank' or elec_pay == 'bvrpost':
+ from tools import mod10r
+ if v['reference']:
+ v['reference'] = v['reference'].replace(' ',
+ '').rjust(27).replace(' ', '0')
+ if not v['reference'] \
+ or (mod10r(v['reference'][:-1]) != v['reference'] and \
+ not len(v['reference']) == 15):
+ raise wizard.except_wizard(_('Error'), _('You must provide ' \
+ 'a valid BVR reference number \n' \
+ 'for the line: %s') % pline.name)
+ if not v['partner_bvr']:
+ raise wizard.except_wizard(_('Error'), _('You must provide a BVR number\n'
+ 'for the bank account: %s' \
+ 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id],context)[0][1] ,pline.name))
+ record_type = record_gt826
- elif elec_pay == 'bvbank':
- if not v['partner_bank_number'] :
- if v['partner_bank_iban'] :
- v['partner_bank_number']= v['partner_bank_iban']
- else:
- raise wizard.except_wizard(_('Error'), _('You must provide ' \
- 'a bank number \n' \
- 'for the partner bank: %s\n' \
- 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] , pline.name))
- if not v['partner_bank_clearing']:
- raise wizard.except_wizard(_('Error'), _('You must provide ' \
- 'a Clearing Number\n' \
- 'for the partner bank: %s\n' \
- 'on line %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] , pline.name))
- v['partner_bank_number'] = '/C/'+v['partner_bank_number']
- record_type = record_gt827
- elif elec_pay == 'bvpost':
- if not v['partner_post_number']:
- raise wizard.except_wizard(_('Error'), _('You must provide ' \
- 'a post number \n' \
- 'for the partner bank: %s\n' \
- 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] ,pline.name))
- v['partner_bank_clearing']= ''
- v['partner_bank_number'] = '/C/'+v['partner_post_number']
- record_type = record_gt827
- else:
- raise wizard.except_wizard(_('Error'), _('The Bank type %s of the bank account: %s is not supported') \
+ elif elec_pay == 'bvbank':
+ if not v['partner_bank_number'] :
+ if v['partner_bank_iban'] :
+ v['partner_bank_number']= v['partner_bank_iban']
+ else:
+ raise wizard.except_wizard(_('Error'), _('You must provide ' \
+ 'a bank number \n' \
+ 'for the partner bank: %s\n' \
+ 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] , pline.name))
+ if not v['partner_bank_clearing']:
+ raise wizard.except_wizard(_('Error'), _('You must provide ' \
+ 'a Clearing Number\n' \
+ 'for the partner bank: %s\n' \
+ 'on line %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] , pline.name))
+ v['partner_bank_number'] = '/C/'+v['partner_bank_number']
+ record_type = record_gt827
+ elif elec_pay == 'bvpost':
+ if not v['partner_post_number']:
+ raise wizard.except_wizard(_('Error'), _('You must provide ' \
+ 'a post number \n' \
+ 'for the partner bank: %s\n' \
+ 'on line: %s') % (res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1] ,pline.name))
+ v['partner_bank_clearing']= ''
+ v['partner_bank_number'] = '/C/'+v['partner_post_number']
+ record_type = record_gt827
+ else:
+ raise wizard.except_wizard(_('Error'), _('The Bank type %s of the bank account: %s is not supported') \
% (elec_pay, res_partner_bank_obj.name_get(cr, uid, [pline.bank_id.id], context)[0][1],))
- dta_line = record_type(v).generate()
+ dta_line = record_type(v).generate()
- dta = dta + dta_line
- amount_tot += pline.amount
- amount_currency_tot += pline.amount_currency
- seq += 1
+ dta = dta + dta_line
+ amount_tot += pline.amount
+ amount_currency_tot += pline.amount_currency
+ seq += 1
- # segment total
- v['amount_total'] = str(amount_currency_tot).replace('.',',')
- v['sequence'] = str(seq).rjust(5).replace(' ','0')
- if dta :
- dta = dta + record_gt890(v).generate()
+ # segment total
+ v['amount_total'] = str(amount_currency_tot).replace('.',',')
+ v['sequence'] = str(seq).rjust(5).replace(' ','0')
+ if dta :
+ dta = dta + record_gt890(v).generate()
- dta_data= base64.encodestring(dta)
- payment_obj.set_done(cr, uid, data['id'], context)
- attachment_obj.create(cr, uid, {
- 'name': 'DTA',
- 'datas': dta_data,
- 'datas_fname': 'DTA.txt',
- 'res_model': 'payment.order',
- 'res_id': data['id'],
- }, context=context)
- return {'dta': dta_data}
+ dta_data= base64.encodestring(dta)
+ payment_obj.set_done(cr, uid, data['id'], context)
+ attachment_obj.create(cr, uid, {
+ 'name': 'DTA',
+ 'datas': dta_data,
+ 'datas_fname': 'DTA.txt',
+ 'res_model': 'payment.order',
+ 'res_id': data['id'],
+ }, context=context)
+ return {'dta': dta_data}
class wizard_dta_create(wizard.interface):
- states = {
- 'init' : {
- 'actions' : [_create_dta],
- 'result' : {'type' : 'form',
- 'arch' : FORM,
- 'fields' : FIELDS,
- 'state' : [('end', 'OK', 'gtk-ok', True)]
- }
- },
- }
+ states = {
+ 'init' : {
+ 'actions' : [_create_dta],
+ 'result' : {'type' : 'form',
+ 'arch' : FORM,
+ 'fields' : FIELDS,
+ 'state' : [('end', 'OK', 'gtk-ok', True)]
+ }
+ },
+ }
wizard_dta_create('account.dta_create')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_fr/report/base_report.py b/addons/l10n_fr/report/base_report.py
index 080f289ef29..d12a76298cc 100644
--- a/addons/l10n_fr/report/base_report.py
+++ b/addons/l10n_fr/report/base_report.py
@@ -31,7 +31,7 @@ from report import report_sxw
class base_report(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(base_report, self).__init__(cr, uid, name, context)
+ super(base_report, self).__init__(cr, uid, name, context=context)
self.localcontext.update( {
'time': time,
'_load': self._load,
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 423121eb64f..5ba9d487400 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -363,6 +363,8 @@ class mrp_production(osv.osv):
parent_move_line=get_parent_move(production['move_prod_id'][0])
if parent_move_line:
move = move_obj.browse(cr,uid,parent_move_line)
+ #TODO: fix me sale module can not be used here,
+ #as may be mrp can be installed without sale module
if field_name=='name':
res[production['id']]=move.sale_line_id and move.sale_line_id.order_id.name or False
if field_name=='client_order_ref':
@@ -978,6 +980,8 @@ class mrp_procurement(osv.osv):
def action_confirm(self, cr, uid, ids, context={}):
for procurement in self.browse(cr, uid, ids):
+ if procurement.product_qty <= 0.00:
+ raise osv.except_osv(_('Data Insufficient !'), _('Please check the Quantity of Procurement Order(s), it should not be less than 1!'))
if procurement.product_id.type in ('product', 'consu'):
if not procurement.move_id:
source = procurement.location_id.id
diff --git a/addons/mrp/report/order.py b/addons/mrp/report/order.py
index 5660f833194..3f5ba86d59c 100644
--- a/addons/mrp/report/order.py
+++ b/addons/mrp/report/order.py
@@ -26,7 +26,7 @@ import pooler
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/mrp_operations/report/mrp_code_barcode.py b/addons/mrp_operations/report/mrp_code_barcode.py
index 4433565a614..d216e9ef0cd 100755
--- a/addons/mrp_operations/report/mrp_code_barcode.py
+++ b/addons/mrp_operations/report/mrp_code_barcode.py
@@ -25,7 +25,7 @@ from report import report_sxw
class code_barcode(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(code_barcode, self).__init__(cr, uid, name, context)
+ super(code_barcode, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/mrp_operations/report/mrp_wc_barcode.py b/addons/mrp_operations/report/mrp_wc_barcode.py
index 9534fd412db..bc8f4e2ccf6 100755
--- a/addons/mrp_operations/report/mrp_wc_barcode.py
+++ b/addons/mrp_operations/report/mrp_wc_barcode.py
@@ -25,7 +25,7 @@ from report import report_sxw
class workcenter_code(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(workcenter_code, self).__init__(cr, uid, name, context)
+ super(workcenter_code, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/mrp_repair/report/order.py b/addons/mrp_repair/report/order.py
index d2bbb464e39..993c973c32f 100644
--- a/addons/mrp_repair/report/order.py
+++ b/addons/mrp_repair/report/order.py
@@ -26,7 +26,7 @@ import pooler
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'total': self.total,
diff --git a/addons/point_of_sale/report/pos_details.py b/addons/point_of_sale/report/pos_details.py
index 1d95f820f3b..8c190e73fac 100644
--- a/addons/point_of_sale/report/pos_details.py
+++ b/addons/point_of_sale/report/pos_details.py
@@ -111,7 +111,7 @@ class pos_details(report_sxw.rml_parse):
return '%s - %s' % (min_date, max_date)
def __init__(self, cr, uid, name, context):
- super(pos_details, self).__init__(cr, uid, name, context)
+ super(pos_details, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
diff --git a/addons/point_of_sale/report/pos_details_summary.py b/addons/point_of_sale/report/pos_details_summary.py
index cca2ec402ff..4f9dcc89232 100644
--- a/addons/point_of_sale/report/pos_details_summary.py
+++ b/addons/point_of_sale/report/pos_details_summary.py
@@ -108,7 +108,7 @@ class pos_details_summary(report_sxw.rml_parse):
return '%s - %s' % (min_date, max_date)
def __init__(self, cr, uid, name, context):
- super(pos_details_summary, self).__init__(cr, uid, name, context)
+ super(pos_details_summary, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
diff --git a/addons/point_of_sale/report/pos_invoice.py b/addons/point_of_sale/report/pos_invoice.py
index 40e5a30561c..ea6162d7508 100644
--- a/addons/point_of_sale/report/pos_invoice.py
+++ b/addons/point_of_sale/report/pos_invoice.py
@@ -28,7 +28,7 @@ from tools.translate import _
class pos_invoice(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_invoice, self).__init__(cr, uid, name, context)
+ super(pos_invoice, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
})
diff --git a/addons/point_of_sale/report/pos_lines.py b/addons/point_of_sale/report/pos_lines.py
index 513af41c90a..ff766ce3d68 100644
--- a/addons/point_of_sale/report/pos_lines.py
+++ b/addons/point_of_sale/report/pos_lines.py
@@ -26,7 +26,7 @@ from report import report_sxw
class pos_lines(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(pos_lines, self).__init__(cr, uid, name, context)
+ super(pos_lines, self).__init__(cr, uid, name, context=context)
self.total = 0.0
self.localcontext.update({
'time': time,
diff --git a/addons/point_of_sale/report/pos_receipt.py b/addons/point_of_sale/report/pos_receipt.py
index 19ead1061e5..b8e9156d1d9 100644
--- a/addons/point_of_sale/report/pos_receipt.py
+++ b/addons/point_of_sale/report/pos_receipt.py
@@ -28,7 +28,7 @@ import pooler
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
partner = user.company_id.partner_id
diff --git a/addons/product/report/product_pricelist.py b/addons/product/report/product_pricelist.py
index 0a61e9294c3..461e95e3d9d 100644
--- a/addons/product/report/product_pricelist.py
+++ b/addons/product/report/product_pricelist.py
@@ -26,7 +26,7 @@ import pooler
class product_pricelist(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(product_pricelist, self).__init__(cr, uid, name, context)
+ super(product_pricelist, self).__init__(cr, uid, name, context=context)
self.pricelist=False
self.quantity=[]
self.localcontext.update({
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index f1d028fa733..1f6f29e76d4 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -29,18 +29,15 @@ from tools.translate import _
class project_work(osv.osv):
_inherit = "project.task.work"
_description = "Task Work"
- def create(self, cr, uid, vals, *args, **kwargs):
-
- obj = self.pool.get('hr.analytic.timesheet')
- vals_line = {}
- obj_task = self.pool.get('project.task').browse(cr, uid, vals['task_id'])
+ def get_user_related_details(self, cr, uid, user_id):
+ res = {}
emp_obj = self.pool.get('hr.employee')
- emp_id = emp_obj.search(cr, uid, [('user_id', '=', vals.get('user_id', uid))])
-
+ emp_id = emp_obj.search(cr, uid, [('user_id', '=', user_id)])
if not emp_id:
+ user_name = self.pool.get('res.users').read(cr, uid, [user_id], ['name'])[0]['name']
raise osv.except_osv(_('Bad Configuration !'),
- _('No employee defined for this user. You must create one.'))
+ _('No employee defined for user "%s". You must create one.')% (user_name,))
emp = self.pool.get('hr.employee').browse(cr, uid, emp_id[0])
if not emp.product_id:
raise osv.except_osv(_('Bad Configuration !'),
@@ -53,9 +50,22 @@ class project_work(osv.osv):
a = emp.product_id.product_tmpl_id.property_account_expense.id
if not a:
a = emp.product_id.categ_id.property_account_expense_categ.id
-
+ if not a:
+ raise osv.except_osv(_('Bad Configuration !'),
+ _('No product and product category property account defined on the related employee.\nFill in the timesheet tab of the employee form.'))
+ res['product_id'] = emp.product_id.id
+ res['journal_id'] = emp.journal_id.id
+ res['general_account_id'] = a
+ return res
+
+ def create(self, cr, uid, vals, *args, **kwargs):
+ obj = self.pool.get('hr.analytic.timesheet')
+ vals_line = {}
+ obj_task = self.pool.get('project.task').browse(cr, uid, vals['task_id'])
+ result = self.get_user_related_details(cr, uid, vals.get('user_id', uid))
vals_line['name'] = '%s: %s' % (tools.ustr(obj_task.name), tools.ustr(vals['name']) or '/')
vals_line['user_id'] = vals['user_id']
+ vals_line['product_id'] = result['product_id']
vals_line['date'] = vals['date'][:10]
vals_line['unit_amount'] = vals['hours']
acc_id = obj_task.project_id.category_id.id
@@ -63,8 +73,8 @@ class project_work(osv.osv):
res = obj.on_change_account_id(cr, uid, False, acc_id)
if res.get('value'):
vals_line.update(res['value'])
- vals_line['general_account_id'] = a
- vals_line['journal_id'] = emp.journal_id.id
+ vals_line['general_account_id'] = result['general_account_id']
+ vals_line['journal_id'] = result['journal_id']
vals_line['amount'] = 00.0
timeline_id = obj.create(cr, uid, vals_line, {})
@@ -83,9 +93,13 @@ class project_work(osv.osv):
if line_id in list_avail_ids:
obj = self.pool.get('hr.analytic.timesheet')
if 'name' in vals:
- vals_line['name'] = '%s: %s' % (tools.ustr(task.name), tools.ustr(vals['name']) or '/')
+ vals_line['name'] = '%s: %s' % (tools.ustr(task.task_id.name), tools.ustr(vals['name']) or '/')
if 'user_id' in vals:
vals_line['user_id'] = vals['user_id']
+ result = self.get_user_related_details(cr, uid, vals['user_id'])
+ vals_line['product_id'] = result['product_id']
+ vals_line['general_account_id'] = result['general_account_id']
+ vals_line['journal_id'] = result['journal_id']
if 'date' in vals:
vals_line['date'] = vals['date'][:10]
if 'hours' in vals:
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 03479e40519..05128504ed5 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -443,7 +443,7 @@ class purchase_order_line(osv.osv):
'move_ids': fields.one2many('stock.move', 'purchase_line_id', 'Reservation', readonly=True, ondelete='set null'),
'move_dest_id': fields.many2one('stock.move', 'Reservation Destination', ondelete='set null'),
'price_unit': fields.float('Unit Price', required=True, digits=(16, int(config['price_accuracy']))),
- 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal'),
+ 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal', digits=(16, int(config['price_accuracy']))),
'notes': fields.text('Notes'),
'order_id': fields.many2one('purchase.order', 'Order Ref', select=True, required=True, ondelete='cascade'),
'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 1c65b1d6d94..bcda8944bd0 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -264,5 +264,13 @@
name="Purchase orders"
res_model="purchase.order"
src_model="res.partner"/>
+
+
+
diff --git a/addons/purchase/report/order.py b/addons/purchase/report/order.py
index 61aed4c039d..1e1b53e5734 100644
--- a/addons/purchase/report/order.py
+++ b/addons/purchase/report/order.py
@@ -26,7 +26,7 @@ import pooler
class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context)
+ super(order, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'get_line_tax': self._get_line_tax,
diff --git a/addons/purchase/report/request_quotation.py b/addons/purchase/report/request_quotation.py
index 08842fe0bc5..e3a9b342206 100644
--- a/addons/purchase/report/request_quotation.py
+++ b/addons/purchase/report/request_quotation.py
@@ -26,7 +26,7 @@ import pooler
class request_quotation(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
- super(request_quotation, self).__init__(cr, uid, name, context)
+ super(request_quotation, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'user': self.pool.get('res.users').browse(cr, uid, uid, context)
diff --git a/addons/purchase_manual/wizard/wizard_purchase_line_invoice.py b/addons/purchase_manual/wizard/wizard_purchase_line_invoice.py
index c3f38663e5d..fca0f0e443f 100644
--- a/addons/purchase_manual/wizard/wizard_purchase_line_invoice.py
+++ b/addons/purchase_manual/wizard/wizard_purchase_line_invoice.py
@@ -23,6 +23,7 @@ import wizard
import netsvc
import ir
import pooler
+from osv import osv
invoice_form = """
| |