payslip_faults.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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. input_payslip = payslip_input.create(input_line)
  116. if (input_payslip) and (values['salary_rule'] == 'ADL'):
  117. value_statement = {
  118. 'id_imput': input_payslip.id,
  119. 'journal_id': values['journal'],
  120. 'journal_ref': values['journal_ref']
  121. }
  122. self.bank_statement_import(value_statement)
  123. return True if input_payslip else False
  124. @api.model
  125. def bank_statement_import(self, values):
  126. #period Actual
  127. period = self.env['account.period'].search([('date_start', '<=', fields.Date.context_today(self) ),('date_stop', '>=', fields.Date.context_today(self))])
  128. ### consultar payslip_input
  129. payslip_input = self.env['hr.payslip.input'].search([('id', '=', values['id_imput'])])
  130. ### consultar payslip
  131. payslip = self.env['hr.payslip'].search([('id', '=', payslip_input.payslip_id.id)])
  132. ### consultar accountJournal
  133. journal = self.env['account.journal'].search([('id', '=', values['journal_id'])])
  134. ### Consultar Caja Abierta, Método de Pagos, Fecha de Hoy
  135. bank_statement = self.env['account.bank.statement'].search([('journal_id', 'in', [journal.id]), ('date', '=', fields.Date.context_today(self))])
  136. ### Instanciar lineas de la caja
  137. statement_line = self.env['account.bank.statement.line']
  138. ## Crear o Actualizar statement
  139. bank = {
  140. 'journal_id': journal.id,
  141. 'period_id': period.id,
  142. 'date': fields.Date.context_today(self),
  143. 'user_id': self.env.user.id,
  144. 'state': 'open' if journal.type == 'cash' else 'draft',
  145. }
  146. # #
  147. if bank_statement:
  148. if len(bank_statement) == 1:
  149. bank_statement.write(bank)
  150. else:
  151. bank_statement[len(bank_statement) -1].write(bank)
  152. else:
  153. bank_statement = bank_statement.create(bank)
  154. ### Crear statement_line
  155. bank_statement_line = {
  156. 'date' : bank_statement.date,
  157. 'statement_id' : bank_statement.id,
  158. 'journal_id': bank_statement.journal_id.id,
  159. 'amount': payslip_input.amount,
  160. 'account_id': bank_statement.journal_id.internal_account_id.id,
  161. 'ref': payslip_input.code,
  162. 'name': str(payslip_input.name)+"(Ref. pago: "+str(values['journal_ref'])+")" if values['journal_ref'] else payslip_input.name,
  163. 'partner_id': payslip.employee_id.address_home_id.id,
  164. 'note': payslip_input.id,
  165. }
  166. statement_line.create(bank_statement_line)
  167. return True if statement_line else False
  168. # Eliminar Comision
  169. @api.model
  170. def unlink_payslip_input(self,values):
  171. payslip_input =self.env['hr.payslip.input'].search([('id', '=', values['input_id']),('payslip_id', '=', values['id'])])
  172. payslip_input.unlink()
  173. return True if payslip_input else False
  174. # Actualizar Comision
  175. @api.model
  176. def write_payslip_input(self, values):
  177. paylip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', values['id']),('id', '=', values['input_id'])])
  178. input_update = {
  179. 'name': values['descript_input'],
  180. 'amount': values['amount_input']
  181. }
  182. paylip_input.write(input_update)
  183. return True if paylip_input else False