cashbox_statement_confirm.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. # -*- coding: utf-8 -*-
  2. from openerp import models, fields, tools, api
  3. import openerp.addons.decimal_precision as dp
  4. class cashbox_statement_confirm(models.Model):
  5. _name = "cashbox.statement.confirm"
  6. # _inherit = "cashbox.statement.confirm"
  7. name = fields.Char('name', required=True)
  8. ref = fields.Char('Ref')
  9. date = fields.Date()
  10. active = fields.Boolean('Active', default=True)
  11. message_confirm = fields.Text('Message Confirm')
  12. message_deleted = fields.Text('Message Deleted')
  13. ### Statement confirm - open
  14. statement_id = fields.Many2one('account.bank.statement', 'Bank Statement Confirm')
  15. statement_open = fields.Many2one('account.bank.statement', 'Bank Statement Open')
  16. ## User statement - User Confirm
  17. user_statement = fields.Many2one('res.users', 'Res user')
  18. user_confirm = fields.Many2one('res.users', 'Res user')
  19. ## Journal
  20. journal_id = fields.Many2one('account.journal', 'Journal')
  21. ## Line
  22. line_difference = fields.Many2one('account.bank.statement.line', 'Bank statement line difference')
  23. line_next_open = fields.Many2one('account.bank.statement.line', 'Bank statement line next open statement')
  24. line_open = fields.Many2one('account.bank.statement.line', 'Bank statement line open')
  25. ### Amount
  26. amount_statement = fields.Float('Amount Statement', digits_compute=dp.get_precision('Account'), required=True)
  27. amount_real = fields.Float('Amount Real', digits_compute=dp.get_precision('Account'), required=True)
  28. amount_difference = fields.Float('Amount Difference', digits_compute=dp.get_precision('Account'), required=True)
  29. amount_next_open = fields.Float('Amount Next open statement', digits_compute=dp.get_precision('Account'), required=True)
  30. ## estado del regsitro
  31. state_avaliable = fields.Boolean('Avaliable', default=True, help="True : disponible, False : Utilizado")
  32. # casbox_transfer_id =fields.Many2one('cash.box.transfer', 'cashBox transfer')
  33. cashbox_transfer_ids =fields.One2many('cash.box.transfer', 'cashbox_confirm_id', string="transfer id")
  34. '''
  35. @fields statement_id = Id de la caja que se esta cerrando.
  36. @fields user_statement = Id del propietario de la caja.
  37. @fields journal_id = Id del diario de la caja.
  38. @fields line_difference = Id de la linea de la caja donde se registro la diferencia del cierre.
  39. @fields line_next_open = Id de la linea donde se registro el monto de próxima apertura de caja.
  40. @fields amount_statement = Monto en la caja del sistema.
  41. @fields amount_real = Monto real del cierre de la caja.
  42. @fields amount_difference = Monto de la diferencia del cierre.
  43. @fields amount_next_open = Monto de la próxima apertura de caja.
  44. @fields user_confirm = Usuario que cerro la caja
  45. @fields statement_open = Id de la caja que utilize el saldo disponible para proxima apertura
  46. @fields state_avaliable = 'True': disponible, 'False': Utilizado
  47. @fields cashbox_transfer_ids= id transferencia
  48. '''
  49. '''
  50. ____ _ _ ____ __ _
  51. | _ \ _ __(_)_ __ | |_ / ___|___ _ __ / _(_)_ __ _ __ ___
  52. | |_) | '__| | '_ \| __| | | / _ \| '_ \| |_| | '__| '_ ` _ \
  53. | __/| | | | | | | |_ | |__| (_) | | | | _| | | | | | | | |
  54. |_| |_| |_|_| |_|\__| \____\___/|_| |_|_| |_|_| |_| |_| |_| v 1.0
  55. '''
  56. @api.model
  57. def get_cashbox_statement_confirm(self, statementId):
  58. return[{
  59. 'id': casBox.id,
  60. 'name': casBox.name,
  61. 'statement': {
  62. 'id': casBox.statement_id.id,
  63. 'name': casBox.statement_id.name,
  64. 'dateOpen': casBox.statement_id.date,
  65. 'dateConfirm': casBox.statement_id.closing_date,
  66. 'typeStatementID': casBox.statement_id.type_statement.id,
  67. 'typeStatementName': casBox.statement_id.type_statement.name,
  68. 'userId': casBox.statement_id.user_id.id,
  69. 'userName': casBox.statement_id.user_id.name,
  70. 'currencystatement': {
  71. 'id': casBox.statement_id.currency.id,
  72. 'name': casBox.statement_id.currency.name,
  73. 'symbol': casBox.statement_id.currency.symbol,
  74. 'rate': casBox.statement_id.currency.rate,
  75. 'thousandsSeparator': casBox.statement_id.currency.thousands_separator,
  76. 'decimalSeparator': casBox.statement_id.currency.decimal_separator,
  77. 'decimalPlaces': casBox.statement_id.currency.decimal_places,
  78. 'position': casBox.statement_id.currency.position,
  79. },
  80. },
  81. 'userStatementName': casBox.user_statement.name,
  82. 'userStatementLogin': casBox.user_statement.login,
  83. 'userConfirmName': casBox.user_confirm.name,
  84. 'userConfirmLogin': casBox.user_confirm.login,
  85. 'amountStatement': casBox.amount_statement,
  86. 'amountReal': casBox.amount_real,
  87. 'amountDifference': casBox.amount_difference,
  88. 'amountNextOpen': casBox.amount_next_open,
  89. 'transferCasBox': [{
  90. 'id': confirm.id,
  91. 'name': confirm.name,
  92. 'amount': confirm.amount
  93. } for confirm in self.env['cash.box.transfer'].search([('cashbox_confirm_id.id', '=', casBox.id)])],
  94. } for casBox in self.env['cashbox.statement.confirm'].search([('statement_id.id', '=', statementId), ('active', '=', True)])]
  95. '''
  96. Transfer
  97. '''
  98. class cash_box_transfer(models.Model):
  99. _inherit = "cash.box.transfer"
  100. cashbox_confirm_id = fields.Many2one('cashbox.statement.confirm', string='cashBox Confirm', ondelete='cascade', index=True)
  101. ''' ____ _ _ ____ __ _
  102. / ___|__ _ ___| |__ | |__ _____ __ / ___|___ _ __ / _(_)_ __ _ __ ___
  103. | | / _` / __| '_ \| '_ \ / _ \ \/ / | | / _ \| '_ \| |_| | '__| '_ ` _ \
  104. | |__| (_| \__ \ | | | |_) | (_) > < | |__| (_) | | | | _| | | | | | | | |
  105. \____\__,_|___/_| |_|_.__/ \___/_/\_\ \____\___/|_| |_|_| |_|_| |_| |_| |_| v 2.0
  106. '''
  107. class AccountBankStatementConfirm(models.Model):
  108. _inherit = 'account.bank.statement'
  109. '''
  110. GET CASHBOX GENERAL.
  111. '''
  112. @api.model
  113. def get_account_bank_statement_general(self, id):
  114. bankStatement = self._get_statement_transfer(id)
  115. return [{
  116. 'id': statement.id,
  117. 'journalId': statement.journal_id.id,
  118. 'date': statement.date,
  119. 'typeStatementId': statement.type_statement.id,
  120. 'typeStatementName': statement.type_statement.name,
  121. 'userId': statement.user_id.id,
  122. 'userName': statement.user_id.name,
  123. 'name': statement.name,
  124. 'state': statement.state,
  125. 'statementname': statement.name+" / "+statement.user_id.name
  126. } for statement in self.env['account.bank.statement'].search([('state', '=', 'open'), ('id', '!=', bankStatement.id), ('type_statement.code', '=', 'GENERAL'), ('journal_id.id', '=', bankStatement.journal_id.id)])]
  127. '''
  128. Confirm Statement
  129. '''
  130. @api.model
  131. def account_bank_statement_confirm(self, values):
  132. ## Date Server
  133. date_server = self.get_server_datetime()
  134. ## User
  135. user = self.env.user
  136. ## Statement
  137. bankStatement = self._get_statement_transfer(values['statementId'])
  138. if (not bankStatement):
  139. return {
  140. 'state': False,
  141. 'message': "Error en obtener la caja base."
  142. }
  143. casboxConfirm = self._get_casbox_confirm(bankStatement.id)
  144. amountStatement = 0.0
  145. for line in bankStatement.line_ids:
  146. amountStatement += line.amount
  147. if (bankStatement.balance_start > 0):
  148. amountStatement += bankStatement.balance_start
  149. amountReal = 0 if (values['amountReal'] < 0) else values['amountReal']
  150. ## Diference
  151. lineBalance = []
  152. if (amountStatement != amountReal):
  153. name = "Ajuste de cierre de caja "
  154. lineBalance = self._create_statement_line_confirm(bankStatement, name, (amountReal - amountStatement),values['refBalance'])
  155. ## TRANSFERENCIA
  156. cash_box_transfer = []
  157. if (values['transfer']):
  158. statementTransfer = self._get_statement_transfer(values['statementTransfer'])
  159. if (not statementTransfer):
  160. return {
  161. 'state': False,
  162. 'message': "Error al obtener la caja general."
  163. }
  164. name = "TRANSFERENCIA/"+str(statementTransfer.name)
  165. lineTransfer = self._create_statement_line_transfer(bankStatement, name, (-values['amountTransfer']), values['refTransfer'])
  166. if (not lineTransfer):
  167. return {
  168. 'state': False,
  169. 'message': "Error al registrar la transferencia."
  170. }
  171. name = "TRANSFERENCIA/"+str(bankStatement.name)
  172. lineGeneralTransfer = self._create_statement_line_transfer(statementTransfer, name, (values['amountTransfer']), values['refTransfer'])
  173. if (not lineGeneralTransfer):
  174. return {
  175. 'state': False,
  176. 'message': "Error al registrar la transferencia."
  177. }
  178. cash_box_transfer = self._create_cash_box_transfer(values['refTransfer'], abs(values['amountTransfer']), lineGeneralTransfer, lineTransfer)
  179. if (not cash_box_transfer):
  180. return {
  181. 'state': False,
  182. 'message': "Error al registrar la transferencia."
  183. }
  184. amountNextOpen = 0.0
  185. for line in bankStatement.line_ids:
  186. amountNextOpen += line.amount
  187. if (bankStatement.balance_start > 0):
  188. amountNextOpen += bankStatement.balance_start
  189. lineNextOpen = []
  190. if (amountNextOpen > 0):
  191. name ="Saldo para próxima apertura de caja."
  192. ref = "Cierre"
  193. lineNextOpen = self._create_statement_line_transfer(bankStatement, name, -amountNextOpen, ref)
  194. ## chasbox Confirm
  195. cashboxConfirm = {
  196. 'name': "CIERRE DE CAJA /"+str(bankStatement.name),
  197. 'date': date_server,
  198. 'ref': values['refBalance'],
  199. 'statement_id': bankStatement.id,
  200. 'user_statement': bankStatement.user_id.id,
  201. 'user_confirm': user.id,
  202. 'journal_id' : bankStatement.journal_id.id,
  203. 'amount_statement': amountStatement,
  204. 'amount_real': values['amountReal'],
  205. 'line_difference': lineBalance.id if (lineBalance) else '',
  206. 'amount_difference': lineBalance.amount if (lineBalance) else 0.0,
  207. 'line_next_open': lineNextOpen.id if(lineNextOpen) else '',
  208. 'amount_next_open': abs(lineNextOpen.amount) if(lineNextOpen) else 0.0,
  209. 'state_avaliable': True if(lineNextOpen and lineNextOpen.amount > 0) else False,
  210. }
  211. statementConfirm = self._create_cashbox_statement_confirm(cashboxConfirm, bankStatement)
  212. if (not statementConfirm):
  213. return {
  214. 'state': False,
  215. 'message': "Error en el cierre de caja ."
  216. }
  217. if (cash_box_transfer):
  218. cash_box_transfer.write({'cashbox_confirm_id': statementConfirm.id })
  219. confirm = bankStatement.button_confirm_cash()
  220. if (not confirm):
  221. return {
  222. 'state': False,
  223. 'message': "Error en el cierre de caja ."
  224. }
  225. return {
  226. 'state': True,
  227. 'message': "Operación realizada con suceso."
  228. }
  229. '''
  230. Get Cashbox statement Confirm
  231. '''
  232. def _get_casbox_confirm(self,statementId):
  233. return self.env['cashbox.statement.confirm'].search([('statement_id.id', '=', statementId)])
  234. '''
  235. Create Line statement.
  236. '''
  237. def _create_statement_line_confirm(self, statement, name, amount, ref):
  238. statementLine = {
  239. 'statement_id': statement.id,
  240. 'name': name,
  241. 'amount': amount,
  242. 'ref': ref,
  243. 'account_id': statement.journal_id.internal_account_id.id,
  244. 'journal_id': statement.journal_id.id,
  245. 'is_deleted': True
  246. }
  247. return self.env['account.bank.statement.line'].create(statementLine)
  248. '''
  249. Create cashbox Confirm
  250. '''
  251. def _create_cashbox_statement_confirm(self,values, statement):
  252. casbox = self.env['cashbox.statement.confirm'].search([('statement_id.id', '=', statement.id)])
  253. if (not casbox):
  254. confirm = self.env['cashbox.statement.confirm'].create(values)
  255. else:
  256. confirm = casbox.write(values)
  257. if (confirm):
  258. confirm = self.env['cashbox.statement.confirm'].search([('statement_id.id', '=', statement.id)])
  259. return confirm