Merge lp:~julie-w/unifield-server/US-6379 into lp:unifield-server

Proposed by jftempo
Status: Merged
Merged at revision: 5467
Proposed branch: lp:~julie-w/unifield-server/US-6379
Merge into: lp:unifield-server
Diff against target: 152 lines (+49/-6)
4 files modified
bin/addons/account_override/account.py (+11/-2)
bin/addons/analytic_distribution/account_move_line.py (+9/-3)
bin/addons/analytic_distribution/analytic_distribution.py (+20/-1)
bin/addons/analytic_override/analytic_account.py (+9/-0)
To merge this branch: bzr merge lp:~julie-w/unifield-server/US-6379
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+371652@code.launchpad.net
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
1=== modified file 'bin/addons/account_override/account.py'
2--- bin/addons/account_override/account.py 2019-08-08 10:26:27 +0000
3+++ bin/addons/account_override/account.py 2019-08-22 14:00:42 +0000
4@@ -1248,6 +1248,8 @@
5 if default is None:
6 default = {}
7
8+ setup_obj = self.pool.get('unifield.setup.configuration')
9+
10 context.update({'omit_analytic_distribution': False})
11 je = self.browse(cr, uid, [a_id], context=context)[0]
12
13@@ -1263,12 +1265,18 @@
14 period_id = new_period[0]
15 date_start = period_obj.read(cr, uid, period_id, ['date_start'], context=context)['date_start']
16 date_start_dt = datetime.datetime.strptime(date_start, '%Y-%m-%d')
17- doc_date = (datetime.datetime.strptime(je.document_date, '%Y-%m-%d') + relativedelta(month=date_start_dt.month, year=date_start_dt.year)).strftime('%Y-%m-%d')
18 post_date = (datetime.datetime.strptime(je.date, '%Y-%m-%d') + relativedelta(month=date_start_dt.month,year=date_start_dt.year)).strftime('%Y-%m-%d')
19+ # doc. date is the original one except if doc and posting dates would be in different FY:
20+ # if this is forbidden in the configuration, the doc. date will be 'FY-01-01'
21+ if datetime.datetime.strptime(je.document_date, '%Y-%m-%d').year != date_start_dt.year and \
22+ not setup_obj.get_config(cr, uid).previous_fy_dates_allowed:
23+ doc_date = '%s-01-01' % date_start_dt.year
24+ else:
25+ doc_date = je.document_date
26 else:
27- doc_date = je.document_date
28 period_id = je.period_id and je.period_id.id or False
29 post_date = je.date
30+ doc_date = je.document_date
31
32 vals = {
33 'line_id': [],
34@@ -1281,6 +1289,7 @@
35 res = super(account_move, self).copy(cr, uid, a_id, vals, context=context)
36 for line in je.line_id:
37 line_default = {
38+ 'analytic_lines': [],
39 'move_id': res,
40 'document_date': doc_date,
41 'date': post_date,
42
43=== modified file 'bin/addons/analytic_distribution/account_move_line.py'
44--- bin/addons/analytic_distribution/account_move_line.py 2018-10-12 14:22:28 +0000
45+++ bin/addons/analytic_distribution/account_move_line.py 2019-08-22 14:00:42 +0000
46@@ -56,14 +56,17 @@
47 res = {}
48 distrib_obj = self.pool.get('analytic.distribution')
49 sql = """
50- SELECT aml.id, aml.analytic_distribution_id AS distrib_id, m.analytic_distribution_id AS move_distrib_id, aml.account_id
51+ SELECT aml.id, aml.analytic_distribution_id AS distrib_id, m.analytic_distribution_id AS move_distrib_id, aml.account_id,
52+ aml.document_date, aml.date, m.status
53 FROM account_move_line AS aml, account_move AS m
54 WHERE aml.move_id = m.id
55 AND aml.id IN %s
56 ORDER BY aml.id;"""
57 cr.execute(sql, (tuple(ids),))
58 for line in cr.fetchall():
59- res[line[0]] = distrib_obj._get_distribution_state(cr, uid, line[1], line[2], line[3])
60+ manual = line[6] == 'manu'
61+ res[line[0]] = distrib_obj._get_distribution_state(cr, uid, line[1], line[2], line[3],
62+ doc_date=line[4], posting_date=line[5], manual=manual)
63 return res
64
65 def _have_analytic_distribution_from_header(self, cr, uid, ids, name, arg, context=None):
66@@ -483,7 +486,10 @@
67 if context.get('from_web_menu', False):
68 res = []
69 for ml in self.browse(cr, uid, ids):
70- distrib_state = self.pool.get('analytic.distribution')._get_distribution_state(cr, uid, ml.analytic_distribution_id.id, ml.move_id and ml.move_id.analytic_distribution_id and ml.move_id.analytic_distribution_id.id or False, vals.get('account_id') or ml.account_id.id)
71+ distrib_state = self.pool.get('analytic.distribution')._get_distribution_state(cr, uid, ml.analytic_distribution_id.id,
72+ ml.move_id and ml.move_id.analytic_distribution_id and ml.move_id.analytic_distribution_id.id or False,
73+ vals.get('account_id') or ml.account_id.id,
74+ doc_date=ml.document_date, posting_date=ml.date, manual=ml.move_id.status=='manu')
75 if distrib_state in ['invalid', 'none']:
76 vals.update({'state': 'draft'})
77 # Add account_id because of an error with account_activable module for checking date
78
79=== modified file 'bin/addons/analytic_distribution/analytic_distribution.py'
80--- bin/addons/analytic_distribution/analytic_distribution.py 2019-04-17 10:00:14 +0000
81+++ bin/addons/analytic_distribution/analytic_distribution.py 2019-08-22 14:00:42 +0000
82@@ -42,12 +42,14 @@
83 return False
84 return True
85
86- def _get_distribution_state(self, cr, uid, distrib_id, parent_id, account_id, context=None):
87+ def _get_distribution_state(self, cr, uid, distrib_id, parent_id, account_id, context=None,
88+ doc_date=False, posting_date=False, manual=False):
89 """
90 Return distribution state
91 """
92 if context is None:
93 context = {}
94+ analytic_acc_obj = self.pool.get('account.analytic.account')
95 # Have an analytic distribution on another account than analytic-a-holic account make no sense. So their analytic distribution is valid
96 if account_id:
97 account = self.pool.get('account.account').read(cr, uid, account_id, ['is_analytic_addicted'])
98@@ -75,11 +77,20 @@
99 cc_line.analytic_id and cc_line.analytic_id.id or False, context=context):
100 return 'invalid'
101 # Check Funding pool lines regarding:
102+ # - date validity for manual entries only
103 # - destination / account
104 # - destination / cost center
105 # - If analytic account is MSF Private funds
106 # - Cost center and funding pool compatibility
107 for fp_line in distrib.funding_pool_lines:
108+ if manual:
109+ if posting_date:
110+ if not analytic_acc_obj.is_account_active(fp_line.destination_id, posting_date):
111+ return 'invalid'
112+ if not analytic_acc_obj.is_account_active(fp_line.cost_center_id, posting_date):
113+ return 'invalid'
114+ if doc_date and fp_line.analytic_id and not analytic_acc_obj.is_account_active(fp_line.analytic_id, doc_date):
115+ return 'invalid'
116 if fp_line.destination_id.id not in account.get('destination_ids', []):
117 return 'invalid'
118 if not self.check_dest_cc_compatibility(cr, uid, fp_line.destination_id.id, fp_line.cost_center_id.id, context=context):
119@@ -91,6 +102,14 @@
120 return 'invalid'
121 if fp_line.cost_center_id.id not in [x.id for x in fp_line.analytic_id.cost_center_ids]:
122 return 'invalid'
123+ # Check the date validity of the free accounts used in manual entries
124+ if manual and doc_date:
125+ for free1_line in distrib.free_1_lines:
126+ if free1_line.analytic_id and not analytic_acc_obj.is_account_active(free1_line.analytic_id, doc_date):
127+ return 'invalid'
128+ for free2_line in distrib.free_2_lines:
129+ if free2_line.analytic_id and not analytic_acc_obj.is_account_active(free2_line.analytic_id, doc_date):
130+ return 'invalid'
131 return 'valid'
132
133 def analytic_state_from_info(self, cr, uid, account_id, destination_id, cost_center_id, analytic_id, context=None):
134
135=== modified file 'bin/addons/analytic_override/analytic_account.py'
136--- bin/addons/analytic_override/analytic_account.py 2019-05-14 15:12:35 +0000
137+++ bin/addons/analytic_override/analytic_account.py 2019-08-22 14:00:42 +0000
138@@ -705,5 +705,14 @@
139 'target': 'current',
140 }
141
142+ def is_account_active(self, analytic_acc_br, date_to_check):
143+ """
144+ Returns True if the analytic account is active at the date selected, else returns False.
145+ """
146+ if date_to_check < analytic_acc_br.date_start or (analytic_acc_br.date and date_to_check >= analytic_acc_br.date):
147+ return False
148+ return True
149+
150+
151 analytic_account()
152 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

Subscribers

People subscribed via source and target branches