Add compute move line sin diffrent method

This commit is contained in:
Oscar Alvarez 2021-02-07 11:24:50 -05:00
parent 0545df2679
commit 3ae22ef873
2 changed files with 70 additions and 33 deletions

View File

@ -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,

View File

@ -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">