~torbat-j/+junk/ncdierp

« back to all changes in this revision

Viewing changes to ierp_loan/close_loan_from_rf.py

  • Committer: erka
  • Date: 2014-10-21 08:43:45 UTC
  • Revision ID: erka-20141021084345-vb5veh7pk63zeys9
Зээл болон худалдан авалтын классын дагуу нэмэлт талбаруудыг нэмэв.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
import time
 
3
from datetime import datetime
 
4
from datetime import date
 
5
from dateutil.relativedelta import relativedelta
 
6
 
 
7
from openerp.osv import osv, fields
 
8
import openerp.netsvc
 
9
import openerp.pooler
 
10
from openerp.tools.translate import _
 
11
import openerp.addons.decimal_precision as dp
 
12
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
 
13
 
 
14
#
 
15
# Model definition
 
16
#
 
17
class close_loan_from_rf(osv.osv):
 
18
      
 
19
    STATE_SELECTION = [
 
20
        ('draft', 'Draft'),
 
21
        ('approved', 'Approved'),
 
22
        ('done', 'Done'),
 
23
        ('cancel', 'Cancelled')
 
24
    ]
 
25
    
 
26
    _columns = {
 
27
            'company_id':fields.many2one('res.company','Company'),
 
28
        'name': fields.char(u'Close risk number', size=64, select=True,readonly=True),
 
29
        'loan_order': fields.many2one('loan.order',u'Loan contract', domain=[('state','=','paid'),('loan_state','!=','d00')],states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},required=True),
 
30
        'date_order':fields.date('Order Date', required=True, states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},help="Date on which this document has been created."),
 
31
        'date_approve':fields.date('Date Approved', readonly=1),
 
32
        'state': fields.selection(STATE_SELECTION, 'State', readonly=True, help="Help..."),        
 
33
        'partner_id':fields.many2one('res.partner', 'Debtor', required=True,states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]}),
 
34
        'notes': fields.text('Other',states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]}),        
 
35
        'loan_balance':fields.float(u'Loan balance',digits = (16,2),states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},required=True),
 
36
        'total_risk_amount':fields.float(u'Amount of risk',digits = (16,2),states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},required=True),
 
37
        'risk_percent': fields.float(u'Percent of risk',digits = (16,2),states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},required=True),
 
38
        'risk_account': fields.many2one('account.account',u'Account of risk foundation',states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},required=True),
 
39
        
 
40
        'journal': fields.many2one('account.journal',u'Journal',states={'done':[('readonly',True)],'approved':[('readonly',True)]},required=True),
 
41
        
 
42
                'loan_current_state': fields.selection([
 
43
                                        ('d00','Normal'),
 
44
                        ('d90','Past due loans'),
 
45
                        ('d180','Abnormal loans'),
 
46
                        ('d360','Doubted loans'),
 
47
                        ('d361g','Bad loan')], u'Loan state(current)',states={'closed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]},required=True),
 
48
                'approve_accountant': fields.many2one('hr.employee',u'Approved accountant',readonly=True),
 
49
    }
 
50
    _defaults = {
 
51
        'company_id':lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
 
52
        'date_order': fields.date.context_today,
 
53
        'state': 'draft',
 
54
    }
 
55
    _sql_constraints = [
 
56
        ('name_uniq', 'unique(name)', 'Close risk number must be unique!'),
 
57
    ]
 
58
    _name = "close.loan.from.rf"
 
59
    _description = "Close loan from risk foundation"
 
60
    _order = "name desc"
 
61
 
 
62
#   ---------------------------------MY----------------------------------------
 
63
 
 
64
    def onchange_loan_order(self, cr, uid, ids, lid):
 
65
        val = {}
 
66
        lorder = self.pool.get('loan.order').browse(cr,uid,lid)
 
67
        risk_ids = self.pool.get('loan.risk.foundation').search(cr,uid,[
 
68
                                            ('state','=','done'), 
 
69
                                            ('loan_order','=',lorder.id)          
 
70
                                         ],order="id")
 
71
        if risk_ids == []:
 
72
            raise osv.except_osv(_('Warning'), _("No risk foundation.This loan is normal."))
 
73
            return True
 
74
            
 
75
        tr = 0.0
 
76
        per = 0.0
 
77
        for risk in self.pool.get('loan.risk.foundation').browse(cr,uid,risk_ids):
 
78
            tr += risk.risk_amount
 
79
            per += risk.risk_percent
 
80
        
 
81
        val['partner_id'] = lorder.partner_id.id
 
82
        val['total_risk_amount'] = tr
 
83
        val['risk_percent'] = per
 
84
        val['loan_current_state'] = lorder.loan_state
 
85
        val['loan_balance'] = lorder.loan_balance
 
86
        
 
87
        return {'value':val}
 
88
 
 
89
    def _get_days(self,now,last,m):
 
90
                last_year = int(last[:4])
 
91
                last_mounth = int(last[5:7])+m
 
92
                last_day = int(last[8:])        
 
93
                
 
94
                if last_mounth > 12:
 
95
                    last_mounth = 1
 
96
                    last_year += 1
 
97
                
 
98
                now_year = int(now[:4])
 
99
                now_mounth = int(now[5:7])
 
100
                now_day = int(now[8:])  
 
101
                
 
102
                d0 = date(last_year, last_mounth, last_day)
 
103
                d1 = date(now_year, now_mounth, now_day)
 
104
                delta = d1 - d0
 
105
                return delta.days
 
106
 
 
107
#   ---------------------------------ERP----------------------------------------
 
108
    def create(self, cr, uid, vals, context=None):
 
109
        if vals['total_risk_amount'] <= 0:
 
110
            raise osv.except_osv(_('Invalid risk amount!'), _('Insert risk amount!'))
 
111
        if vals['risk_percent'] <= 0:
 
112
            raise osv.except_osv(_('Invalid risk percent!'), _('Insert risk period!'))
 
113
        return super(close_loan_from_rf, self).create(cr, uid, vals, context=context)
 
114
 
 
115
    def unlink(self, cr, uid, ids, context=None):
 
116
        orders = self.read(cr, uid, ids, ['state'], context=context)
 
117
        unlink_ids = []
 
118
        for s in orders:
 
119
            if s['state'] in ['draft','cancel']:
 
120
                unlink_ids.append(s['id'])
 
121
            else:
 
122
                raise osv.except_osv(_('Invalid action !'), _('In order to delete a loan order, it must be cancelled first!'))
 
123
        return super(close_loan_from_rf, self).unlink(cr, uid, unlink_ids, context=context)
 
124
 
 
125
    def action_cancel_close_loan(self, cr, uid, ids, context=None):
 
126
        self.write(cr, uid, ids, {'state': 'draft'})
 
127
        print 'Cancel-------------'
 
128
        return True
 
129
 
 
130
    def action_approve_close_loan(self, cr, uid, ids, context=None):
 
131
        hrid = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)])
 
132
        if hrid !=[]:
 
133
            self.write(cr, uid, ids, {'state': 'approved', 
 
134
                                  'approve_accountant' : hrid[0], 
 
135
                                  'name':self.pool.get('ir.sequence').get(cr, uid, 'close.loan.from.rf'),
 
136
                                  'date_approve': fields.date.context_today(self,cr,uid,context=context),
 
137
                                  })
 
138
        else:
 
139
            raise osv.except_osv(_('Warning'), _('Хүний нөөц дээр энэ ажилтанг бүртгээгүй эсвэл холбоотой хэрэглэгчийг тохируулаагүй байна!'))
 
140
        
 
141
 
 
142
        print 'Approved-------------'
 
143
        return True
 
144
 
 
145
    def action_done_close_loan(self, cr, uid, ids, context=None):
 
146
        order = self.browse(cr,uid,ids)[0]
 
147
        cur_id = order.loan_order.product_id.currency.id 
 
148
        res_currency_obj = self.pool.get('res.currency')
 
149
        res_users_obj = self.pool.get('res.users')
 
150
        
 
151
        if order.total_risk_amount != order.loan_order.loan_balance:
 
152
            raise osv.except_osv(_('Warning'), _('Total risk amount is incorrect(loan balance)!'))
 
153
 
 
154
        company_currency_id = res_users_obj.browse(cr, uid, uid,context=context).company_id.currency_id.id
 
155
        currency_id = order.loan_order.product_id.currency.id
 
156
        
 
157
        old_st = order.loan_current_state
 
158
        
 
159
        condition = ''
 
160
        old_desc = ''
 
161
        
 
162
        if old_st == 'd00':
 
163
            old_desc = u'Хэвийн'
 
164
            condition = 'product_id'
 
165
        elif old_st == 'd90':
 
166
            old_desc = u'Хугацаа хэтэрсэн'
 
167
            condition = 'xxz_product'
 
168
        elif old_st == 'd180':
 
169
            old_desc = u'Хэвийн бус'
 
170
            condition = 'xb_product'
 
171
        elif old_st == 'd360':
 
172
            old_desc = u'Эргэлзээтэй зээл'
 
173
            condition = 'ez_product'
 
174
        elif old_st == 'd361g':
 
175
            old_desc = u'Муу зээл'
 
176
            condition = 'mz_product'
 
177
        
 
178
        cid = self.pool.get('configure.product').search(cr,uid,[(condition,'=',order.loan_order.product_id.id)])
 
179
        if cid == []:
 
180
            raise osv.except_osv(_('Warning'), _('Not found configure!'))
 
181
             
 
182
        config = self.pool.get('configure.product').browse(cr,uid,cid[0])
 
183
        
 
184
        pro_id = 0
 
185
        if old_st == 'd00':
 
186
            pro_id = config.product_id.id
 
187
        elif old_st == 'd90':
 
188
            pro_id = config.xxz_product.id
 
189
        elif old_st == 'd180':
 
190
            pro_id = config.xb_product.id
 
191
        elif old_st == 'd360':
 
192
            pro_id = config.ez_product.id
 
193
        elif old_st == 'd361g':
 
194
            pro_id = config.mz_product.id
 
195
        
 
196
        pro = self.pool.get('product.product').browse(cr,uid,pro_id)
 
197
        amount_currency = res_currency_obj.compute(cr,uid, company_currency_id,currency_id,order.loan_order.loan_balance, context=context)
 
198
        amount = 0.0
 
199
        if amount_currency == order.loan_order.loan_balance:
 
200
            amount_currency = 0.0
 
201
            amount = order.loan_order.loan_balance
 
202
        else:
 
203
            t = amount_currency
 
204
            amount_currency = order.loan_order.loan_balance
 
205
            amount = t
 
206
        if company_currency_id != currency_id:
 
207
            am_id2 = self.pool.get('account.move').create(cr,uid, {
 
208
                                        'name':order.name,
 
209
                                        'journal_id':order.journal.id,
 
210
                                        'ref':order.loan_order.name})
 
211
            aml_one_one2 = self.pool.get('account.move.line').create(cr,uid,{
 
212
                                                                        'name':order.loan_order.name + u'гэрээг эрсдэлийн сангаас хаав.',
 
213
                                                                        'partner_id':order.partner_id.id,
 
214
                                                                        'account_id':pro.property_account_income.id,
 
215
                                                                        'credit':order.loan_order.loan_balance,
 
216
                                                                        'currency_id':currency_id,
 
217
                                                                        'amount_currency':amount_currency*(-1),
 
218
                                                                        'move_id':am_id2 })
 
219
                                                                        
 
220
            aml_one_two2 = self.pool.get('account.move.line').create(cr,uid,{
 
221
                                                                        'name':order.loan_order.name + u'гэрээг эрсдэлийн сангаас хаав.',
 
222
                                                                        'partner_id':order.partner_id.id,
 
223
                                                                        'account_id':order.risk_account.id,
 
224
                                                                        'debit':order.loan_order.loan_balance,
 
225
                                                                        'currency_id':currency_id,
 
226
                                                                        'amount_currency':amount_currency,
 
227
                                                                        'move_id':am_id2 })
 
228
        else:
 
229
            am_id2 = self.pool.get('account.move').create(cr,uid, {
 
230
                                        'name':order.name,
 
231
                                        'journal_id':order.journal.id,
 
232
                                        'ref':order.loan_order.name})
 
233
            aml_one_one2 = self.pool.get('account.move.line').create(cr,uid,{
 
234
                                        'name':order.loan_order.name + u'гэрээг эрсдэлийн сангаас хаав.',
 
235
                                        'partner_id':order.partner_id.id,
 
236
                                        'account_id':pro.property_account_income.id,
 
237
                                        'credit':order.loan_order.loan_balance,
 
238
#                                        'currency_id':currency_id,
 
239
                                        'amount_currency':amount_currency*(-1),
 
240
                                        'move_id':am_id2 })
 
241
                                        
 
242
            aml_one_two2 = self.pool.get('account.move.line').create(cr,uid,{
 
243
                                        'name':order.loan_order.name + u'гэрээг эрсдэлийн сангаас хаав.',
 
244
                                        'partner_id':order.partner_id.id,
 
245
                                        'account_id':order.risk_account.id,
 
246
                                        'debit':order.loan_order.loan_balance,
 
247
#                                        'currency_id':currency_id,
 
248
                                        'amount_currency':amount_currency,
 
249
                                        'move_id':am_id2 })
 
250
        amove2 = self.pool.get('account.move').browse(cr,uid,am_id2)
 
251
        amove2.button_validate()
 
252
               
 
253
        print 'update lorder-',self.pool.get('loan.order').write(cr,uid,order.loan_order.id,
 
254
                                        {'product_id':pro_id,
 
255
                                         'state':'done',
 
256
                                         'loan_balance':0.0,
 
257
                                        })
 
258
        
 
259
        sid = self.pool.get('loan.account.statement').create(cr,uid, {
 
260
                                    'contract_id':order.loan_order.id,
 
261
                                    'name':u"Зээлийг эрсдэлийн сангаас хаав.",
 
262
                                    'write_date':order.date_order,
 
263
                                    'risk':(-1)*order.loan_order.loan_balance})
 
264
        hrid = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)])
 
265
        if hrid !=[]:
 
266
            self.write(cr, uid, ids, {'approve_accountant' : hrid[0],
 
267
                                      'state': 'done'})
 
268
        else:
 
269
            raise osv.except_osv(_('Warning'), _('Хүний нөөц дээр энэ ажилтанг бүртгээгүй эсвэл холбоотой хэрэглэгчийг тохируулаагүй байна!'))
 
270
        
 
271
        
 
272
        return am_id2
 
273
 
 
274
    def copy(self, cr, uid, id, default=None, context=None):
 
275
        if not default:
 
276
            default = {}
 
277
        default.update({
 
278
            'state':'draft',
 
279
            'name': self.pool.get('ir.sequence').get(cr, uid, 'close.loan.from.rf'),
 
280
        })
 
281
        return super(close_loan_from_rf, self).copy(cr, uid, id, default, context)
 
282
 
 
283
close_loan_from_rf()
 
284
 
 
285
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: