payslip_faults.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # -*- coding: utf-8 -*-
  2. from openerp import api, fields, models
  3. from openerp.exceptions import except_orm
  4. class HrPayslip(models.Model):
  5. _inherit = 'hr.payslip'
  6. #Recalcular las lineas de la nomina
  7. @api.model
  8. def recompute_sheet(self, values):
  9. payslip = self.env['hr.payslip'].browse(values)
  10. # Faltas de Funcionario
  11. payslip_worked = self.env['hr.payslip.worked_days'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'FALTAS')])
  12. # Adelanto
  13. payslip_advancement = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'ADL')])
  14. # Comision
  15. payslip_commission = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'CMS')])
  16. line_worked = None
  17. line_advancent = None
  18. line_commission = None
  19. if payslip_worked:
  20. days = 0
  21. for worked in payslip_worked:
  22. days = days + worked.number_of_days
  23. worked_days = {
  24. 'name': 'Total Faltas',
  25. 'code': 'FALTAS',
  26. 'number_of_days': days,
  27. 'number_of_hours': 0,
  28. 'payslip_id': payslip.id,
  29. 'contract_id': payslip.contract_id.id,
  30. 'sequence': 15
  31. }
  32. line_worked = self.env['hr.payslip.worked_days'].create(worked_days)
  33. if payslip_advancement:
  34. amount = 0
  35. for advancement in payslip_advancement:
  36. amount = amount + advancement.amount
  37. advancement_line = {
  38. 'name': "Total Adelantos",
  39. 'code': 'ADL',
  40. 'amount': amount,
  41. 'payslip_id': payslip.id,
  42. 'contract_id': payslip.contract_id.id,
  43. 'sequence': 15
  44. }
  45. line_advancent = self.env['hr.payslip.input'].create(advancement_line)
  46. if payslip_commission:
  47. amount = 0
  48. for commission in payslip_commission:
  49. amount = amount + commission.amount
  50. commission_line = {
  51. 'name': "Total Adelantos",
  52. 'code': 'CMS',
  53. 'amount': amount,
  54. 'payslip_id': payslip.id,
  55. 'contract_id': payslip.contract_id.id,
  56. 'sequence': 15
  57. }
  58. line_commission = self.env['hr.payslip.input'].create(commission_line)
  59. payslip.compute_sheet()
  60. if line_worked:
  61. line_worked.unlink()
  62. if line_advancent:
  63. line_advancent.unlink()
  64. if line_commission:
  65. line_commission.unlink()
  66. return True if payslip else False
  67. # Crear nueva falta
  68. @api.model
  69. def join_payslip_faults(self, values):
  70. payslip = self.env['hr.payslip'].browse(values['id'])
  71. new_line = self.env['hr.payslip.worked_days']
  72. if values['faultsDays'] > 0:
  73. payslip_worked_days = {
  74. 'name': values['faultsDescri'] if values['faultsDescri'] else "Falta",
  75. 'code': 'FALTAS',
  76. 'number_of_days': values['faultsDays'],
  77. 'number_of_hours': 0,
  78. 'payslip_id': payslip.id,
  79. 'contract_id': payslip.contract_id.id,
  80. 'sequence': 10
  81. }
  82. new_line.create(payslip_worked_days)
  83. recompute_sheet = self.recompute_sheet(values['id'])
  84. return True if recompute_sheet else False
  85. # Eliminar falta
  86. @api.model
  87. def unlink_payslip_worked(self, values):
  88. worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])])
  89. unlink_work = worked_days.unlink()
  90. return True if unlink_work else False
  91. # Modificar Falta
  92. @api.model
  93. def write_payslip_worked(self, values):
  94. worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])])
  95. worked_update = {
  96. 'name': values['name'],
  97. 'number_of_days': values['days']
  98. }
  99. worked_days.write(worked_update)
  100. return True if worked_days else False
  101. # Crear Adelanto/comision
  102. @api.model
  103. def create_payslip_input(self,values):
  104. payslip = self.env['hr.payslip'].browse(values['id'])
  105. payslip_input = self.env['hr.payslip.input']
  106. input_line = {
  107. 'name': values['details'],
  108. 'code': values['salary_rule'],
  109. 'amount': values['ammount_input'],
  110. 'contract_id': payslip.contract_id.id,
  111. 'sequence': 10,
  112. 'payslip_id': payslip.id
  113. }
  114. payslip_input.create(input_line)
  115. return True if payslip_input else False
  116. # Eliminar Adelanto/Comision
  117. @api.model
  118. def unlink_payslip_input(self,values):
  119. payslip_input =self.env['hr.payslip.input'].search([('id', '=', values['input_id']),('payslip_id', '=', values['id'])])
  120. payslip_input.unlink()
  121. return True if payslip_input else False
  122. # Actualizar Aelanto Comision
  123. @api.model
  124. def write_payslip_input(self, values):
  125. paylip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', values['id']),('id', '=', values['input_id'])])
  126. input_update = {
  127. 'name': values['descript_input'],
  128. 'amount': values['amount_input']
  129. }
  130. paylip_input.write(input_update)
  131. return True if paylip_input else False