# -*- coding: utf-8 -*- from openerp.http import request _MODEL = 'cash.box.transfer' def create_cashbox_transfer(data): from account_bank_statement import search_account_bank_statement from account_bank_statement_line import create_statement_line ''' Statement Origin ''' statementOrigin = search_account_bank_statement(data['casboxOriginId']) if (not statementOrigin): return { 'state': False, 'message': 'Error. Obtener la Caja' } ''' Statement Destino ''' statementDest = search_account_bank_statement(data['casboxDestID']) if (not statementDest): return { 'state': False, 'message': 'Error. Obtener la Caja' } ''' Caja Origin (line) ''' lineOrigin = create_statement_line({ 'statement_id': statementOrigin['id'], 'name': "TRANSFERIDO A(%s) Ref. %s" % (statementDest['name'], data['description']), 'amount': -data['amount'] , 'ref': 'TRANSFERENCIA', 'account_id': statementOrigin['accountId'], 'journal_id': statementOrigin['journalId'], # 'is_deleted': True }) if (not lineOrigin): return { 'state': False, 'message': 'Error de transferencia, registro de salida de caja.' } ''' Caja Destino (line) ''' lineDest = create_statement_line({ 'statement_id': statementDest['id'], 'name': "TRANSFERIDO DE(%s) Ref. %s" % (statementOrigin['name'], data['description']), 'amount': abs(data['amount']), 'ref': 'TRANSFERENCIA', 'account_id': statementDest['accountId'], 'journal_id': statementDest['journalId'], # 'is_deleted': True }) cash = { 'name': "TRANSFERENCIA %s a %s" %(statementOrigin['name'], statementDest['name']), 'amount': abs(data['amount']), 'ref': data['description'], 'input_line': lineDest.id, 'output_line': lineOrigin.id, 'input_statement': statementDest['id'], 'output_statement': statementOrigin['id'], 'date': lineDest.date } transfer = request.env[_MODEL].sudo().create(cash) result = { 'state': True, 'message': "Transferencia realizada con suceso." } if (not transfer): result = { 'state': False, 'message': "Error.. En la creación de la transferencia." } return result ''' Verify trasnfer for line''' def verify_transfer(line): transfer = request.env[_MODEL].search(['|',('input_line.id','=',line),('output_line.id','=',line)]) if (not transfer): return {} messageConfirm = "" statementConfirm = False if (transfer.input_statement.state == 'confirm'): messageConfirm += "La caja origen (%s), ya esta cerrada." %(transfer.input_statement.name) statementConfirm = True if (transfer.output_statement.state == 'confirm'): messageConfirm += "La caja destino (%s), ya esta cerrada." %(transfer.output_statement.name) statementConfirm = True return { 'transferId': transfer.id, 'statementConfirm': statementConfirm, 'messageConfirm': messageConfirm, 'inputLine': transfer.input_line.id, 'outputLine': transfer.output_line.id, } def writer_cashbox_transfer(id, value): transfer = request.env[_MODEL].browse(id) if (not transfer): return False return transfer.sudo().write(value) ''' # _ _ _ _ _ _____ __ # | | | |_ __ | (_)_ __ | | __ |_ _| __ __ _ _ __ ___ / _| ___ _ __ # | | | | '_ \| | | '_ \| |/ / | || '__/ _` | '_ \/ __| |_ / _ \ '__| # | |_| | | | | | | | | | < | || | | (_| | | | \__ \ _| __/ | # \___/|_| |_|_|_|_| |_|_|\_\ |_||_| \__,_|_| |_|___/_| \___|_| # Get Cash Box Transfer def _get_cash_box_transfer(self, id): return self.env['cash.box.transfer'].browse(id) # Get timezone def get_timezone(self): tz_name = self._context.get('tz') or self.env.user.tz return timezone(tz_name) # Get server date def get_server_datetime(self): return datetime.now(self.get_timezone()).strftime(DATE_FORMAT) # Get Statement Line def _get_statement_Line(self, id): return self.env['account.bank.statement.line'].browse(id) # writer Line Statement def _write_statement_line_transfer(self, line): return line.write({ 'is_deleted': False }) # Unlink Line Statement def _unlink_statement_line_transfer(self, line): return line.unlink() # Write cash box transfer def _write_cash_box_transfer(self, casbox, message, user): return casbox.write({ 'message_deleted': message, 'active': False, 'write_uid': user.id }) # unlink Initial @api.model def unlink_transfer(self, values): ### user user = self.env.user ### date server date_server = self.get_server_datetime() ### account Statement statement = self._get_statement_transfer(values['statementId']) if (not statement): return { 'state' : False, 'message': "No se pudo completar la operación." } ### Transferencia cashBoxTransfer = self._get_cash_box_transfer(values['transferId']) if (not cashBoxTransfer): return { 'state' : False, 'message': "No se pudo completar la operación." } ### Line output lineOutput = self._get_statement_Line(cashBoxTransfer.output_line.id) if (not lineOutput): return { 'state' : False, 'message': "No se pudo completar la operación." } if (lineOutput.statement_id.state == 'confirm'): return { 'state' : False, 'message': "No se pudo completar la operación, por que la caja de origen ya fue cerrada" } ### Line Input lineInput = self._get_statement_Line(cashBoxTransfer.input_line.id) if (not lineInput): return { 'state' : False, 'message': "No se pudo completar la operación." } if (lineInput.statement_id.state == 'confirm'): return { 'state' : False, 'message': "No se pudo completar la operación por que la caja destino ya fue cerrada" } ## updtae writeOutput = self._write_statement_line_transfer(lineOutput) ## unlink unlinkOutpu = self._unlink_statement_line_transfer(lineOutput) if (not unlinkOutpu): return { 'state' : False, 'message': "No se pudo completar la operación, error al eliminar la transferencia" } ## Update writeInput = self._write_statement_line_transfer(lineInput) ## Unlink unlinkInput = self._unlink_statement_line_transfer(lineInput) if (not unlinkInput): return { 'state' : False, 'message': "No se pudo completar la operación, error al eliminar la transferencia" } message = values['comment']+" \nEliminado por la caja "+str(statement.name)+" y por Usuario "+str(user.name)+" en "+str(date_server) writeTransfer = self._write_cash_box_transfer(cashBoxTransfer, message, user) if (not writeTransfer): return { 'state' : False, 'message': "No se pudo completar la operación" } return { 'state': True, 'message': 'Operación realizada con éxito' } '''