payslip_faults.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. # -*- coding: utf-8 -*-
  2. from openerp import api, fields, models
  3. from openerp.exceptions import except_orm
  4. from datetime import datetime
  5. from pytz import timezone
  6. DATE_FORMAT = '%Y-%m-%d'
  7. class HrPayslip(models.Model):
  8. _inherit = 'hr.payslip'
  9. ''' GET Statement - Obtener las caja abierta/nueva del usuario '''
  10. @api.model
  11. def get_statement_available(self):
  12. BankStatement = []
  13. for statement in self.env['account.bank.statement'].search([('state','!=','confirm'),('user_id','=',self.env.user.id)]):
  14. if (statement.journal_id.type == 'cash' and statement.state =='draft'):
  15. continue
  16. BankStatement.append({
  17. 'id': statement.id,
  18. 'name': statement.name,
  19. 'journalID': statement.journal_id.id,
  20. 'userId': statement.user_id.id,
  21. 'date': statement.date,
  22. 'createDate': statement.create_date,
  23. 'periodId': statement.period_id.id,
  24. 'state': statement.state,
  25. 'journalType': statement.journal_id.type
  26. })
  27. return BankStatement
  28. ''' Recalcular las lineas de la nomina '''
  29. @api.model
  30. def recompute_sheet(self, values):
  31. payslip = self.env['hr.payslip'].browse(values)
  32. ''' Faltas de Funcionario '''
  33. payslip_worked = self.env['hr.payslip.worked_days'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'FALTAS')])
  34. ''' Adelanto '''
  35. payslip_advancement = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'ADL')])
  36. ''' Comision '''
  37. payslip_commission = self.env['hr.payslip.input'].search([('payslip_id', '=' ,payslip.id),('code', '=', 'CMS')])
  38. line_worked = None
  39. line_advancent = None
  40. line_commission = None
  41. if payslip_worked:
  42. days = 0
  43. for worked in payslip_worked:
  44. days = days + worked.number_of_days
  45. worked_days = {
  46. 'name': 'Total Faltas',
  47. 'code': 'FALTAS',
  48. 'number_of_days': days,
  49. 'number_of_hours': 0,
  50. 'payslip_id': payslip.id,
  51. 'contract_id': payslip.contract_id.id,
  52. 'sequence': 15
  53. }
  54. line_worked = self.env['hr.payslip.worked_days'].create(worked_days)
  55. if payslip_advancement:
  56. amount = 0
  57. for advancement in payslip_advancement:
  58. amount = amount + advancement.amount
  59. advancement_line = {
  60. 'name': "Total Adelantos",
  61. 'code': 'ADL',
  62. 'amount': amount,
  63. 'payslip_id': payslip.id,
  64. 'contract_id': payslip.contract_id.id,
  65. 'sequence': 15
  66. }
  67. line_advancent = self.env['hr.payslip.input'].create(advancement_line)
  68. if payslip_commission:
  69. amount = 0
  70. for commission in payslip_commission:
  71. amount = amount + commission.amount
  72. commission_line = {
  73. 'name': "Total Adelantos",
  74. 'code': 'CMS',
  75. 'amount': amount,
  76. 'payslip_id': payslip.id,
  77. 'contract_id': payslip.contract_id.id,
  78. 'sequence': 15
  79. }
  80. line_commission = self.env['hr.payslip.input'].create(commission_line)
  81. payslip.cancel_sheet()
  82. payslip.hr_verify_sheet()
  83. payslip.process_sheet()
  84. if line_worked:
  85. line_worked.unlink()
  86. if line_advancent:
  87. line_advancent.unlink()
  88. if line_commission:
  89. line_commission.unlink()
  90. return True if payslip else False
  91. ''' Crear nueva falta '''
  92. @api.model
  93. def join_payslip_faults(self, values):
  94. payslip = self.env['hr.payslip'].browse(values['id'])
  95. new_line = self.env['hr.payslip.worked_days']
  96. if values['faultsDays'] > 0:
  97. payslip_worked_days = {
  98. 'name': values['faultsDescri'] if values['faultsDescri'] else "Falta",
  99. 'code': 'FALTAS',
  100. 'number_of_days': values['faultsDays'],
  101. 'number_of_hours': 0,
  102. 'payslip_id': payslip.id,
  103. 'contract_id': payslip.contract_id.id,
  104. 'sequence': 10
  105. }
  106. new_line.create(payslip_worked_days)
  107. recompute_sheet = self.recompute_sheet(values['id'])
  108. return True if recompute_sheet else False
  109. ''' Eliminar falta '''
  110. @api.model
  111. def unlink_payslip_worked(self, values):
  112. worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])])
  113. unlink_work = worked_days.unlink()
  114. return True if unlink_work else False
  115. ''' Modificar Falta '''
  116. @api.model
  117. def write_payslip_worked(self, values):
  118. worked_days = self.env['hr.payslip.worked_days'].search([('payslip_id', '=', values['id']),('id', '=', values['worked_id'])])
  119. worked_update = {
  120. 'name': values['name'],
  121. 'number_of_days': values['days']
  122. }
  123. worked_days.write(worked_update)
  124. return True if worked_days else False
  125. ''' Get timezone '''
  126. def get_timezone(self):
  127. tz_name = self._context.get('tz') or self.env.user.tz
  128. return timezone(tz_name)
  129. ''' Get server date '''
  130. def get_server_datetime(self):
  131. return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
  132. ''' check_module Installed '''
  133. def check_module(self, module_name):
  134. '''
  135. Método para verificar si los modulo están instalado
  136. :param module_name : Nombre del moduloself.
  137. :return: True 'Modulo instalado', False 'no instalado'
  138. '''
  139. module = self.env['ir.module.module'].search([('name', '=', module_name), ('state', '=', 'installed')])
  140. return len(module) != 0
  141. ''' Create payslip input '''
  142. def cretae_eiru_payslip_input(self, values):
  143. return self.env['hr.payslip.input'].create(values)
  144. ''' Crear Adelanto/comision '''
  145. @api.model
  146. def create_payslip_input(self,values):
  147. date_server = self.get_server_datetime()
  148. resUser = self.env.user.id
  149. payslip = self.env['hr.payslip'].browse(values['id'])
  150. if (not payslip):
  151. return False
  152. input_line = {
  153. 'name': values['details'],
  154. 'code': values['salaryRule'],
  155. 'amount': values['amount'],
  156. 'contract_id': payslip.contract_id.id,
  157. 'sequence': 10,
  158. 'payslip_id': payslip.id
  159. }
  160. ''' Create line '''
  161. inputPayslip = self.cretae_eiru_payslip_input(input_line)
  162. if (inputPayslip) and (values['salaryRule'] == 'ADL'):
  163. statementId = None
  164. if (self.check_module('eiru_account_bank_statement_utility')):
  165. statementConfig = self.env['account.bank.statement.config'].browse(values['statementConfigId'])
  166. if (statementConfig):
  167. if (statementConfig.import_statement_payslip == 'manual_import'):
  168. statementId = values['statementId']
  169. statementBank = self.create_eiru_bank_statement(values['journal'], statementId, date_server, resUser)
  170. statementBankLine = self.create_eiru_bank_statement_line(date_server, statementBank, inputPayslip.id,payslip.id)
  171. return True
  172. ''' Create Statement '''
  173. def create_eiru_bank_statement(self, JournalId, statementId, date_server, resUser):
  174. accountJournal = self.env['account.journal'].browse(JournalId)
  175. period = self.env['account.period'].search([('date_start', '<=', date_server),('date_stop', '>=', date_server)])
  176. domain = [('journal_id', '=', JournalId),('user_id', '=', resUser)]
  177. if (statementId):
  178. domain.append(('id', '=', statementId))
  179. else:
  180. domain.append(('date', '=', date_server))
  181. bank_statement = self.env['account.bank.statement'].search(domain)
  182. bank = {
  183. 'journal_id': accountJournal.id,
  184. 'period_id': period.id,
  185. 'date': date_server,
  186. 'user_id': resUser,
  187. 'state': 'open' if accountJournal.type == 'cash' else 'draft',
  188. }
  189. bankStatement = bank_statement
  190. if bank_statement:
  191. if len(bank_statement) != 1:
  192. bankStatement = bank_statement[len(bank_statement) -1]
  193. bankStatement.write({'state': 'open' if accountJournal.type == 'cash' else 'draft'})
  194. else:
  195. bankStatement = bank_statement.create(bank)
  196. return bankStatement
  197. ''' Create statement Line '''
  198. def create_eiru_bank_statement_line(self, dateServer, statement, payslipInputID, payslipId):
  199. payslip_input = self.env['hr.payslip.input'].browse(payslipInputID)
  200. payslip = self.env['hr.payslip'].browse(payslipId)
  201. bank_statement_line = {
  202. 'date' : dateServer,
  203. 'statement_id' : statement.id,
  204. 'journal_id': statement.journal_id.id,
  205. 'amount': payslip_input.amount,
  206. 'account_id': statement.journal_id.internal_account_id.id,
  207. 'ref': payslip_input.code,
  208. 'name': payslip_input.name,
  209. 'partner_id': payslip.employee_id.address_home_id.id,
  210. 'note': payslip_input.id,
  211. }
  212. statementLine = self.env['account.bank.statement.line'].create(bank_statement_line)
  213. return statementLine
  214. ''' Export Statement '''
  215. @api.model
  216. def bank_statement_import(self, values):
  217. date_server = self.get_server_datetime()
  218. resUserId = self.env.user.id
  219. ''' consultar payslip'''
  220. payslip = self.env['hr.payslip'].browse(values['payslipId'])
  221. if (not payslip):
  222. return False
  223. ''' consultar payslip_input '''
  224. payslip_input = self.env['hr.payslip.input'].browse(values['imputId'])
  225. if (not payslip_input):
  226. return False
  227. ''' consultar accountJournal '''
  228. journal = self.env['account.journal'].browse(values['journalid'])
  229. if (not journal):
  230. return False
  231. statement = self.create_eiru_bank_statement(journal.id, values['statementId'], date_server, resUserId)
  232. statementLine = self.create_eiru_bank_statement_line(date_server, statement, payslip_input.id, payslip.id)
  233. ''' Eliminar Comision '''
  234. @api.model
  235. def unlink_payslip_input(self,values):
  236. payslip_input =self.env['hr.payslip.input'].search([('id', '=', values['input_id']),('payslip_id', '=', values['id'])])
  237. payslip_input.unlink()
  238. return True if payslip_input else False
  239. ''' Actualizar Comision '''
  240. @api.model
  241. def write_payslip_input(self, values):
  242. paylip_input = self.env['hr.payslip.input'].search([('payslip_id', '=', values['id']),('id', '=', values['input_id'])])
  243. input_update = {
  244. 'name': values['descript_input'],
  245. 'amount': values['amount_input']
  246. }
  247. paylip_input.write(input_update)
  248. return True if paylip_input else False