1
# -*- coding: utf-8 -*-
3
from datetime import datetime
4
from datetime import date
5
from dateutil.relativedelta import relativedelta
7
from openerp.osv import osv, fields
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
17
class close_loan_from_rf(osv.osv):
21
('approved', 'Approved'),
23
('cancel', 'Cancelled')
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),
40
'journal': fields.many2one('account.journal',u'Journal',states={'done':[('readonly',True)],'approved':[('readonly',True)]},required=True),
42
'loan_current_state': fields.selection([
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),
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,
56
('name_uniq', 'unique(name)', 'Close risk number must be unique!'),
58
_name = "close.loan.from.rf"
59
_description = "Close loan from risk foundation"
62
# ---------------------------------MY----------------------------------------
64
def onchange_loan_order(self, cr, uid, ids, lid):
66
lorder = self.pool.get('loan.order').browse(cr,uid,lid)
67
risk_ids = self.pool.get('loan.risk.foundation').search(cr,uid,[
69
('loan_order','=',lorder.id)
72
raise osv.except_osv(_('Warning'), _("No risk foundation.This loan is normal."))
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
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
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:])
98
now_year = int(now[:4])
99
now_mounth = int(now[5:7])
100
now_day = int(now[8:])
102
d0 = date(last_year, last_mounth, last_day)
103
d1 = date(now_year, now_mounth, now_day)
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)
115
def unlink(self, cr, uid, ids, context=None):
116
orders = self.read(cr, uid, ids, ['state'], context=context)
119
if s['state'] in ['draft','cancel']:
120
unlink_ids.append(s['id'])
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)
125
def action_cancel_close_loan(self, cr, uid, ids, context=None):
126
self.write(cr, uid, ids, {'state': 'draft'})
127
print 'Cancel-------------'
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)])
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),
139
raise osv.except_osv(_('Warning'), _('Хүний нөөц дээр энэ ажилтанг бүртгээгүй эсвэл холбоотой хэрэглэгчийг тохируулаагүй байна!'))
142
print 'Approved-------------'
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')
151
if order.total_risk_amount != order.loan_order.loan_balance:
152
raise osv.except_osv(_('Warning'), _('Total risk amount is incorrect(loan balance)!'))
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
157
old_st = order.loan_current_state
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'
178
cid = self.pool.get('configure.product').search(cr,uid,[(condition,'=',order.loan_order.product_id.id)])
180
raise osv.except_osv(_('Warning'), _('Not found configure!'))
182
config = self.pool.get('configure.product').browse(cr,uid,cid[0])
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
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)
199
if amount_currency == order.loan_order.loan_balance:
200
amount_currency = 0.0
201
amount = order.loan_order.loan_balance
204
amount_currency = order.loan_order.loan_balance
206
if company_currency_id != currency_id:
207
am_id2 = self.pool.get('account.move').create(cr,uid, {
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),
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,
229
am_id2 = self.pool.get('account.move').create(cr,uid, {
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),
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,
250
amove2 = self.pool.get('account.move').browse(cr,uid,am_id2)
251
amove2.button_validate()
253
print 'update lorder-',self.pool.get('loan.order').write(cr,uid,order.loan_order.id,
254
{'product_id':pro_id,
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)])
266
self.write(cr, uid, ids, {'approve_accountant' : hrid[0],
269
raise osv.except_osv(_('Warning'), _('Хүний нөөц дээр энэ ажилтанг бүртгээгүй эсвэл холбоотой хэрэглэгчийг тохируулаагүй байна!'))
274
def copy(self, cr, uid, id, default=None, context=None):
279
'name': self.pool.get('ir.sequence').get(cr, uid, 'close.loan.from.rf'),
281
return super(close_loan_from_rf, self).copy(cr, uid, id, default, context)
285
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: