# -*- coding: utf-8 -*- from openerp.http import request from eiru_logging import make_info_log _MODEL = 'account.bank.statement' ''' ''' def search_account_bank_statement(statementId): make_info_log('GET Account Bank Statement') casbox= [] statement = request.env['account.bank.statement'].browse(statementId) if (statement): casbox = { 'id': statement.id, 'name': statement.name, 'accountId': statement.journal_id.internal_account_id.id, 'journalId': statement.journal_id.id, 'balanceEnd': statement.balance_end } return casbox ''' account.bank.statement all''' def get_account_bank_statement( journalIds=None): make_info_log('GET Account Bank Statement all ') from account_bank_statement_line import get_line_statement from res_users import get_name_users from account_journal import get_name_journal, get_currencie_journal from account_bank_statement_type import get_name_statement_type if (not journalIds): return False statementSQL = ''' SELECT statement.id, statement.name, statement.date, statement.state, statement.balance_end, statement.user_id, statement.journal_id, statement.type_statement FROM account_bank_statement as statement WHERE statement.state = 'open' and statement.journal_id in %s ORDER BY statement.id ''' # WHERE # statement.state = 'open' # statement.journal_id in %s domainSQL = tuple(journalIds) request.cr.execute(statementSQL,[domainSQL]) return [{ 'id': statement[0], 'name': statement[1], 'date': statement[2], 'state': statement[3], 'balanceEnd': statement[4] or 0, 'userId': statement[5], 'userName': get_name_users(statement[5]), 'journalId': statement[6], 'journalName': get_name_journal(statement[6]), 'currency': get_currencie_journal(statement[6]), 'typeStatementId': statement[7], 'typeStatementName': get_name_statement_type(statement[7]), 'userSessionID': request.env.user.id, 'userSessionName': request.env.user.name, 'lines': get_line_statement(statement[0]), } for statement in request.cr.fetchall()] '''Create Account Bank Statement ''' def create_account_bank_statement(data): make_info_log('Create Account Bank Statement') from account_bank_statement_line import get_line_statement from res_users import get_name_users from account_journal import get_name_journal, get_currencie_journal from account_bank_statement_type import get_name_statement_type from account_bank_statement_config import get_bank_statement_config config = get_bank_statement_config() if (not config): return { 'state': False, 'message': 'No existe configuración de caja' } domain = [('journal_id.id', '=', data['journal_id']), ('type_statement.id', '=', data['type_statement']), ('user_id.id', '=', data['user_id']), ('state', '=', 'open')] statementVerify = request.env[_MODEL].search(domain) if ((not config.statement_open_config) and (statementVerify)): return { 'state': False, 'message': 'Ya existe una caja abierta con los mismos parámetros' } ''' Create CashBox ''' statement = request.env[_MODEL].sudo().create(data) if (not statement): return { 'state': False, 'message': 'No fue posible crear la caja' } ''' Open cashBox ''' openStatement = statement.sudo().button_open() if (not openStatement): return { 'state': False, 'message': 'No fue posible abrir la caja ' } return { 'state': statement.state, 'message': 'Caja creada con éxito', 'data' : { 'id': statement.id, 'name': statement.name, 'date': statement.date, 'state': statement.state, 'balanceEnd': statement.balance_end or 0, 'userId': statement.user_id.id, 'userName': get_name_users(statement.user_id.id), 'journalId': statement.journal_id.id, 'journalName': get_name_journal(statement.journal_id.id), 'currency': get_currencie_journal(statement.journal_id.id), 'typeStatementId': statement.type_statement.id, 'typeStatementName': get_name_statement_type(statement.type_statement.id), 'userSessionID': request.env.user.id, 'userSessionName': request.env.user.name, 'lines': get_line_statement(statement.id) } } ''' confirm bank Statement ''' def closing_statement(data): make_info_log('Confirm Account Bank Statement') from account_bank_statement_line import create_statement_line from cashbox_confirm import get_cashbox_statement_confirm, create_cashbox_statement_confirm, write_cashbox_statement_confirm from server_datetime import get_date lineDifference = [] lineclosing = [] statement = request.env[_MODEL].browse(data['statementId']) if (not statement): return { 'state': False, 'message': 'No fue posible localizar la caja.' } amountStatement = statement.balance_end or 0.0 ''' Registrar Diferencia entre saldos ''' if (statement.balance_end != data['amount']): lineDifference = create_statement_line({ 'statement_id': statement.id, 'name': "Diferencia entre valor teórico de cierre y valor real de cierre.", 'amount': data['amount'] - statement.balance_end, 'ref': 'AJUSTE DE CIERRE', 'account_id': statement.journal_id.internal_account_id.id, 'journal_id': statement.journal_id.id, # 'is_deleted': True }) if (not lineDifference): return { 'state': False, 'message': 'No fue posible registrar el ajuste de cierre.' } ''' Resgitro de saldo ''' if (statement.balance_end != 0): lineclosing = create_statement_line({ 'statement_id': statement.id, 'name': "Registro de saldo para próxima apertura.", 'amount': - statement.balance_end if (statement.balance_end > 0) else abs(statement.balance_end), 'ref': 'CIERRE DE CAJA', 'account_id': statement.journal_id.internal_account_id.id, 'journal_id': statement.journal_id.id, # 'is_deleted': True }) if (not lineclosing): return { 'state': False, 'message': 'No fue posible registrar el cierre de caja.' } amountNexOpen = abs(lineclosing.amount) if (lineclosing.amount < 0 ) else - (lineclosing.amount) ''' Registro de Cierre de caja ''' statementConfirm = get_cashbox_statement_confirm([('statement_id.id', '=', statement.id)]) cashboxConfirm = { 'name': "CIERRE DE CAJA /"+str(statement.name), 'date': get_date(), 'ref': data['description'], 'statement_id': statement.id, 'user_statement': statement.user_id.id, 'user_confirm': request.env.user.id, 'journal_id' : statement.journal_id.id, 'amount_statement': amountStatement, 'amount_real': data['amount'], 'line_difference': lineDifference.id if (lineDifference) else '', 'amount_difference': lineDifference.amount if (lineDifference) else 0.0, 'line_next_open': lineclosing.id if(lineclosing) else '', 'amount_next_open': amountNexOpen if(lineclosing) else 0.0, 'state_avaliable': True if(lineclosing and abs(lineclosing.amount) > 0) else False, } confirm = create_cashbox_statement_confirm(cashboxConfirm) if (not statementConfirm) else write_cashbox_statement_confirm(statementConfirm.id, cashboxConfirm) if (not confirm): return { 'state': False, 'message': 'No fue posible crear el cierre de caja' } response = statement.button_confirm_cash() if (not response): return { 'state': False, 'message': 'No fue posible cerrar la caja' } return { 'state': True, 'message': 'Cierre de caja, realizada con éxito.' }