Merge lp:~openbig/bigconsulting/account_invoice_cash_discount_milestone1 into lp:bigconsulting

Proposed by gpa(OpenERP)
Status: Merged
Merged at revision: 47
Proposed branch: lp:~openbig/bigconsulting/account_invoice_cash_discount_milestone1
Merge into: lp:bigconsulting
Diff against target: 636 lines (+217/-139)
5 files modified
account_invoice_cash_discount/account_invoice_cash_discount.py (+37/-33)
account_invoice_cash_discount/account_invoice_cash_discount_view.xml (+3/-1)
account_invoice_cash_discount/wizard/account_pay_invoice.py (+158/-93)
account_invoice_cash_discount/wizard/account_pay_invoice_view.xml (+1/-1)
account_invoice_cash_discount/wizard/invoice_statement_payment.py (+18/-11)
To merge this branch: bzr merge lp:~openbig/bigconsulting/account_invoice_cash_discount_milestone1
Reviewer Review Type Date Requested Status
openbig Pending
Review via email: mp+29865@code.launchpad.net

Description of the change

changes in the milestone1 of the account_invoice_cash_discount

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'account_invoice_cash_discount/account_invoice_cash_discount.py'
--- account_invoice_cash_discount/account_invoice_cash_discount.py 2010-08-21 12:43:18 +0000
+++ account_invoice_cash_discount/account_invoice_cash_discount.py 2010-07-14 12:24:45 +0000
@@ -45,6 +45,8 @@
45 'credit_account_id': fields.many2one('account.account', 'Credit Account'),45 'credit_account_id': fields.many2one('account.account', 'Credit Account'),
46 'debit_account_id': fields.many2one('account.account', 'Debit Account'),46 'debit_account_id': fields.many2one('account.account', 'Debit Account'),
47 'payment_term_ids': fields.one2many('account.payment.term.line', 'cash_account_discount_id', 'Payment Term Lines'),47 'payment_term_ids': fields.one2many('account.payment.term.line', 'cash_account_discount_id', 'Payment Term Lines'),
48 'day_tolerance': fields.integer('Days Tolerance', digits=(16,6),required=True),
49 'sup_discount_account_id': fields.many2one('account.account', 'Supplier Discount Account',required=True),
48 }50 }
49account_cash_discount()51account_cash_discount()
5052
@@ -61,14 +63,11 @@
61 _inherit = "account.invoice"63 _inherit = "account.invoice"
62 64
63 def _get_amount(self, cr, uid, ids, resudial_amonut, payment_term, context=None):65 def _get_amount(self, cr, uid, ids, resudial_amonut, payment_term, context=None):
64
65 """66 """
66 This function return the Amount to paid according to the payment term cash discount payment term lines67 This function return the Amount to paid according to the payment term cash discount payment term lines
67 """68 """
68
69 if context is None:69 if context is None:
70 context = {}70 context = {}
71
72 tax_obj = self.pool.get('account.tax')71 tax_obj = self.pool.get('account.tax')
73 invoice = self.browse(cr, uid, ids[0], context=context)72 invoice = self.browse(cr, uid, ids[0], context=context)
74 73
@@ -203,12 +202,14 @@
203 dis = 0.0202 dis = 0.0
204 for discount_line in payment_term_lines.cash_discount_ids:203 for discount_line in payment_term_lines.cash_discount_ids:
205 if diff_day >= dis and diff_day <= discount_line.delay:204 if diff_day >= dis and diff_day <= discount_line.delay:
206 account_id = discount_line.discount_account_id.id205 if invoice.type in ('in_invoice', 'in_refund'):
206 account_id = discount_line.sup_discount_account_id.id
207 else:
208 account_id = discount_line.discount_account_id.id
207 dis = discount_line.delay 209 dis = discount_line.delay
208 return account_id 210 return account_id
209 211
210 def pay_and_reconcile(self, cr, uid, ids, pay_amount, pay_account_id, period_id, pay_journal_id, writeoff_acc_id, writeoff_period_id, writeoff_journal_id, context=None, name=''):212 def pay_and_reconcile(self, cr, uid, ids, pay_amount, pay_account_id, period_id, pay_journal_id, writeoff_acc_id, writeoff_period_id, writeoff_journal_id, context=None, name=''):
211
212 if context is None:213 if context is None:
213 context = {}214 context = {}
214 #TODO check if we can use different period for payment and the writeoff line215 #TODO check if we can use different period for payment and the writeoff line
@@ -220,15 +221,12 @@
220 move_line_obj = self.pool.get('account.move.line')221 move_line_obj = self.pool.get('account.move.line')
221 move_obj = self.pool.get('account.move')222 move_obj = self.pool.get('account.move')
222 223
223 if 'amount_currency' in context and context['amount_currency']:
224 amount_currency = context['amount_currency']
225 else:
226 amount_currency = invoice.residual
227 amount_discount = 0.0 224 amount_discount = 0.0
228 if invoice.payment_term:225 if invoice.payment_term:
229 # Return the discount on for the payment term226 # Return the discount on for the payment term
230 amount_discount = self._get_payment(cr, uid, ids, amount_currency, invoice.payment_term.id, context=context)227 amount_discount = self._get_payment(cr, uid, ids, pay_amount, invoice.payment_term.id, context=context)
231 228
229
232 src_account_id = invoice.account_id.id230 src_account_id = invoice.account_id.id
233 # Take the seq as name for move231 # Take the seq as name for move
234 types = {'out_invoice': -1, 'in_invoice': 1, 'out_refund': 1, 'in_refund': -1}232 types = {'out_invoice': -1, 'in_invoice': 1, 'out_refund': 1, 'in_refund': -1}
@@ -257,7 +255,7 @@
257 255
258 if 'cash_amount' in context and context['cash_amount']:256 if 'cash_amount' in context and context['cash_amount']:
259 discount_amount = context['cash_amount']257 discount_amount = context['cash_amount']
260 258
261 # Pay attention to the sign for both debit/credit AND amount_currency259 # Pay attention to the sign for both debit/credit AND amount_currency
262 l1 = {260 l1 = {
263 'debit': direction * (pay_amount)>0 and direction * (pay_amount),261 'debit': direction * (pay_amount)>0 and direction * (pay_amount),
@@ -270,7 +268,8 @@
270 'amount_currency':amount_currency and direction * amount_currency or 0.0,268 'amount_currency':amount_currency and direction * amount_currency or 0.0,
271 }269 }
272 270
273 ### if we change the amount paid and in the disocunt then it used the changes discount 271 ### if we change the amount paid and in the disocunt then it used the changes discount
272
274 if amount_discount != discount_amount and discount_amount>0.0:273 if amount_discount != discount_amount and discount_amount>0.0:
275 amount_discount = discount_amount274 amount_discount = discount_amount
276 275
@@ -291,7 +290,8 @@
291 l1['name'] = name290 l1['name'] = name
292 l2['name'] = name291 l2['name'] = name
293 lines = [(0, 0, l1), (0, 0, l2)]292 lines = [(0, 0, l1), (0, 0, l2)]
294 293
294 ### When we make payment by pay invoice wizard and if found the taxes move then directly take the entry from the wizard
295 if 'tax_move_ids' in context and context['tax_move_ids']:295 if 'tax_move_ids' in context and context['tax_move_ids']:
296 move_line = context['tax_move_ids']296 move_line = context['tax_move_ids']
297 for move_line_id in move_line:297 for move_line_id in move_line:
@@ -337,25 +337,28 @@
337 }337 }
338 l3['name'] = name338 l3['name'] = name
339 lines.append((0, 0, l3))339 lines.append((0, 0, l3))
340 340
341 ### When we make payment by pay invoice wizard and if found the discount moves in wizard discount move then directly take the entry from the wizard
341 if 'discount_move_ids' in context and context['discount_move_ids']: 342 if 'discount_move_ids' in context and context['discount_move_ids']:
342 dis_move_id = context['discount_move_ids'][0]343 move_line = context['discount_move_ids']
343 move_id = move_line_obj.search(cr, uid,[('move_id','=',dis_move_id)])344 for move_line_id in move_line:
344 move_line_data = move_line_obj.browse(cr, uid, move_id[0])345 move_line_data = move_line_obj.browse(cr, uid,move_line_id)
345 l4 = {346 l4 = {
346 'debit': move_line_data.debit,347 'debit': move_line_data.debit,
347 'credit':move_line_data.credit,348 'credit':move_line_data.credit,
348 'account_id': move_line_data.account_id.id,349 'account_id': move_line_data.account_id.id,
349 'partner_id': move_line_data.partner_id.id,350 'partner_id': move_line_data.partner_id.id,
350 'ref':move_line_data.ref,351 'ref':move_line_data.ref,
351 'date': move_line_data.date,352 'date': move_line_data.date,
352 'currency_id':currency_id,353 'currency_id':currency_id,
353 'amount_currency':amount_currency and direction * amount_currency or 0.0,354 'amount_currency':amount_currency and direction * amount_currency or 0.0,
354 'name':move_line_data.name,355 'name':move_line_data.name,
355 }356 'tax_code_id':move_line_data.tax_code_id.id,
356 lines.append((0, 0, l4))357 'tax_amount':move_line_data.tax_amount,
357 358 }
358 move_obj.unlink(cr, uid, context['discount_move_ids'])359 lines.append((0, 0, l4))
360 move_line_obj.unlink(cr, uid,[move_line_id])
361 move_obj.unlink(cr, uid,[move_line_data.move_id.id])
359 else:362 else:
360 if amount_discount>0:363 if amount_discount>0:
361 if 'account_id' in context and context['account_id']:364 if 'account_id' in context and context['account_id']:
@@ -376,7 +379,7 @@
376 }379 }
377 l4['name'] = name380 l4['name'] = name
378 lines.append((0, 0, l4))381 lines.append((0, 0, l4))
379382
380 move = {'ref': ref, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id, 'date': date}383 move = {'ref': ref, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id, 'date': date}
381 move_id = move_obj.create(cr, uid, move, context=context)384 move_id = move_obj.create(cr, uid, move, context=context)
382 385
@@ -420,5 +423,6 @@
420 type='many2one', relation='account.invoice', fnct_search=_invoice_search),423 type='many2one', relation='account.invoice', fnct_search=_invoice_search),
421 }424 }
422account_move_line()425account_move_line()
426
423# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:427# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
424428
425429
=== modified file 'account_invoice_cash_discount/account_invoice_cash_discount_view.xml'
--- account_invoice_cash_discount/account_invoice_cash_discount_view.xml 2010-08-21 12:43:18 +0000
+++ account_invoice_cash_discount/account_invoice_cash_discount_view.xml 2010-07-14 12:24:45 +0000
@@ -15,6 +15,8 @@
15 <field name="delay" select="1"/>15 <field name="delay" select="1"/>
16 <field name="discount" select="1"/>16 <field name="discount" select="1"/>
17 <field name="discount_account_id" />17 <field name="discount_account_id" />
18 <field name="day_tolerance"/>
19 <field name="sup_discount_account_id"/>
18 <group colspan="4">20 <group colspan="4">
19 <separator string="Related Payment Terms Lines" colspan="4"/>21 <separator string="Related Payment Terms Lines" colspan="4"/>
20 <field name="payment_term_ids" widget="one2many_list" nolabel="1"/>22 <field name="payment_term_ids" widget="one2many_list" nolabel="1"/>
@@ -96,8 +98,8 @@
96 <field name="inherit_id" ref="account.view_payment_term_line_form"/>98 <field name="inherit_id" ref="account.view_payment_term_line_form"/>
97 <field name="arch" type="xml">99 <field name="arch" type="xml">
98 <field name="days2" position="after">100 <field name="days2" position="after">
99 <label string="" colspan="2"/>
100 <field name="compl_cash_discount"/>101 <field name="compl_cash_discount"/>
102 <label string="" colspan="2"/>
101 </field> 103 </field>
102 </field>104 </field>
103 </record>105 </record>
104106
=== modified file 'account_invoice_cash_discount/wizard/account_pay_invoice.py'
--- account_invoice_cash_discount/wizard/account_pay_invoice.py 2010-07-06 13:32:32 +0000
+++ account_invoice_cash_discount/wizard/account_pay_invoice.py 2010-07-14 12:24:45 +0000
@@ -66,7 +66,7 @@
66 'cal_method_selection': fields.selection([('method_gross_methodology','Calculate Discount with Net Gross Methodology'),66 'cal_method_selection': fields.selection([('method_gross_methodology','Calculate Discount with Net Gross Methodology'),
67 ('method_net_methodology','Calculate Discount with Net Methodology'),],67 ('method_net_methodology','Calculate Discount with Net Methodology'),],
68 'Method To Calculation'),68 'Method To Calculation'),
69 'discount_move_ids': fields.many2many('account.move', 'account_discount_move_rel', 'discount_account_id', 'discount_move_id', 'Account Discount Moves'),69 'discount_move_ids': fields.many2many('account.move.line', 'account_discount_move_rel', 'discount_account_id', 'discount_move_id', 'Account Discount Moves'),
70 'tax_move_ids': fields.many2many('account.move.line', 'account_tax_move_rel', 'tax_account_id', 'tax_move_id', 'Account Taxes Moves'),70 'tax_move_ids': fields.many2many('account.move.line', 'account_tax_move_rel', 'tax_account_id', 'tax_move_id', 'Account Taxes Moves'),
71 }71 }
72 72
@@ -79,7 +79,10 @@
7979
80 def _get_amount(self, cr, uid, context=None):80 def _get_amount(self, cr, uid, context=None):
81 obj_inv = self.pool.get('account.invoice')81 obj_inv = self.pool.get('account.invoice')
82 tax_obj = self.pool.get('account.tax')
82 invoice = obj_inv.browse(cr, uid, context['id'], context=context)83 invoice = obj_inv.browse(cr, uid, context['id'], context=context)
84 total_tax_amount = 0.0
85 total_amount = 0.0
83 amount = obj_inv._get_amount(cr, uid, [context['id']] ,invoice.residual, invoice.payment_term.id, context=context)86 amount = obj_inv._get_amount(cr, uid, [context['id']] ,invoice.residual, invoice.payment_term.id, context=context)
84 context.update({'found':amount['found']})87 context.update({'found':amount['found']})
85 amount = amount['amount']88 amount = amount['amount']
@@ -89,6 +92,7 @@
89 92
90 def _get_discount(self, cr, uid, context=None):93 def _get_discount(self, cr, uid, context=None):
91 obj_inv = self.pool.get('account.invoice')94 obj_inv = self.pool.get('account.invoice')
95 tax_obj = self.pool.get('account.tax')
92 invoice = obj_inv.browse(cr, uid, context['id'], context=context)96 invoice = obj_inv.browse(cr, uid, context['id'], context=context)
93 amount = obj_inv._get_amount(cr, uid, [context['id']] ,invoice.residual, invoice.payment_term.id, context=context)97 amount = obj_inv._get_amount(cr, uid, [context['id']] ,invoice.residual, invoice.payment_term.id, context=context)
94 amount = amount['amount']98 amount = amount['amount']
@@ -149,6 +153,7 @@
149 return {'value' : {'cash_amount':discount_amount,'cash_residual_amount':diff_amount}}153 return {'value' : {'cash_amount':discount_amount,'cash_residual_amount':diff_amount}}
150 154
151 def _calculation(self, cr, uid, ids, context=None):155 def _calculation(self, cr, uid, ids, context=None):
156
152 invoice_obj = self.pool.get('account.invoice')157 invoice_obj = self.pool.get('account.invoice')
153 data = self.read(cr, uid, ids,context=context)[0]158 data = self.read(cr, uid, ids,context=context)[0]
154 invoice = self.pool.get('account.invoice').browse(cr, uid, context['id'], context=context)159 invoice = self.pool.get('account.invoice').browse(cr, uid, context['id'], context=context)
@@ -161,13 +166,16 @@
161 if data['tax_move_ids']:166 if data['tax_move_ids']:
162 move_line = data['tax_move_ids']167 move_line = data['tax_move_ids']
163 for move_line_id in move_line:168 for move_line_id in move_line:
164 move_id = move_line_data = move_line_obj.browse(cr, uid,move_line_id).move_id.id169 move_id = move_line_obj.browse(cr, uid,move_line_id).move_id.id
165 move_line_obj.unlink(cr, uid,[move_line_id])170 move_line_obj.unlink(cr, uid,[move_line_id])
166 move_obj.unlink(cr, uid,[move_id])171 move_obj.unlink(cr, uid,[move_id])
167 172
168 if data['discount_move_ids']: 173 if data['discount_move_ids']:
169 dis_move_id = data['discount_move_ids'][0]174 discount_move_line = data['discount_move_ids']
170 move_obj.unlink(cr, uid, data['discount_move_ids'])175 for move_line_id in discount_move_line:
176 move_id = move_line_obj.browse(cr, uid,move_line_id).move_id.id
177 move_line_obj.unlink(cr, uid,[move_line_id])
178 move_obj.unlink(cr, uid,[move_id])
171 179
172 ######## to get ref180 ######## to get ref
173 if invoice.type in ('in_invoice', 'in_refund'):181 if invoice.type in ('in_invoice', 'in_refund'):
@@ -182,23 +190,39 @@
182 190
183 #### to get name191 #### to get name
184 name = invoice.invoice_line and invoice.invoice_line[0].name or invoice.number192 name = invoice.invoice_line and invoice.invoice_line[0].name or invoice.number
185
186 ##### Entry in the discount account moves and entry in the tax account moves193 ##### Entry in the discount account moves and entry in the tax account moves
187 ### Entry for taxes in the line of wizard tax194
188 if data.get('cash_amount',0.0)>0.0:195 if data.get('cash_amount',0.0)>0.0:
189 lines3 = []
190 tax_total_amount = 0.0196 tax_total_amount = 0.0
191 line_ids = [] 197 amount = 0.0
198 discount = 0.0
199 line_ids = []
200 discount_line_ids = []
201
202 discount_account_id = False
203 tax_code_id = False
204
192 for line in invoice.invoice_line:205 for line in invoice.invoice_line:
206 tax_amount = 0.0
207 line_tax_amount = 0.0
208
209 #####get the ratio of the line in the total invoice amount
210 for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id):
211 line_tax_amount = tax['amount']
212 line_total = line.price_subtotal + line_tax_amount
213 invoice_res_amount = invoice.amount_total
214 line_ratio = line_total / invoice_res_amount
215 ###########################
216
193 if line.invoice_line_tax_id:217 if line.invoice_line_tax_id:
194 for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, data['cash_amount'], line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id):218 for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, data['cash_amount'], line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id):
195 tax_amount = tax['amount']219 tax_amount = tax['amount']
196 tax_total_amount += tax['amount']
197 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])])220 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])])
198 for tax_id in tax_invoice_id:221 for tax_id in tax_invoice_id:
199 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)222 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)
200 tax_account_id = tax_value.account_id.id223 tax_account_id = tax_value.account_id.id
201 224 tax_code_id = tax_value.tax_code_id.id
225
202 l3 = {226 l3 = {
203 'debit': direction * tax_amount<0 and - direction * tax_amount,227 'debit': direction * tax_amount<0 and - direction * tax_amount,
204 'credit': direction * tax_amount>0 and direction * tax_amount,228 'credit': direction * tax_amount>0 and direction * tax_amount,
@@ -210,45 +234,42 @@
210 'period_id':data.get('period_id',False),234 'period_id':data.get('period_id',False),
211 'name':name,235 'name':name,
212 'tax_code_id':tax_value.tax_code_id.id,236 'tax_code_id':tax_value.tax_code_id.id,
213 'tax_amount':tax_amount,237 'tax_amount':-tax_amount,
214 }238 }
215 line_id = move_line_obj.create(cr,uid,l3,context=context)239 line_id = move_line_obj.create(cr, uid, l3, context=context)
216 line_ids.append(line_id)240 line_ids.append(line_id)
241
242 ### if calculation on the Net Methology then in discount field it will take product income account or product category income account
243
244 if data['cal_method_selection'] == 'method_net_methodology':
245 if line.product_id.property_account_income:
246 discount_account_id = line.product_id.property_account_income.id
247 else:
248 discount_account_id = line.product_id.categ_id.property_account_income_categ.id
249 else:
250 discount_account_id = data['account_id']
251
252 discount = data['cash_amount'] * line_ratio
253 l4 = {
254 'debit': direction * (discount - tax_amount)<0 and - direction * (discount - tax_amount),
255 'credit': direction * (discount - tax_amount)>0 and direction * (discount - tax_amount),
256 'account_id': discount_account_id,
257 'partner_id': invoice.partner_id.id,
258 'ref':ref,
259 'date': date,
260 'name':name,
261 'journal_id':data.get('journal_id',False),
262 'period_id':data.get('period_id',False),
263 'tax_code_id':tax_code_id,
264 'tax_amount':-tax_amount,
265 }
266
267 discount_line_id = move_line_obj.create(cr, uid, l4, context=context)
268 discount_line_ids.append(discount_line_id)
269
217 self.write(cr, uid, ids, {'tax_move_ids':[(6,0,line_ids)]}, context)270 self.write(cr, uid, ids, {'tax_move_ids':[(6,0,line_ids)]}, context)
218 271 self.write(cr, uid, ids, {'discount_move_ids':[(6,0,discount_line_ids)]}, context)
219 ### Entry for discount in the line of wizard discount272
220 lines4 = []
221 if tax_total_amount>0:
222 data['cash_amount'] = (data['cash_amount'] - tax_total_amount)
223
224 ############################ if method type net methology than discount account journal account
225 discount_account_id = False
226
227 if data['cal_method_selection'] == 'method_net_methodology':
228 journal_id = data['journal_id']
229 if context['type'] == 'out_invoice':
230 discount_account_id = self.pool.get('account.journal').browse(cr, uid, journal_id).default_debit_account_id.id
231 else:
232 discount_account_id = self.pool.get('account.journal').browse(cr, uid, journal_id).default_credit_account_id.id
233 else:
234 discount_account_id = data['account_id']
235 ###############################################
236
237 l4 = {
238 'debit': direction * data.get('cash_amount',0.0)<0 and - direction * data.get('cash_amount',0.0),
239 'credit': direction * data.get('cash_amount',0.0)>0 and direction * data.get('cash_amount',0.0),
240 'account_id': discount_account_id,
241 'partner_id': invoice.partner_id.id,
242 'ref':ref,
243 'date': date,
244 'name':name
245 }
246
247 lines4.append((0, 0, l4))
248 move = {'ref': ref, 'line_id': lines4, 'journal_id': data['journal_id'], 'period_id': data['period_id'], }
249 move_id = move_obj.create(cr, uid, move, context=context)
250 self.write(cr, uid, ids, {'discount_move_ids':[(6,0,[move_id])]}, context)
251
252 return True273 return True
253 274
254 def default_get(self, cr, uid, fields, context=None):275 def default_get(self, cr, uid, fields, context=None):
@@ -296,7 +317,6 @@
296 if context is None:317 if context is None:
297 context = {}318 context = {}
298 data = self.read(cr, uid, ids,context=context)[0]319 data = self.read(cr, uid, ids,context=context)[0]
299
300 invoice = self.pool.get('account.invoice').browse(cr, uid, context['id'], context)320 invoice = self.pool.get('account.invoice').browse(cr, uid, context['id'], context)
301 journal = self.pool.get('account.journal').browse(cr, uid, data['journal_id'], context)321 journal = self.pool.get('account.journal').browse(cr, uid, data['journal_id'], context)
302 # Here we need that:322 # Here we need that:
@@ -327,38 +347,46 @@
327 amount_paid+=abs(debit-credit)347 amount_paid+=abs(debit-credit)
328348
329 # Test if there is a difference according to currency rouding setting349 # Test if there is a difference according to currency rouding setting
330 amount = obj_inv._get_amount(cr, uid, [context['id']] ,invoice.residual, invoice.payment_term.id, context=context)350# amount = obj_inv._get_amount(cr, uid, [context['id']] ,invoice.residual, invoice.payment_term.id, context=context)
331 found_h = amount['found']351#
332 352# found_h = amount['found']
333 if found_h:353#
334 if context.get('discount_move_ids',False):354# if found_h:
335 context.update({'discount_move_ids':context['discount_move_ids']})355
336 356 ####### Here when we do make full payment then to get the previous Discount and Tax Move added in context
337 if context.get('tax_move_ids',False):357
338 context.update({'tax_move_ids':context['tax_move_ids']})358 if context.get('discount_move_ids',False):
339 359 context.update({'discount_move_ids':context['discount_move_ids']})
360 if context.get('tax_move_ids',False):
361 context.update({'tax_move_ids':context['tax_move_ids']})
362 if context.get('amount',False):
363 context.update({'amount':context['amount']})
364 if context.get('cash_amount',False):
365 context.update({'cash_amount':context['cash_amount']})
366
367# return self.pay_and_reconcile(cr, uid, ids, context=context)
368# else:
369
370 if self.pool.get('res.currency').is_zero(cr, uid, invoice.company_id.currency_id,
371 (amount_paid - inv_amount_company_currency)) or data['cash_residual_amount'] == 0.0:
340 return self.pay_and_reconcile(cr, uid, ids, context=context)372 return self.pay_and_reconcile(cr, uid, ids, context=context)
373
341 else:374 else:
342 375 model_data_ids = mod_obj.search(cr, uid,[('model','=','ir.ui.view'),('name','=','view_account_invoice_pay_writeoff')], context=context)
343 if self.pool.get('res.currency').is_zero(cr, uid, invoice.company_id.currency_id,376 resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
344 (amount_paid - inv_amount_company_currency)):377 return {
345 return self.pay_and_reconcile(cr, uid, ids, context=context)378 'name': _('Information addendum'),
346 379 'context': context,
347 else:380 'view_type': 'form',
348 model_data_ids = mod_obj.search(cr, uid,[('model','=','ir.ui.view'),('name','=','view_account_invoice_pay_writeoff')], context=context)381 'view_mode': 'form',
349 resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']382 'res_model': 'account.invoice.pay.writeoff',
350 return {383 'views': [(resource_id,'form')],
351 'name': _('Information addendum'),384 'type': 'ir.actions.act_window',
352 'context': context,385 'target': 'new',
353 'view_type': 'form',386 }
354 'view_mode': 'form',387
355 'res_model': 'account.invoice.pay.writeoff',
356 'views': [(resource_id,'form')],
357 'type': 'ir.actions.act_window',
358 'target': 'new',
359 }
360
361 def pay_and_reconcile(self, cr, uid, ids, context=None):388 def pay_and_reconcile(self, cr, uid, ids, context=None):
389
362 cur_obj = self.pool.get('res.currency')390 cur_obj = self.pool.get('res.currency')
363 if context is None:391 if context is None:
364 context = {}392 context = {}
@@ -373,8 +401,11 @@
373 writeoff_journal_id = context['write_off']['writeoff_journal_id']401 writeoff_journal_id = context['write_off']['writeoff_journal_id']
374 comment = context['write_off']['comment']402 comment = context['write_off']['comment']
375 403
376 amount = data['amount'] + data['cash_amount']404 if context.get('amount',False):
377 405 amount = context['amount'] + context.get('cash_amount',0.0)
406 else:
407 amount = data['amount'] + data['cash_amount']
408
378 invoice = self.pool.get('account.invoice').browse(cr, uid, context['id'], context=context)409 invoice = self.pool.get('account.invoice').browse(cr, uid, context['id'], context=context)
379 journal = self.pool.get('account.journal').browse(cr, uid, data['journal_id'], context=context)410 journal = self.pool.get('account.journal').browse(cr, uid, data['journal_id'], context=context)
380 # Compute the amount in company's currency, with the journal currency (which is equal to payment currency)411 # Compute the amount in company's currency, with the journal currency (which is equal to payment currency)
@@ -384,39 +415,52 @@
384 amount = cur_obj.compute(cr, uid, journal.currency.id, invoice.company_id.currency_id.id, amount, context=ctx)415 amount = cur_obj.compute(cr, uid, journal.currency.id, invoice.company_id.currency_id.id, amount, context=ctx)
385 currency_id = journal.currency.id416 currency_id = journal.currency.id
386 # Put the paid amount in currency, and the currency, in the context if currency is different from company's currency417 # Put the paid amount in currency, and the currency, in the context if currency is different from company's currency
387 context.update({'amount_currency':data['amount'] + data['cash_amount'],'currency_id':currency_id})418 if context.get('amount',False):
419 context.update({'amount_currency':context['amount'] + context.get('cash_amount',0.0),'currency_id':currency_id})
420 else:
421 context.update({'amount_currency':data['amount'] + data['cash_amount'],'currency_id':currency_id})
388422
389 if invoice.company_id.currency_id.id<>invoice.currency_id.id:423 if invoice.company_id.currency_id.id<>invoice.currency_id.id:
390 ctx = {'date':data['date']}424 ctx = {'date':data['date']}
391 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, amount, context=ctx)425 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, amount, context=ctx)
392 currency_id = invoice.currency_id.id426 currency_id = invoice.currency_id.id
393 # Put the paid amount in currency, and the currency, in the context if currency is different from company's currency427 # Put the paid amount in currency, and the currency, in the context if currency is different from company's currency
394 context.update({'amount_currency':data['amount'] + data['cash_amount'],'currency_id':currency_id})428 if context.get('amount',False):
395429 context.update({'amount_currency':context['amount'] + context.get('cash_amount',0.0),'currency_id':currency_id})
396 # Take the choosen date430 else:
397 if comment:431 context.update({'amount_currency':data['amount'] + data['cash_amount'],'currency_id':currency_id})
398 context.update({'date_p':data['date'],'comment':comment})432
399 else:433 context.update({'account_id':data['account_id'],'date_p':data['date'],'comment':comment or False})
400 context.update({'date_p':data['date'],'comment':False})
401
402 context.update({'account_id':data['account_id'],'cash_amount':data['cash_amount'],'amount_currency':data['amount'] + data['cash_amount']})
403 434
404 if context.get('discount_move_ids',False):435 if context.get('discount_move_ids',False):
405 context = context436 context.update({'discount_move_ids':context['discount_move_ids']})
406 else:437 else:
407 context.update({'discount_move_ids':data['discount_move_ids']}) 438 context.update({'discount_move_ids':data['discount_move_ids']})
408 439
409 if context.get('tax_move_ids',False):440 if context.get('tax_move_ids',False):
410 context = context441 context.update({'tax_move_ids':context['tax_move_ids']})
411 else:442 else:
412 context.update({'tax_move_ids':data['tax_move_ids']})443 context.update({'tax_move_ids':data['tax_move_ids']})
413 444
414 if data['cash_amount']:445 if context.get('cash_amount',False):
446 cash_amount = context['cash_amount']
447 context.update({'cash_amount':context['cash_amount']})
448 else:
449 cash_amount = data['cash_amount']
415 context.update({'cash_amount':data['cash_amount']})450 context.update({'cash_amount':data['cash_amount']})
416 451
452 if journal.currency and invoice.company_id.currency_id.id<>journal.currency.id:
453 cash_amount = cur_obj.compute(cr, uid, journal.currency.id, invoice.company_id.currency_id.id, cash_amount, context=ctx)
454 context.update({'cash_amount':cash_amount})
455
456 if invoice.company_id.currency_id.id<>invoice.currency_id.id:
457 cash_amount = cur_obj.compute(cr, uid, journal.currency.id, invoice.company_id.currency_id.id, cash_amount, context=ctx)
458 context.update({'cash_amount':cash_amount})
459
417 acc_id = journal.default_credit_account_id and journal.default_credit_account_id.id460 acc_id = journal.default_credit_account_id and journal.default_credit_account_id.id
418 if not acc_id:461 if not acc_id:
419 raise osv.except_osv(_('Error !'), _('Your journal must have a default credit and debit account.'))462 raise osv.except_osv(_('Error !'), _('Your journal must have a default credit and debit account.'))
463
420 self.pool.get('account.invoice').pay_and_reconcile(cr, uid, [context['id']],464 self.pool.get('account.invoice').pay_and_reconcile(cr, uid, [context['id']],
421 amount, acc_id, data['period_id'], data['journal_id'], writeoff_account_id,465 amount, acc_id, data['period_id'], data['journal_id'], writeoff_account_id,
422 data['period_id'], writeoff_journal_id, context, data['name'])466 data['period_id'], writeoff_journal_id, context, data['name'])
@@ -435,7 +479,28 @@
435 if 'Customers Cash Discount Account' in res['fields'][f]['string']:479 if 'Customers Cash Discount Account' in res['fields'][f]['string']:
436 res['fields'][f]['string'] = res['fields'][f]['string'].replace('Customers Cash Discount Account',word)480 res['fields'][f]['string'] = res['fields'][f]['string'].replace('Customers Cash Discount Account',word)
437 return res481 return res
438 482
483 def _cancel_line(self, cr, uid, ids, context=None):
484 move_obj = self.pool.get('account.move')
485 move_line_obj = self.pool.get('account.move.line')
486 data = self.read(cr, uid, ids,context=context)[0]
487
488 if data['tax_move_ids']:
489 move_line = data['tax_move_ids']
490 for move_line_id in move_line:
491 move_id = move_line_obj.browse(cr, uid,move_line_id).move_id.id
492 move_line_obj.unlink(cr, uid,[move_line_id])
493 move_obj.unlink(cr, uid,[move_id])
494
495 if data['discount_move_ids']:
496 discount_move_line = data['discount_move_ids']
497 for move_line_id in discount_move_line:
498 move_id = move_line_obj.browse(cr, uid,move_line_id).move_id.id
499 move_line_obj.unlink(cr, uid,[move_line_id])
500 move_obj.unlink(cr, uid,[move_id])
501
502 return {}
503
439account_invoice_pay()504account_invoice_pay()
440505
441class account_message(osv.osv_memory):506class account_message(osv.osv_memory):
442507
=== modified file 'account_invoice_cash_discount/wizard/account_pay_invoice_view.xml'
--- account_invoice_cash_discount/wizard/account_pay_invoice_view.xml 2010-08-21 12:43:18 +0000
+++ account_invoice_cash_discount/wizard/account_pay_invoice_view.xml 2010-07-14 12:24:45 +0000
@@ -32,7 +32,7 @@
32 </group>32 </group>
33 <group colspan="4" col="6">33 <group colspan="4" col="6">
34 <label string ="" colspan="2"/>34 <label string ="" colspan="2"/>
35 <button icon="gtk-cancel" special="cancel" string="Cancel"/>35 <button icon="gtk-cancel" string="Cancel" name="_cancel_line" type="object"/>
36 <button icon="gtk-execute" string="Partial Payment" name="pay_and_reconcile" type="object"/>36 <button icon="gtk-execute" string="Partial Payment" name="pay_and_reconcile" type="object"/>
37 <button icon="gtk-execute" string="Full-Payment" name="_message" type="object"/>37 <button icon="gtk-execute" string="Full-Payment" name="_message" type="object"/>
38 </group>38 </group>
3939
=== modified file 'account_invoice_cash_discount/wizard/invoice_statement_payment.py'
--- account_invoice_cash_discount/wizard/invoice_statement_payment.py 2010-06-30 05:22:29 +0000
+++ account_invoice_cash_discount/wizard/invoice_statement_payment.py 2010-07-14 12:24:45 +0000
@@ -134,7 +134,7 @@
134 amount=line.debit134 amount=line.debit
135 elif line.credit > 0:135 elif line.credit > 0:
136 amount=-line.credit136 amount=-line.credit
137 137 print "amount::::::",amount
138 reconcile_id = statement_reconcile_obj.create(cursor, user, {138 reconcile_id = statement_reconcile_obj.create(cursor, user, {
139 'line_ids': [(6, 0, [line.id])]139 'line_ids': [(6, 0, [line.id])]
140 }, context=context)140 }, context=context)
@@ -145,13 +145,17 @@
145 discount = 0.0145 discount = 0.0
146 account = False146 account = False
147 tax_total_amount = 0.0 147 tax_total_amount = 0.0
148 148 total_discount = 0.0
149 invoice = obj_inv.browse(cursor, user, line.invoice.id, context=context)149 invoice = obj_inv.browse(cursor, user, line.invoice.id, context=context)
150 discount = obj_inv._get_payment(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context)
151 account = obj_inv._get_account(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context)
152 150
153 for invoice_line in invoice.invoice_line:151 for invoice_line in invoice.invoice_line:
154 if invoice_line.invoice_line_tax_id:152 if invoice_line.invoice_line_tax_id:
153 amount_invoice_line = obj_inv._get_amount(cursor, user, [invoice.id] , invoice_line.price_subtotal, invoice.payment_term.id, context=context)
154 line_amount = amount_invoice_line['amount']
155 discount = obj_inv._get_payment(cursor, user, [invoice.id] , line_amount, invoice.payment_term.id, context=context)
156 account = obj_inv._get_account(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context)
157
158 tax_amount = 0.0
155 for tax in tax_obj.compute(cursor, user, invoice_line.invoice_line_tax_id, discount, invoice_line.quantity, invoice.address_invoice_id.id, invoice_line.product_id, invoice.partner_id):159 for tax in tax_obj.compute(cursor, user, invoice_line.invoice_line_tax_id, discount, invoice_line.quantity, invoice.address_invoice_id.id, invoice_line.product_id, invoice.partner_id):
156 tax_amount = tax['amount']160 tax_amount = tax['amount']
157 tax_total_amount += tax['amount']161 tax_total_amount += tax['amount']
@@ -167,13 +171,15 @@
167 'account_id': tax_account_id,171 'account_id': tax_account_id,
168 'line_id': reconcile_id,172 'line_id': reconcile_id,
169 }, context=context)173 }, context=context)
170 if discount>0:174
171 statement_reconcile_line_obj.create(cursor, user, {175 if discount>0:
172 'name': line.name,176 total_discount += discount
173 'amount': discount - tax_total_amount,177 statement_reconcile_line_obj.create(cursor, user, {
174 'account_id': account,178 'name': line.name,
175 'line_id': reconcile_id,179 'amount': discount - tax_amount,
176 }, context=context)180 'account_id': account,
181 'line_id': reconcile_id,
182 }, context=context)
177 ##########################################################################183 ##########################################################################
178 184
179 if line.journal_id.type == 'sale':185 if line.journal_id.type == 'sale':
@@ -182,6 +188,7 @@
182 type = 'supplier'188 type = 'supplier'
183 else:189 else:
184 type = 'general'190 type = 'general'
191
185 statement_line_obj.create(cursor, user, {192 statement_line_obj.create(cursor, user, {
186 'name': line.name or '?',193 'name': line.name or '?',
187 'amount': amount,194 'amount': amount,

Subscribers

People subscribed via source and target branches