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.hr_verify_sheet()
  60. payslip.process_sheet()
  61. if line_worked:
  62. line_worked.unlink()
  63. if line_advancent:
  64. line_advancent.unlink()
  65. if line_commission:
  66. line_commission.unlink()
  67. return True if payslip else False
  68. # Crear nueva falta
  69. @api.model
  70. def join_payslip_faults(self, values):
  71. payslip = self.env['hr.payslip'].browse(values['id'])
  72. new_line = self.env['hr.payslip.worked_days']
  73. if values['faultsDays'] > 0:
  74. payslip_worked_days = {
  75. 'name': values['faultsDescri'] if values['faultsDescri'] else "Falta",
  76. 'code': 'FALTAS',
  77. 'number_of_days': values['faultsDays'],
  78. 'number_of_hours': 0,
  79. 'payslip_id': payslip.id,
  80. 'contract_id': payslip.contract_id.id,
  81. 'sequence': 10
  82. }
  83. new_line.create(payslip_worked_days)
  84. recompute_sheet = self.recompute_sheet(values['id'])
  85. return True if recompute_sheet else False
  86. # Eliminar falta
  87. @api.model
  88. def unlink_payslip_worked(self, values):
  89. worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])])
  90. unlink_work = worked_days.unlink()
  91. return True if unlink_work else False
  92. # Modificar Falta
  93. @api.model
  94. def write_payslip_worked(self, values):
  95. worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])])
  96. worked_update = {
  97. 'name': values['name'],
  98. 'number_of_days': values['days']
  99. }
  100. worked_days.write(worked_update)
  101. return True if worked_days else False
  102. # Crear Adelanto/comision
  103. @api.model
  104. def create_payslip_input(self,values):
  105. payslip = self.env['hr.payslip'].browse(values['id'])
  106. payslip_input = self.env['hr.payslip.input']
  107. input_line = {
  108. 'name': values['details'],
  109. 'code': values['salary_rule'],
  110. 'amount': values['ammount_input'],
  111. 'contract_id': payslip.contract_id.id,
  112. 'sequence': 10,
  113. 'payslip_id': payslip.id
  114. }
  115. payslip_input.create(input_line)
  116. return True if payslip_input else False
  117. # Eliminar Adelanto/Comision
  118. @api.model
  119. def unlink_payslip_input(self,values):
  120. payslip_input =self.env['hr.payslip.input'].search([('id', '=', values['input_id']),('payslip_id', '=', values['id'])])
  121. payslip_input.unlink()
  122. return True if payslip_input else False
  123. # Actualizar Aelanto Comision
  124. @api.model
  125. def write_payslip_input(self, values):
  126. paylip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', values['id']),('id', '=', values['input_id'])])
  127. input_update = {
  128. 'name': values['descript_input'],
  129. 'amount': values['amount_input']
  130. }
  131. paylip_input.write(input_update)
  132. return True if paylip_input else False