Add compute move line sin diffrent method
This commit is contained in:
parent
0545df2679
commit
3ae22ef873
101
liquidation.py
101
liquidation.py
|
@ -401,11 +401,25 @@ class Liquidation(Workflow, ModelSQL, ModelView):
|
|||
date_end = self.contract.end_date
|
||||
return date_start, date_end
|
||||
|
||||
@classmethod
|
||||
def get_moves_lines_pending(cls, employee, wage_type, moves_ids):
|
||||
MoveLine = Pool().get('account.move.line')
|
||||
lines = []
|
||||
if not wage_type.credit_account:
|
||||
return
|
||||
|
||||
account_id = wage_type.credit_account.id
|
||||
lines = MoveLine.search([
|
||||
('move', 'in', moves_ids),
|
||||
('account', '=', account_id),
|
||||
('party', '=', employee.party.id),
|
||||
('reconciliation', '=', None),
|
||||
])
|
||||
return lines
|
||||
|
||||
def set_liquidation_lines(self):
|
||||
pool = Pool()
|
||||
Payroll = pool.get('staff.payroll')
|
||||
Liquidation = pool.get('staff.liquidation')
|
||||
MoveLine = pool.get('account.move.line')
|
||||
date_start, date_end = self._get_dates()
|
||||
payrolls = Payroll.search([
|
||||
('employee', '=', self.employee.id),
|
||||
|
@ -416,13 +430,14 @@ class Liquidation(Workflow, ModelSQL, ModelView):
|
|||
wages = {}
|
||||
days = 0
|
||||
moves_ids = []
|
||||
wages_target = {}
|
||||
for payroll in payrolls:
|
||||
if not payroll.move:
|
||||
continue
|
||||
days += payroll.worked_days
|
||||
moves_ids.append(payroll.move.id)
|
||||
|
||||
for payroll in payrolls:
|
||||
days += payroll.worked_days
|
||||
for l in payroll.lines:
|
||||
if not l.wage_type.contract_finish:
|
||||
continue
|
||||
|
@ -443,17 +458,20 @@ class Liquidation(Workflow, ModelSQL, ModelView):
|
|||
continue
|
||||
if not l.wage_type.contract_finish:
|
||||
continue
|
||||
if l.wage_type.id not in wages:
|
||||
account_id = None
|
||||
if l.wage_type.credit_account:
|
||||
account_id = l.wage_type.credit_account.id
|
||||
lines = MoveLine.search([
|
||||
('move', 'in', moves_ids),
|
||||
('account', '=', account_id),
|
||||
('party', '=', self.employee.party.id),
|
||||
('reconciliation', '=', None),
|
||||
])
|
||||
|
||||
if l.wage_type.id not in wages_target.keys():
|
||||
mlines = self.get_moves_lines_pending(
|
||||
payroll.employee, l.wage_type, moves_ids
|
||||
)
|
||||
if not mlines:
|
||||
continue
|
||||
wages_target[l.wage_type.id] = [
|
||||
l.wage_type.credit_account.id,
|
||||
mlines,
|
||||
l.wage_type,
|
||||
]
|
||||
|
||||
# wages.append(l.wage_type.id)
|
||||
# This looks for lines provisioned before start period
|
||||
# old_lines_provisioned = MoveLine.search([
|
||||
# ('party', '=', self.employee.party.id),
|
||||
|
@ -463,26 +481,24 @@ class Liquidation(Workflow, ModelSQL, ModelView):
|
|||
# ])
|
||||
# lines.extend(old_lines_provisioned)
|
||||
|
||||
values = []
|
||||
lines_to_reconcile = []
|
||||
for line in lines:
|
||||
values.append(abs(line.debit - line.credit))
|
||||
lines_to_reconcile.append(line.id)
|
||||
wages[l.wage_type.id] = {
|
||||
'sequence': l.wage_type.sequence,
|
||||
'wage': l.wage_type.id,
|
||||
'description': l.wage_type.name,
|
||||
'amount': sum(values),
|
||||
'days': self.time_contracting,
|
||||
'account': account_id,
|
||||
'move_lines': [('add', lines_to_reconcile)],
|
||||
'party_to_pay': self.party_to_pay,
|
||||
}
|
||||
for (account_id, lines, wage_type) in wages_target.values():
|
||||
values = []
|
||||
lines_to_reconcile = []
|
||||
for line in lines:
|
||||
values.append(abs(line.debit - line.credit))
|
||||
lines_to_reconcile.append(line.id)
|
||||
wages[wage_type.id] = {
|
||||
'sequence': wage_type.sequence,
|
||||
'wage': wage_type.id,
|
||||
'description': wage_type.name,
|
||||
'amount': sum(values),
|
||||
'days': self.time_contracting,
|
||||
'account': account_id,
|
||||
'move_lines': [('add', lines_to_reconcile)],
|
||||
'party_to_pay': self.party_to_pay,
|
||||
}
|
||||
|
||||
lines_to_create = wages.values()
|
||||
Liquidation.write([self], {
|
||||
'lines': [('create', lines_to_create)]}
|
||||
)
|
||||
Liquidation.write([self], {'lines': [('create', wages.values())]})
|
||||
|
||||
@fields.depends('start_period', 'end_period', 'contract')
|
||||
def on_change_with_time_contracting(self):
|
||||
|
@ -771,6 +787,7 @@ class LiquidationGroup(Wizard):
|
|||
Liquidation = pool.get('staff.liquidation')
|
||||
Contract = pool.get('staff.contract')
|
||||
Employee = pool.get('company.employee')
|
||||
Payroll = pool.get('staff.payroll')
|
||||
to_liquidation = []
|
||||
|
||||
start_period = self.start.start_period.id
|
||||
|
@ -803,6 +820,26 @@ class LiquidationGroup(Wizard):
|
|||
continue
|
||||
|
||||
contract = contracts[0]
|
||||
|
||||
if kind == 'unemployment':
|
||||
payrolls = Payroll.search([
|
||||
('contract', '=', contract.id),
|
||||
('move', '!=', None),
|
||||
])
|
||||
moves_ids = [p.move.id for p in payrolls]
|
||||
wages = [
|
||||
mw for mw in employee.mandatory_wages
|
||||
if mw.wage_type.type_concept == 'unemployment'
|
||||
]
|
||||
if not wages:
|
||||
continue
|
||||
wage = wages[0]
|
||||
lines = Liquidation.get_moves_lines_pending(
|
||||
employee, wage.wage_type, moves_ids
|
||||
)
|
||||
if not lines:
|
||||
continue
|
||||
|
||||
lqt_create = {
|
||||
'start_period': start_period,
|
||||
'end_period': end_period,
|
||||
|
|
|
@ -56,7 +56,7 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<field name="domain" eval="[]" pyson="1"/>
|
||||
<field name="act_window" ref="act_liquidation_form"/>
|
||||
</record>
|
||||
<menuitem name="Liquidation" parent="staff.menu_staff" sequence="20"
|
||||
<menuitem name="Liquidation" parent="staff.menu_staff" sequence="10"
|
||||
id="menu_staff_liquidation" action="act_liquidation_form"/>
|
||||
|
||||
<record model="ir.ui.view" id="liquidation_line_view_form">
|
||||
|
|
Loading…
Reference in New Issue