account_bank_statement.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request
  3. from eiru_logging import make_info_log
  4. _MODEL = 'account.bank.statement'
  5. ''' '''
  6. def search_account_bank_statement(statementId):
  7. make_info_log('GET Account Bank Statement')
  8. casbox= []
  9. statement = request.env['account.bank.statement'].browse(statementId)
  10. if (statement):
  11. casbox = {
  12. 'id': statement.id,
  13. 'name': statement.name,
  14. 'accountId': statement.journal_id.internal_account_id.id,
  15. 'journalId': statement.journal_id.id,
  16. 'balanceEnd': statement.balance_end
  17. }
  18. return casbox
  19. ''' account.bank.statement all'''
  20. def get_account_bank_statement( journalIds=None):
  21. make_info_log('GET Account Bank Statement all ')
  22. from account_bank_statement_line import get_line_statement
  23. from res_users import get_name_users
  24. from account_journal import get_name_journal, get_currencie_journal
  25. from account_bank_statement_type import get_name_statement_type
  26. if (not journalIds):
  27. return False
  28. statementSQL = '''
  29. SELECT
  30. statement.id,
  31. statement.name,
  32. statement.date,
  33. statement.state,
  34. statement.balance_end,
  35. statement.user_id,
  36. statement.journal_id,
  37. statement.type_statement
  38. FROM account_bank_statement as statement
  39. WHERE statement.state = 'open' and statement.journal_id in %s
  40. ORDER BY statement.id
  41. '''
  42. # WHERE
  43. # statement.state = 'open'
  44. # statement.journal_id in %s
  45. domainSQL = tuple(journalIds)
  46. request.cr.execute(statementSQL,[domainSQL])
  47. return [{
  48. 'id': statement[0],
  49. 'name': statement[1],
  50. 'date': statement[2],
  51. 'state': statement[3],
  52. 'balanceEnd': statement[4] or 0,
  53. 'userId': statement[5],
  54. 'userName': get_name_users(statement[5]),
  55. 'journalId': statement[6],
  56. 'journalName': get_name_journal(statement[6]),
  57. 'currency': get_currencie_journal(statement[6]),
  58. 'typeStatementId': statement[7],
  59. 'typeStatementName': get_name_statement_type(statement[7]),
  60. 'userSessionID': request.env.user.id,
  61. 'userSessionName': request.env.user.name,
  62. 'lines': get_line_statement(statement[0]),
  63. } for statement in request.cr.fetchall()]
  64. '''Create Account Bank Statement '''
  65. def create_account_bank_statement(data):
  66. make_info_log('Create Account Bank Statement')
  67. from account_bank_statement_line import get_line_statement
  68. from res_users import get_name_users
  69. from account_journal import get_name_journal, get_currencie_journal
  70. from account_bank_statement_type import get_name_statement_type
  71. from account_bank_statement_config import get_bank_statement_config
  72. config = get_bank_statement_config()
  73. if (not config):
  74. return {
  75. 'state': False,
  76. 'message': 'No existe configuración de caja'
  77. }
  78. domain = [('journal_id', '=', data['journal_id']),('type_statement', '=', data['type_statement']),('user_id', '=', data['user_id']),('state', '=', 'open')]
  79. statementVerify = request.env[_MODEL].search(domain)
  80. if ((not config.statement_open_config) and (statementVerify)):
  81. return {
  82. 'state': False,
  83. 'message': 'Ya existe una caja abierta con los mismos parámetros'
  84. }
  85. ''' Create CashBox '''
  86. statement = request.env[_MODEL].sudo().create(data)
  87. if(not statement):
  88. return {
  89. 'state': False,
  90. 'message': 'No fue posible crear la caja'
  91. }
  92. ''' Open cashBox '''
  93. openStatement = statement.sudo().button_open()
  94. if (not openStatement):
  95. return {
  96. 'state': False,
  97. 'message': 'No fue posible abrir la caja '
  98. }
  99. return {
  100. 'state': openStatement,
  101. 'message': 'Caja creada con éxito',
  102. 'data' : {
  103. 'id': statement.id,
  104. 'name': statement.name,
  105. 'date': statement.date,
  106. 'state': statement.state,
  107. 'balanceEnd': statement.balance_end or 0,
  108. 'userId': statement.user_id.id,
  109. 'userName': get_name_users(statement.user_id.id),
  110. 'journalId': statement.journal_id.id,
  111. 'journalName': get_name_journal(statement.journal_id.id),
  112. 'currency': get_currencie_journal(statement.journal_id.id),
  113. 'typeStatementId': statement.type_statement.id,
  114. 'typeStatementName': get_name_statement_type(statement.type_statement.id),
  115. 'userSessionID': request.env.user.id,
  116. 'userSessionName': request.env.user.name,
  117. 'lines': get_line_statement(statement.id)
  118. }
  119. }
  120. # return {
  121. # 'state': openStatement,
  122. # 'message': 'Caja creada con éxito',
  123. # 'data' : {
  124. # 'id': statement.id,
  125. # 'name': statement.name,
  126. # 'date': statement.date,
  127. # 'state': statement.state,
  128. # 'balanceEnd': statement.balance_end,
  129. # 'user': {
  130. # 'id': statement.user_id.id,
  131. # 'name': statement.user_id.name,
  132. # 'displayName': statement.user_id.display_name
  133. # },
  134. # 'userSession': request.env.user.id,
  135. # 'journal': {
  136. # 'id': statement.journal_id.id,
  137. # 'name': statement.journal_id.name,
  138. # 'displayName': statement.journal_id.display_name,
  139. # 'code': statement.journal_id.code,
  140. # 'cashControl': statement.journal_id.cash_control,
  141. # 'type': statement.journal_id.type,
  142. # 'currency': {
  143. # 'id': statement.journal_id.currency.id,
  144. # 'name': statement.journal_id.currency.name,
  145. # 'displayName': statement.journal_id.currency.display_name
  146. # }
  147. # },
  148. # 'line': [{
  149. # 'id': line.id,
  150. # 'date': line.date,
  151. # 'name': line.name,
  152. # 'ref': line.ref,
  153. # 'amount': line.amount,
  154. # 'patner':{
  155. # 'id': line.partner_id.id,
  156. # 'name': line.partner_id.name,
  157. # 'displayName': line.partner_id.display_name
  158. # },
  159. # } for line in statement.line_ids],
  160. # 'typeStatement': {
  161. # 'id': statement.type_statement.id,
  162. # 'name': statement.type_statement.name,
  163. # 'code': statement.type_statement.code
  164. # },
  165. # 'currency':{
  166. # 'id': statement.currency.id,
  167. # 'name': statement.currency.display_name,
  168. # 'base': statement.currency.base,
  169. # 'symbol': statement.currency.symbol,
  170. # 'position': statement.currency.position,
  171. # 'rateSilent': statement.currency.rate_silent,
  172. # 'decimalSeparator': statement.currency.decimal_separator,
  173. # 'decimalPlaces': statement.currency.decimal_places,
  174. # 'thousandsSeparator': statement.currency.thousands_separator
  175. # }
  176. # }
  177. # }
  178. ''' confirm bank Statement '''
  179. def closing_statement(data):
  180. make_info_log('Confirm Account Bank Statement')
  181. from account_bank_statement_line import create_statement_line
  182. from cashbox_confirm import get_cashbox_statement_confirm, create_cashbox_statement_confirm, write_cashbox_statement_confirm
  183. from server_datetime import get_date
  184. lineDifference = []
  185. lineclosing = []
  186. statement = request.env[_MODEL].browse(data['statementId'])
  187. if (not statement):
  188. return {
  189. 'state': False,
  190. 'message': 'No fue posible localizar la caja.'
  191. }
  192. amountStatement = statement.balance_end or 0.0
  193. ''' Registrar Diferencia entre saldos '''
  194. if (statement.balance_end != data['amount']):
  195. lineDifference = create_statement_line({
  196. 'statement_id': statement.id,
  197. 'name': "Diferencia entre valor teórico de cierre y valor real de cierre.",
  198. 'amount': data['amount'] - statement.balance_end,
  199. 'ref': 'AJUSTE DE CIERRE',
  200. 'account_id': statement.journal_id.internal_account_id.id,
  201. 'journal_id': statement.journal_id.id,
  202. # 'is_deleted': True
  203. })
  204. if (not lineDifference):
  205. return {
  206. 'state': False,
  207. 'message': 'No fue posible registrar el ajuste de cierre.'
  208. }
  209. ''' Resgitro de saldo '''
  210. if (statement.balance_end != 0):
  211. lineclosing = create_statement_line({
  212. 'statement_id': statement.id,
  213. 'name': "Registro de saldo para próxima apertura.",
  214. 'amount': - statement.balance_end if (statement.balance_end > 0) else abs(statement.balance_end),
  215. 'ref': 'CIERRE DE CAJA',
  216. 'account_id': statement.journal_id.internal_account_id.id,
  217. 'journal_id': statement.journal_id.id,
  218. # 'is_deleted': True
  219. })
  220. if (not lineclosing):
  221. return {
  222. 'state': False,
  223. 'message': 'No fue posible registrar el cierre de caja.'
  224. }
  225. amountNexOpen = abs(lineclosing.amount) if (lineclosing.amount < 0 ) else - (lineclosing.amount)
  226. # import web_pdb; web_pdb.set_trace()
  227. ''' Registro de Cierre de caja '''
  228. statementConfirm = get_cashbox_statement_confirm([('statement_id.id', '=', statement.id)])
  229. cashboxConfirm = {
  230. 'name': "CIERRE DE CAJA /"+str(statement.name),
  231. 'date': get_date(),
  232. 'ref': data['description'],
  233. 'statement_id': statement.id,
  234. 'user_statement': statement.user_id.id,
  235. 'user_confirm': request.env.user.id,
  236. 'journal_id' : statement.journal_id.id,
  237. 'amount_statement': amountStatement,
  238. 'amount_real': data['amount'],
  239. 'line_difference': lineDifference.id if (lineDifference) else '',
  240. 'amount_difference': lineDifference.amount if (lineDifference) else 0.0,
  241. 'line_next_open': lineclosing.id if(lineclosing) else '',
  242. 'amount_next_open': amountNexOpen if(lineclosing) else 0.0,
  243. 'state_avaliable': True if(lineclosing and abs(lineclosing.amount) > 0) else False,
  244. }
  245. confirm = create_cashbox_statement_confirm(cashboxConfirm) if (not statementConfirm) else write_cashbox_statement_confirm(statementConfirm.id, cashboxConfirm)
  246. if (not confirm):
  247. return {
  248. 'state': False,
  249. 'message': 'No fue posible crear el cierre de caja'
  250. }
  251. response = statement.button_confirm_cash()
  252. if (not response):
  253. return {
  254. 'state': False,
  255. 'message': 'No fue posible cerrar la caja'
  256. }
  257. return {
  258. 'state': True,
  259. 'message': 'Cierre de caja, realizada con éxito.'
  260. }