cashbox_transfer.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request
  3. _MODEL = 'cash.box.transfer'
  4. def create_cashbox_transfer(data):
  5. from account_bank_statement import search_account_bank_statement
  6. from account_bank_statement_line import create_statement_line
  7. ''' Statement Origin '''
  8. statementOrigin = search_account_bank_statement(data['casboxOriginId'])
  9. if (not statementOrigin):
  10. return {
  11. 'state': False,
  12. 'message': 'Error. Obtener la Caja'
  13. }
  14. ''' Statement Destino '''
  15. statementDest = search_account_bank_statement(data['casboxDestID'])
  16. if (not statementDest):
  17. return {
  18. 'state': False,
  19. 'message': 'Error. Obtener la Caja'
  20. }
  21. ''' Caja Origin (line) '''
  22. lineOrigin = create_statement_line({
  23. 'statement_id': statementOrigin['id'],
  24. 'name': "TRANSFERIDO A(%s) Ref. %s" % (statementDest['name'], data['description']),
  25. 'amount': -data['amount'] ,
  26. 'ref': 'TRANSFERENCIA',
  27. 'account_id': statementOrigin['accountId'],
  28. 'journal_id': statementOrigin['journalId'],
  29. # 'is_deleted': True
  30. })
  31. if (not lineOrigin):
  32. return {
  33. 'state': False,
  34. 'message': 'Error de transferencia, registro de salida de caja.'
  35. }
  36. ''' Caja Destino (line) '''
  37. lineDest = create_statement_line({
  38. 'statement_id': statementDest['id'],
  39. 'name': "TRANSFERIDO DE(%s) Ref. %s" % (statementOrigin['name'], data['description']),
  40. 'amount': abs(data['amount']),
  41. 'ref': 'TRANSFERENCIA',
  42. 'account_id': statementDest['accountId'],
  43. 'journal_id': statementDest['journalId'],
  44. # 'is_deleted': True
  45. })
  46. cash = {
  47. 'name': "TRANSFERENCIA %s a %s" %(statementOrigin['name'], statementDest['name']),
  48. 'amount': abs(data['amount']),
  49. 'ref': data['description'],
  50. 'input_line': lineDest.id,
  51. 'output_line': lineOrigin.id,
  52. 'input_statement': statementDest['id'],
  53. 'output_statement': statementOrigin['id'],
  54. 'date': lineDest.date
  55. }
  56. transfer = request.env[_MODEL].sudo().create(cash)
  57. result = {
  58. 'state': True,
  59. 'message': "Transferencia realizada con suceso."
  60. }
  61. if (not transfer):
  62. result = {
  63. 'state': False,
  64. 'message': "Error.. En la creación de la transferencia."
  65. }
  66. return result
  67. ''' Verify trasnfer for line'''
  68. def verify_transfer(line):
  69. transfer = request.env[_MODEL].search(['|',('input_line.id','=',line),('output_line.id','=',line)])
  70. if (not transfer):
  71. return {}
  72. messageConfirm = ""
  73. statementConfirm = False
  74. if (transfer.input_statement.state == 'confirm'):
  75. messageConfirm += "La caja origen (%s), ya esta cerrada." %(transfer.input_statement.name)
  76. statementConfirm = True
  77. if (transfer.output_statement.state == 'confirm'):
  78. messageConfirm += "La caja destino (%s), ya esta cerrada." %(transfer.output_statement.name)
  79. statementConfirm = True
  80. return {
  81. 'transferId': transfer.id,
  82. 'statementConfirm': statementConfirm,
  83. 'messageConfirm': messageConfirm,
  84. 'inputLine': transfer.input_line.id,
  85. 'outputLine': transfer.output_line.id,
  86. }
  87. def writer_cashbox_transfer(id, value):
  88. transfer = request.env[_MODEL].browse(id)
  89. if (not transfer):
  90. return False
  91. return transfer.sudo().write(value)
  92. '''
  93. # _ _ _ _ _ _____ __
  94. # | | | |_ __ | (_)_ __ | | __ |_ _| __ __ _ _ __ ___ / _| ___ _ __
  95. # | | | | '_ \| | | '_ \| |/ / | || '__/ _` | '_ \/ __| |_ / _ \ '__|
  96. # | |_| | | | | | | | | | < | || | | (_| | | | \__ \ _| __/ |
  97. # \___/|_| |_|_|_|_| |_|_|\_\ |_||_| \__,_|_| |_|___/_| \___|_|
  98. # Get Cash Box Transfer
  99. def _get_cash_box_transfer(self, id):
  100. return self.env['cash.box.transfer'].browse(id)
  101. # Get timezone
  102. def get_timezone(self):
  103. tz_name = self._context.get('tz') or self.env.user.tz
  104. return timezone(tz_name)
  105. # Get server date
  106. def get_server_datetime(self):
  107. return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
  108. # Get Statement Line
  109. def _get_statement_Line(self, id):
  110. return self.env['account.bank.statement.line'].browse(id)
  111. # writer Line Statement
  112. def _write_statement_line_transfer(self, line):
  113. return line.write({
  114. 'is_deleted': False
  115. })
  116. # Unlink Line Statement
  117. def _unlink_statement_line_transfer(self, line):
  118. return line.unlink()
  119. # Write cash box transfer
  120. def _write_cash_box_transfer(self, casbox, message, user):
  121. return casbox.write({
  122. 'message_deleted': message,
  123. 'active': False,
  124. 'write_uid': user.id
  125. })
  126. # unlink Initial
  127. @api.model
  128. def unlink_transfer(self, values):
  129. ### user
  130. user = self.env.user
  131. ### date server
  132. date_server = self.get_server_datetime()
  133. ### account Statement
  134. statement = self._get_statement_transfer(values['statementId'])
  135. if (not statement):
  136. return {
  137. 'state' : False,
  138. 'message': "No se pudo completar la operación."
  139. }
  140. ### Transferencia
  141. cashBoxTransfer = self._get_cash_box_transfer(values['transferId'])
  142. if (not cashBoxTransfer):
  143. return {
  144. 'state' : False,
  145. 'message': "No se pudo completar la operación."
  146. }
  147. ### Line output
  148. lineOutput = self._get_statement_Line(cashBoxTransfer.output_line.id)
  149. if (not lineOutput):
  150. return {
  151. 'state' : False,
  152. 'message': "No se pudo completar la operación."
  153. }
  154. if (lineOutput.statement_id.state == 'confirm'):
  155. return {
  156. 'state' : False,
  157. 'message': "No se pudo completar la operación, por que la caja de origen ya fue cerrada"
  158. }
  159. ### Line Input
  160. lineInput = self._get_statement_Line(cashBoxTransfer.input_line.id)
  161. if (not lineInput):
  162. return {
  163. 'state' : False,
  164. 'message': "No se pudo completar la operación."
  165. }
  166. if (lineInput.statement_id.state == 'confirm'):
  167. return {
  168. 'state' : False,
  169. 'message': "No se pudo completar la operación por que la caja destino ya fue cerrada"
  170. }
  171. ## updtae
  172. writeOutput = self._write_statement_line_transfer(lineOutput)
  173. ## unlink
  174. unlinkOutpu = self._unlink_statement_line_transfer(lineOutput)
  175. if (not unlinkOutpu):
  176. return {
  177. 'state' : False,
  178. 'message': "No se pudo completar la operación, error al eliminar la transferencia"
  179. }
  180. ## Update
  181. writeInput = self._write_statement_line_transfer(lineInput)
  182. ## Unlink
  183. unlinkInput = self._unlink_statement_line_transfer(lineInput)
  184. if (not unlinkInput):
  185. return {
  186. 'state' : False,
  187. 'message': "No se pudo completar la operación, error al eliminar la transferencia"
  188. }
  189. message = values['comment']+" \nEliminado por la caja "+str(statement.name)+" y por Usuario "+str(user.name)+" en "+str(date_server)
  190. writeTransfer = self._write_cash_box_transfer(cashBoxTransfer, message, user)
  191. if (not writeTransfer):
  192. return {
  193. 'state' : False,
  194. 'message': "No se pudo completar la operación"
  195. }
  196. return { 'state': True,
  197. 'message': 'Operación realizada con éxito'
  198. }
  199. '''