1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import netsvc
import time
from osv import fields, osv
class credit_line(osv.osv):
_name = 'credit.line'
_description = 'Credit line'
def get_available_amount(self, cr, uid, credit_line_id, base_amount, partner_id, context={}):
this = self.browse(cr, uid, [credit_line_id])[0]
#sum the eligible amounts for translation folder + embassy folder line for everyone and for this partner
tot_sum = 0
partner_sum = 0
#translation folder
list = self.pool.get('translation.folder').search(cr, uid, [('credit_line_id','=',this.id),('state','<>','cancel')])
for item in self.pool.get('translation.folder').browse(cr, uid, list):
#for everyone
tot_sum += item.awex_amount
if item.partner_id.id == partner_id:
#for this partner
partner_sum += item.awex_amount
#embassy folder line
list2 = self.pool.get('cci_missions.embassy_folder_line').search(cr, uid, [('credit_line_id','=',this.id),('awex_eligible','=',True)])
for item2 in self.pool.get('cci_missions.embassy_folder_line').browse(cr, uid, list2):
#for everyone
tot_sum += item2.awex_amount
if item2.folder_id.crm_case_id.partner_id.id == partner_id:
#for this partner
partner_sum += item2.awex_amount
partner_remaining_amount = this.customer_credit - partner_sum
tot_remaining_amount = this.global_credit - tot_sum
res = min(base_amount / 2, partner_remaining_amount, tot_remaining_amount)
if res < 0:
return 0
return res
_columns = {
'name':fields.char('Name', size=32, required=True),
'from_date':fields.date('From Date', required=True),
'to_date':fields.date('To Date', required=True),
'global_credit':fields.float('Global Credit', required=True),
'customer_credit':fields.float('Customer Max Credit', required=True)
}
credit_line()
class translation_folder(osv.osv):
_name = 'translation.folder'
_description = 'Translation Folder'
def cci_translation_folder_confirmed(self, cr, uid, ids, *args):
for id in self.browse(cr, uid, ids):
data = {}
data['state']='confirmed'
if id.awex_eligible and id.partner_id.awex_eligible == 'yes':
#look for an existing credit line in the current time
credit_line = self.pool.get('credit.line').search(cr, uid, [('from_date','<=',id.order_date), ('to_date', '>=', id.order_date)])
#credit_line = self.pool.get('credit.line').search(cr, uid, [('from_date','<=',time.strftime('%Y-%m-%d')), ('to_date', '>=', time.strftime('%Y-%m-%d'))])
if credit_line:
#if there is one available: get available amount from it
amount = self.pool.get('credit.line').get_available_amount(cr, uid, credit_line[0], id.base_amount, id.partner_id.id)
if amount > 0:
data['awex_amount'] = amount
data['credit_line_id'] = credit_line[0]
else:
data['awex_eligible'] = False
self.write(cr, uid, [id.id], data)
return True
_columns = {
'order_desc':fields.char('Description', size=64, required=True, select=True),
'name': fields.text('Name', required=True),
'partner_id': fields.many2one('res.partner', 'Partner', required=True),
'base_amount': fields.float('Base Amount', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'awex_eligible':fields.boolean('AWEX Eligible', readonly=True, states={'draft':[('readonly',False)]}),
'awex_amount':fields.float('AWEX Amount', readonly=True),
'state':fields.selection([('draft','Draft'),('confirmed','Confirmed'),('invoiced','Invoiced'),('done', 'Done'),('cancel','Cancel')],'State',readonly=True),
'credit_line_id': fields.many2one('credit.line', 'Credit Line', readonly=True),
'invoice_id': fields.many2one('account.invoice', 'Invoice'),
'purchase_order': fields.many2one('purchase.order', 'Purchase Order'),
'order_date':fields.date('Order Date',required=True)
}
_defaults = {
'state' : lambda *a : 'draft',
'order_date': lambda *b: time.strftime('%Y-%m-%d'),
'order_desc': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'translation.folder'),
}
translation_folder()
class letter_credence(osv.osv):
_name = 'letter.credence'
_description = 'Letter of Credence'
_columns = {
'emission_date':fields.date('Emission Date', required=True),
'asked_amount':fields.float('Asked Amount', required=True)
}
letter_credence()
class res_partner(osv.osv):
_inherit = 'res.partner'
_description = 'Partner'
_columns = {
'awex_eligible':fields.selection([('unknown','Unknown'),('yes','Yes'),('no','No')], "AWEX Eligible"),
}
_defaults = {
'awex_eligible' : lambda *a : 'unknown',
}
res_partner()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|