add field last salary to liquidation

This commit is contained in:
wilson gomez 2021-07-20 17:21:59 -05:00
parent c16abc498e
commit a4a65fb49f
4 changed files with 48 additions and 15 deletions

View file

@ -10,7 +10,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">assistant_update_employee_start_view_form</field>
</record>
<record model="ir.action.wizard" id="wizard_assistant_update_employee">
<field name="name">Asssitant Update Employee Wizard</field>
<field name="name">Assistant Update Employee Wizard</field>
<field name="wiz_name">staff.employee.update_employee</field>
</record>

View file

@ -100,6 +100,8 @@ class Liquidation(Workflow, ModelSQL, ModelView):
start = fields.Function(fields.Date('Start Date'), 'get_dates')
end = fields.Function(fields.Date('End Date'), 'get_dates')
party_to_pay = fields.Many2One('party.party', 'Party to Pay', states=STATES)
last_salary = fields.Numeric('Last Salary', states=STATES,
digits=(16, 2))
@classmethod
def __setup__(cls):
@ -277,6 +279,23 @@ class Liquidation(Workflow, ModelSQL, ModelView):
payrolls_ids = [payroll.id for payroll in payrolls]
return payrolls_ids
def get_salary(self, name):
res = 0
if self.contract:
if name == 'last_salary':
res = self.contract.salary
elif name == 'salary_average':
Payroll = Pool().get('staff.payroll')
Wage = Pool().get('staff.wage_type')
wage, = Wage.search([('type_concept', '=', 'unemployment')])
res = Payroll.get_salary_average(self.end, self.employee, self.contract, wage)
values = [self.end_period.end]
if self.employee.contract.end_date:
values.append(self.employee.contract.end_date)
res = min(values)
return res
def create_move(self):
pool = Pool()
Move = pool.get('account.move')
@ -510,6 +529,10 @@ class Liquidation(Workflow, ModelSQL, ModelView):
delta = 0
return delta
def on_change_contract(self):
if self.contract:
self.last_salary = self.contract.salary
def countLeapYears(self, d):
years = d.year
@ -598,6 +621,8 @@ class LiquidationLine(ModelSQL, ModelView):
adjustments = fields.One2Many('staff.liquidation.line_adjustment',
'staff_liquidation_line', 'Adjustments')
party_to_pay = fields.Many2One('party.party', 'Party to Pay')
salary_average = fields.Function(fields.Numeric('Salary Average',
digits=(16, 2)), 'get_average_payroll')
@classmethod
def __setup__(cls):
@ -637,6 +662,14 @@ class LiquidationLine(ModelSQL, ModelView):
amount_ += sum([(ml.credit - ml.debit) for ml in self.move_lines])
return amount_
def get_average_payroll(self, name):
contract = self.liquidation.contract
employee = self.liquidation.employee
end = self.liquidation.end
Payroll = Pool().get('staff.payroll')
res = Payroll.get_salary_average(end, employee, contract, self.wage) * 30
return res
class LiquidationLineAdjustment(ModelSQL, ModelView):
'Liquidation Adjustment'

View file

@ -356,15 +356,16 @@ class Payroll(metaclass=PoolMeta):
])
return payrolls
def _get_payrolls_period(self, start_date, end_date):
@classmethod
def _get_payrolls_period(cls, employee, contract, start_date, end_date):
_, end_day = calendar.monthrange(end_date.year, end_date.month)
start = date(start_date.year, start_date.month, 1)
end = date(end_date.year, end_date.month, end_day)
payrolls = self.search([
('employee', '=', self.employee.id),
payrolls = cls.search([
('employee', '=', employee.id),
('start', '>=', start),
('start', '<=', end),
('contract', '=', self.contract.id)
('contract', '=', contract.id)
])
return payrolls
@ -469,7 +470,7 @@ class Payroll(metaclass=PoolMeta):
unit_value = Decimal(event.amount_to_pay)
else:
if event.is_vacations:
unit_value = self.get_salary_average(wage)
unit_value = self.get_salary_average(self.start, self.employee, self.contract, wage)
else:
unit_value = wage.compute_unit_price(salary_args)
res = self.get_line(wage, qty_pay, unit_value)
@ -486,9 +487,10 @@ class Payroll(metaclass=PoolMeta):
self.save()
return discounts
def get_salary_average(self, wage):
end_date = self.start
start_date_contract = self.contract.start_date
@classmethod
def get_salary_average(cls, end_date, employee, contract, wage):
# end_date = self.start
start_date_contract = contract.start_date
start_date = end_date + relativedelta(months=-4)
if start_date <= start_date_contract:
@ -498,7 +500,7 @@ class Payroll(metaclass=PoolMeta):
average_days_monthly = []
while next_date < end_date:
_, end_day = calendar.monthrange(next_date.year, next_date.month)
payrolls = self._get_payrolls_period(next_date, next_date)
payrolls = cls._get_payrolls_period(employee, contract, next_date, next_date)
salary_base = 0
worked_days = 0
if payrolls:
@ -510,13 +512,9 @@ class Payroll(metaclass=PoolMeta):
worked_days = 30
average_day = salary_base / worked_days
average_days_monthly.append(average_day)
next_date += relativedelta(months=1)
res = sum(average_days_monthly)/len(average_days_monthly)
# if len(average_days_monthly) != len(set(average_days_monthly)):
# res = sum(average_days_monthly)/len(average_days_monthly) * 30
# else:
# res = sum(average_days_monthly)/len(average_days_monthly) * 30
return res
def update_wage_no_salary(self):

View file

@ -16,6 +16,8 @@ this repository contains the full copyright notices and license terms.-->
<field name="account"/>
<label name="party_to_pay"/>
<field name="party_to_pay"/>
<label name="salary_average"/>
<field name="salary_average"/>
<notebook colspan="6">
<page string="General" id="general">
<field name="move_lines" colspan="4"/>