~serpent-consulting-services/openerp-usa/cim-SerpentCS

« back to all changes in this revision

Viewing changes to account_payment_ccapi_authdotnet/cc_auth_api.py

  • Committer: npgllc
  • Author(s): Serpent-Consulting-Services
  • Date: 2012-08-14 13:32:19 UTC
  • mfrom: (73.1.16 openerp-usa)
  • Revision ID: npgllc-20120814133219-z4lvfyiw1ggsy0sx
[IMP]: all modules related to credit card functionality

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
 
24
24
from osv import osv, fields
25
 
import pooler
26
25
import socket
27
26
import sys
28
27
import urllib
66
65
        return False
67
66
 
68
67
    def validate_sales_reciept(self, cr, uid, ids, context={}):
 
68
        voucher_obj = self.pool.get('account.voucher')
69
69
        if type(ids) == type([]):
70
 
            voucher_objs = self.pool.get('account.voucher').browse(cr, uid, ids, context=context)
 
70
            voucher_objs = voucher_obj.browse(cr, uid, ids, context=context)
71
71
        else:
72
 
            voucher_objs = self.pool.get('account.voucher').browse(cr, uid, [ids], context=context)
 
72
            voucher_objs = voucher_obj.browse(cr, uid, [ids], context=context)
73
73
        for voucher_obj in voucher_objs:
74
74
            rel_sale_order_id = voucher_obj.rel_sale_order_id.id
75
 
            sale_reciepts_ids = self.pool.get('account.voucher').search(cr, uid, [('type', '=', 'sale'), ('rel_sale_order_id', '=', rel_sale_order_id), ('state', 'in', ['draft'])])
 
75
            sale_reciepts_ids = voucher_obj.search(cr, uid, [('type', '=', 'sale'), ('rel_sale_order_id', '=', rel_sale_order_id), ('state', 'in', ['draft'])])
76
76
            
77
77
            if sale_reciepts_ids:
78
 
                self.pool.get('account.voucher').action_move_line_create(cr, uid, sale_reciepts_ids, context=context)
 
78
                voucher_obj.action_move_line_create(cr, uid, sale_reciepts_ids, context=context)
79
79
            else:
80
80
                sale_reciepts_id = self.pool.get('sale.order').create_sales_reciept(cr, uid, [rel_sale_order_id], context=context)
81
 
                self.pool.get('account.voucher').action_move_line_create(cr, uid, [sale_reciepts_id], context=context)
 
81
                voucher_obj.action_move_line_create(cr, uid, [sale_reciepts_id], context=context)
82
82
        return True
83
83
 
84
84
    def _get_prod_deb_acc(self, product_id, journal_obj, context=False):
90
90
            if journal_obj.default_debit_account_id:
91
91
                return journal_obj.default_debit_account_id.id
92
92
        return False
 
93
    
93
94
    def cancel_sales_reciept(self, cr, uid, ids, context={}):
94
95
        voucher_obj = self.pool.get('account.voucher')
95
96
        sale_obj = self.browse(cr, uid, ids, context=context)
144
145
        '''
145
146
 
146
147
        ret = False
 
148
        voucher_obj = self.pool.get('account.voucher')
 
149
        partner_bank_obj = self.pool.get('res.partner.bank')
 
150
        
147
151
        wf_service = netsvc.LocalService("workflow")
148
152
        if type([]) == type(ids):
149
 
           acc_voucher_obj = pooler.get_pool(cr.dbname).get('account.voucher').browse(cr, uid, ids[0], context={'cc_no':'no_mask'})
 
153
            acc_voucher_obj = voucher_obj.browse(cr, uid, ids[0], context={'cc_no':'no_mask'})
150
154
        else:
151
 
            acc_voucher_obj = pooler.get_pool(cr.dbname).get('account.voucher').browse(cr, uid, ids, context={'cc_no':'no_mask'})
152
 
        user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
 
155
            acc_voucher_obj = voucher_obj.browse(cr, uid, ids, context={'cc_no':'no_mask'})
 
156
        user = self.pool.get('res.users').browse(cr, uid, uid)
153
157
        creditcard = acc_voucher_obj.cc_number#  CREDIT CARD NUMBER
154
158
        expiration = acc_voucher_obj.cc_e_d_month + acc_voucher_obj.cc_e_d_year ################ EXPIRATION DATE MM + YY
155
159
        total = acc_voucher_obj.cc_order_amt ############## ORDER AMOUNT
158
162
            if not acc_voucher_obj.cc_bank:
159
163
                raise osv.except_osv(_('No Bank selected!'), _("Please select the bank to save credit card details on customer bank details."))
160
164
            else:
161
 
                if not pooler.get_pool(cr.dbname).get('res.partner.bank').search(cr, uid, [('cc_number', '=', creditcard), ('partner_id', '=', acc_voucher_obj.partner_id.id)]):
162
 
                    pooler.get_pool(cr.dbname).get('res.partner.bank').create(cr, uid, {'state':'bank',
 
165
                if not partner_bank_obj.search(cr, uid, [('cc_number', '=', creditcard), ('partner_id', '=', acc_voucher_obj.partner_id.id)]):
 
166
                    partner_bank_obj.create(cr, uid, {'state':'bank',
163
167
                                                                     'acc_number':'nil',
164
168
                                                                     'cc_number':creditcard,
165
169
                                                                     'cc_e_d_month':acc_voucher_obj.cc_e_d_month,
174
178
                raise osv.except_osv(_('No Transaction ID!'), _(" Unable to find transaction id for refund."))
175
179
            if not acc_voucher_obj.journal_id.cc_allow_refunds:
176
180
                raise osv.except_osv(_('Unable to do Refund!'), _("Please check \"Allow Credit Card Refunds\" on journal to do refund."))
 
181
        
177
182
        elif acc_voucher_obj.cc_p_authorize:
178
 
             x_type = 'AUTH_ONLY'
 
183
            x_type = 'AUTH_ONLY'
179
184
 
180
185
        elif acc_voucher_obj.cc_charge:
181
186
            x_type = 'AUTH_CAPTURE'
182
187
        else:
183
188
            raise osv.except_osv(_('No "Type of transaction"!'), _("No Transaction type selected. Please select pre-authorize or charge from \"Type of transaction\" section."))
184
189
 
 
190
        cvv = None
185
191
        if acc_voucher_obj.cc_v:
186
192
            cvv = acc_voucher_obj.cc_v
187
 
        else:
188
 
            cvv = None
189
193
 
190
194
        tax = '0.00'
191
195
        
206
210
            #raise AuthnetAIMError('Invalid value for testmode. Must be True or False. "{0}" given.'.format(testmode))
207
211
 
208
212
        parameters = {}
209
 
        proxy = None;
 
213
        proxy = None
210
214
        delimiter = '|'
211
215
        results = []
212
216
        error = True
215
219
 
216
220
        ############ initialize
217
221
        parameters = {}
218
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_delim_data', 'true')
219
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_delim_data', 'true')
220
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_delim_char', delimiter)
221
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_relay_response', 'FALSE')
222
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_url', 'FALSE')
223
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_version', '3.1')
224
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_method', 'CC')
225
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_type', x_type)
226
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_login', login)
227
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_tran_key', transkey)
 
222
        parameters = voucher_obj.setParameter(parameters, 'x_delim_data', 'true')
 
223
        parameters = voucher_obj.setParameter(parameters, 'x_delim_data', 'true')
 
224
        parameters = voucher_obj.setParameter(parameters, 'x_delim_char', delimiter)
 
225
        parameters = voucher_obj.setParameter(parameters, 'x_relay_response', 'FALSE')
 
226
        parameters = voucher_obj.setParameter(parameters, 'x_url', 'FALSE')
 
227
        parameters = voucher_obj.setParameter(parameters, 'x_version', '3.1')
 
228
        parameters = voucher_obj.setParameter(parameters, 'x_method', 'CC')
 
229
        parameters = voucher_obj.setParameter(parameters, 'x_type', x_type)
 
230
        parameters = voucher_obj.setParameter(parameters, 'x_login', login)
 
231
        parameters = voucher_obj.setParameter(parameters, 'x_tran_key', transkey)
228
232
 
229
233
        ########## setTransaction
230
234
        if str(creditcard).strip() == '' or creditcard == None:
238
242
 
239
243
            #raise AuthnetAIMError('No total amount passed to setTransaction(): {0}').format(total)
240
244
 
241
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_card_num', creditcard)
242
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_exp_date', expiration)
243
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_amount', total)
 
245
        parameters = voucher_obj.setParameter(parameters, 'x_card_num', creditcard)
 
246
        parameters = voucher_obj.setParameter(parameters, 'x_exp_date', expiration)
 
247
        parameters = voucher_obj.setParameter(parameters, 'x_amount', total)
244
248
        if cvv != None:
245
 
            parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_card_code', cvv)
 
249
            parameters = voucher_obj.setParameter(parameters, 'x_card_code', cvv)
246
250
        if tax != None:
247
 
            parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_tax', tax)
 
251
            parameters = voucher_obj.setParameter(parameters, 'x_tax', tax)
248
252
        if invoice != None:
249
 
            parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_invoice_num', invoice)
 
253
            parameters = voucher_obj.setParameter(parameters, 'x_invoice_num', invoice)
250
254
 
251
255
        ##################initialize
252
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_duplicate_window', 180)
253
 
        parameters = acc_voucher_obj.cc_name and pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_first_name', acc_voucher_obj.cc_name or None) or parameters
254
 
        parameters = acc_voucher_obj.cc_b_addr_1 and pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_address', acc_voucher_obj.cc_b_addr_1 or None) or parameters
255
 
        parameters = acc_voucher_obj.cc_city and pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_city', acc_voucher_obj.cc_city or None) or parameters
256
 
        parameters = acc_voucher_obj.cc_state and pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_state', acc_voucher_obj.cc_state or None) or parameters
257
 
        parameters = acc_voucher_obj.cc_zip and pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_zip', acc_voucher_obj.cc_zip or None) or parameters
258
 
        parameters = acc_voucher_obj.cc_country and pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_country', acc_voucher_obj.cc_country or None) or parameters
259
 
        parameters = pooler.get_pool(cr.dbname).get('account.voucher').setParameter(parameters, 'x_customer_ip', socket.gethostbyname(socket.gethostname()))
 
256
        parameters = voucher_obj.setParameter(parameters, 'x_duplicate_window', 180)
 
257
        parameters = acc_voucher_obj.cc_name and voucher_obj.setParameter(parameters, 'x_first_name', acc_voucher_obj.cc_name or None) or parameters
 
258
        parameters = acc_voucher_obj.cc_b_addr_1 and voucher_obj.setParameter(parameters, 'x_address', acc_voucher_obj.cc_b_addr_1 or None) or parameters
 
259
        parameters = acc_voucher_obj.cc_city and voucher_obj.setParameter(parameters, 'x_city', acc_voucher_obj.cc_city or None) or parameters
 
260
        parameters = acc_voucher_obj.cc_state and voucher_obj.setParameter(parameters, 'x_state', acc_voucher_obj.cc_state or None) or parameters
 
261
        parameters = acc_voucher_obj.cc_zip and voucher_obj.setParameter(parameters, 'x_zip', acc_voucher_obj.cc_zip or None) or parameters
 
262
        parameters = acc_voucher_obj.cc_country and voucher_obj.setParameter(parameters, 'x_country', acc_voucher_obj.cc_country or None) or parameters
 
263
        parameters = voucher_obj.setParameter(parameters, 'x_customer_ip', socket.gethostbyname(socket.gethostname()))
260
264
 
261
265
    #           Actual Processing
262
266
 
283
287
                so_vals = {'cc_pre_auth':True, 'rel_account_voucher_id':acc_voucher_obj.id}
284
288
            else:
285
289
                so_vals = {'state':'cc_auth', 'cc_pre_auth':True, 'rel_account_voucher_id':acc_voucher_obj.id}
286
 
            pooler.get_pool(cr.dbname).get('sale.order').write(cr, uid, [acc_voucher_obj.rel_sale_order_id.id], so_vals)
 
290
            self.pool.get('sale.order').write(cr, uid, [acc_voucher_obj.rel_sale_order_id.id], so_vals)
287
291
        
288
292
        ret_dic = {'cc_auth_code':results[4],
289
293
                 'cc_trans_id':results[6]
291
295
        if x_type == 'AUTH_ONLY':
292
296
             status = 'Authorization: ' + str(results[3])
293
297
             ret_dic['cc_status'] = status
294
 
             pooler.get_pool(cr.dbname).get('account.voucher').write(cr, uid, ids, ret_dic)
 
298
             voucher_obj.write(cr, uid, ids, ret_dic)
 
299
             
295
300
        elif x_type == 'AUTH_CAPTURE':
296
301
             status = 'Prior Authorization and Capture: ' + str(results[3])
297
302
             ret_dic['amount'] = acc_voucher_obj.cc_order_amt
298
303
             ret_dic['cc_status'] = status
299
304
             ret_dic['cc_transaction'] = True
300
305
 
301
 
             pooler.get_pool(cr.dbname).get('account.voucher').write(cr, uid, ids, ret_dic)
 
306
             voucher_obj.write(cr, uid, ids, ret_dic)
302
307
             cr.commit()
303
308
             if results[0] == '1':
304
309
                 '''
305
 
                     Validating sales reciept
 
310
                     Validating sales receipt
306
311
                 '''
307
312
                 #self.validate_sales_reciept(cr, uid, ids, context=context)
308
313
 
309
314
                 '''
310
315
                     Posting payment voucher
311
316
                 '''
312
 
                 pooler.get_pool(cr.dbname).get('account.voucher').action_move_line_create(cr, uid, ids, context)
 
317
                 voucher_obj.action_move_line_create(cr, uid, ids, context)
313
318
                 ret = True
 
319
        
314
320
        elif x_type == 'CREDIT':
315
 
            print "1" * 10, x_type
316
321
            status = 'Refund: ' + str(results[3])
317
322
            ret_dic['cc_status'] = status
318
323
            if results[0] == '1':
319
 
 
320
324
                ret_dic['cc_transaction'] = False
321
325
 
322
326
                #Domain : [('type','=','out_refund')]
336
340
                                    'type'      : 'out_refund',
337
341
                                    'journal_id': refund_journal_id,
338
342
                                    'partner_id': acc_voucher_obj.partner_id.id,
339
 
                                    'shipcharge': context.get('cc_ship_refund'),
340
 
                                    'ship_method_id' : context.get('ship_method_id')
 
343
#                                    'shipcharge': context.get('cc_ship_refund'),
 
344
#                                    'ship_method_id' : context.get('ship_method_id')
341
345
                                }
342
 
                    if context.get('ship_method_id'):
343
 
                        ship_method = self.pool.get('shipping.rate.config').browse(cr, uid, context.get('ship_method_id'), context=context)
344
 
                        inv_vals['sale_account_id'] = ship_method.account_id and ship_method.account_id.id,
 
346
#                    if context.get('ship_method_id'):
 
347
#                        ship_method = self.pool.get('shipping.rate.config').browse(cr, uid, context.get('ship_method_id'), context=context)
 
348
#                        inv_vals['sale_account_id'] = ship_method.account_id and ship_method.account_id.id,
345
349
                        
346
350
                    inv_vals.update(invoice_obj.onchange_partner_id(cr, uid, [], 'out_refund', acc_voucher_obj.partner_id.id, '', '', '', '')['value'])
347
351
                    inv_lines = []
348
 
                    for line in context['cc_refund']:
 
352
                    refund_lines = context.get('cc_refund',[])
 
353
                    for line in refund_lines:
349
354
                        
350
355
                        inv_line_vals = {
351
356
                                            'quantity'   : line['qty'],
352
357
                                            'product_id'    : line['product_id'],
353
 
                                         }
 
358
                        }
354
359
                        
355
360
                        onchage_vals = invoice_line_obj.product_id_change(cr, uid, [], line['product_id'], False, line['qty'], '', 'out_refund', inv_vals['partner_id'], False , inv_vals['address_invoice_id'] , False, False, {})['value']
356
361
                        onchage_vals['price_unit'] = line['price_unit']
357
362
                        inv_line_vals.update(onchage_vals)
358
363
                        
359
364
                        inv_lines.append((0, 0, inv_line_vals))
360
 
                    inv_vals['abstract_line_ids'] = inv_lines
361
 
                    
362
 
                    print "Creating with val : ", inv_vals
 
365
                    
 
366
                    inv_vals['invoice_line'] = inv_lines
 
367
                    
363
368
                    invoice_id = invoice_obj.create(cr, uid, inv_vals, context=context)
364
369
                    wf_service.trg_validate(uid, 'account.invoice', invoice_id, 'invoice_open', cr)
365
370
                    
366
 
                    print "Created refund invoice and validated ", invoice_id
367
371
#                ret = True
368
372
#                voucher_obj = self.pool.get('account.voucher')
369
373
#                
458
462
#                if not refund_voucher:      
459
463
#                    wf_service = netsvc.LocalService('workflow')
460
464
#                    wf_service.trg_validate(uid, 'account.voucher', voucher_id, 'proforma_voucher', cr)
461
 
 
462
 
 
463
465
                
464
466
            else:
465
467
                ret_dic['cc_transaction'] = True
466
 
            pooler.get_pool(cr.dbname).get('account.voucher').write(cr, uid, ids, ret_dic)
 
468
            voucher_obj.write(cr, uid, ids, ret_dic)
467
469
        else:
468
470
            status = ''
469
471
 
480
482
    '''
481
483
 
482
484
    def authorize(self, cr, uid, ids, context=None):
483
 
        return self.pool.get('auth.net.cc.api').do_this_transaction(cr, uid, ids, refund=False, context=context)
 
485
        res = self.pool.get('auth.net.cc.api').do_this_transaction(cr, uid, ids, refund=False, context=context)
 
486
        if res:
 
487
            wf_service = netsvc.LocalService("workflow")
 
488
            wf_service.trg_validate(uid, 'account.voucher', ids[0], 'proforma_voucher', cr)
 
489
        return True
484
490
    
485
491
    def cc_refund(self, cr, uid, ids, context=None):
486
492
        return self.pool.get('auth.net.cc.api').do_this_transaction(cr, uid, ids, refund=True, context=context)
522
528
                cr_ids['partner_id'] = sale_obj.partner_id.id
523
529
                cr_ids['name'] = 'Shipping Charge for %s' % sale_line.name
524
530
                cr_ids_list.append(cr_ids.copy())
525
 
                
526
531
 
527
532
        else:
528
533
            vals['journal_id'] = False